@@ -14,7 +14,7 @@ import (
1414func Test (t * testing.T ) { TestingT (t ) }
1515
1616type ObjectSuite struct {
17- c Object
17+ c map [ string ] Object
1818 aObject plumbing.EncodedObject
1919 bObject plumbing.EncodedObject
2020 cObject plumbing.EncodedObject
@@ -29,70 +29,89 @@ func (s *ObjectSuite) SetUpTest(c *C) {
2929 s .cObject = newObject ("cccccccccccccccccccccccccccccccccccccccc" , 1 * Byte )
3030 s .dObject = newObject ("dddddddddddddddddddddddddddddddddddddddd" , 1 * Byte )
3131
32- s .c = NewObjectLRU (2 * Byte )
32+ s .c = make (map [string ]Object )
33+ s .c ["two_bytes" ] = NewObjectLRU (2 * Byte )
34+ s .c ["default_lru" ] = NewObjectLRUDefault ()
3335}
3436
3537func (s * ObjectSuite ) TestPutSameObject (c * C ) {
36- s .c .Put (s .aObject )
37- s .c .Put (s .aObject )
38- _ , ok := s .c .Get (s .aObject .Hash ())
39- c .Assert (ok , Equals , true )
38+ for _ , o := range s .c {
39+ o .Put (s .aObject )
40+ o .Put (s .aObject )
41+ _ , ok := o .Get (s .aObject .Hash ())
42+ c .Assert (ok , Equals , true )
43+ }
4044}
4145
4246func (s * ObjectSuite ) TestPutBigObject (c * C ) {
43- s .c .Put (s .bObject )
44- _ , ok := s .c .Get (s .aObject .Hash ())
45- c .Assert (ok , Equals , false )
47+ for _ , o := range s .c {
48+ o .Put (s .bObject )
49+ _ , ok := o .Get (s .aObject .Hash ())
50+ c .Assert (ok , Equals , false )
51+ }
4652}
4753
4854func (s * ObjectSuite ) TestPutCacheOverflow (c * C ) {
49- s .c .Put (s .aObject )
50- s .c .Put (s .cObject )
51- s .c .Put (s .dObject )
55+ // this test only works with an specific size
56+ o := s .c ["two_bytes" ]
57+
58+ o .Put (s .aObject )
59+ o .Put (s .cObject )
60+ o .Put (s .dObject )
5261
53- obj , ok := s . c .Get (s .aObject .Hash ())
62+ obj , ok := o .Get (s .aObject .Hash ())
5463 c .Assert (ok , Equals , false )
5564 c .Assert (obj , IsNil )
56- obj , ok = s . c .Get (s .cObject .Hash ())
65+ obj , ok = o .Get (s .cObject .Hash ())
5766 c .Assert (ok , Equals , true )
5867 c .Assert (obj , NotNil )
59- obj , ok = s . c .Get (s .dObject .Hash ())
68+ obj , ok = o .Get (s .dObject .Hash ())
6069 c .Assert (ok , Equals , true )
6170 c .Assert (obj , NotNil )
6271}
6372
6473func (s * ObjectSuite ) TestClear (c * C ) {
65- s .c .Put (s .aObject )
66- s .c .Clear ()
67- obj , ok := s .c .Get (s .aObject .Hash ())
68- c .Assert (ok , Equals , false )
69- c .Assert (obj , IsNil )
74+ for _ , o := range s .c {
75+ o .Put (s .aObject )
76+ o .Clear ()
77+ obj , ok := o .Get (s .aObject .Hash ())
78+ c .Assert (ok , Equals , false )
79+ c .Assert (obj , IsNil )
80+ }
7081}
7182
7283func (s * ObjectSuite ) TestConcurrentAccess (c * C ) {
73- var wg sync.WaitGroup
74-
75- for i := 0 ; i < 1000 ; i ++ {
76- wg .Add (3 )
77- go func (i int ) {
78- s .c .Put (newObject (fmt .Sprint (i ), FileSize (i )))
79- wg .Done ()
80- }(i )
81-
82- go func (i int ) {
83- if i % 30 == 0 {
84- s .c .Clear ()
85- }
86- wg .Done ()
87- }(i )
88-
89- go func (i int ) {
90- s .c .Get (plumbing .NewHash (fmt .Sprint (i )))
91- wg .Done ()
92- }(i )
84+ for _ , o := range s .c {
85+ var wg sync.WaitGroup
86+
87+ for i := 0 ; i < 1000 ; i ++ {
88+ wg .Add (3 )
89+ go func (i int ) {
90+ o .Put (newObject (fmt .Sprint (i ), FileSize (i )))
91+ wg .Done ()
92+ }(i )
93+
94+ go func (i int ) {
95+ if i % 30 == 0 {
96+ o .Clear ()
97+ }
98+ wg .Done ()
99+ }(i )
100+
101+ go func (i int ) {
102+ o .Get (plumbing .NewHash (fmt .Sprint (i )))
103+ wg .Done ()
104+ }(i )
105+ }
106+
107+ wg .Wait ()
93108 }
109+ }
110+
111+ func (s * ObjectSuite ) TestDefaultLRU (c * C ) {
112+ defaultLRU := s .c ["default_lru" ].(* ObjectLRU )
94113
95- wg . Wait ( )
114+ c . Assert ( defaultLRU . MaxSize , Equals , DefaultMaxSize )
96115}
97116
98117type dummyObject struct {
0 commit comments