@@ -19,6 +19,7 @@ type ObjectSuite struct {
19
19
bObject plumbing.EncodedObject
20
20
cObject plumbing.EncodedObject
21
21
dObject plumbing.EncodedObject
22
+ eObject plumbing.EncodedObject
22
23
}
23
24
24
25
var _ = Suite (& ObjectSuite {})
@@ -28,6 +29,7 @@ func (s *ObjectSuite) SetUpTest(c *C) {
28
29
s .bObject = newObject ("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" , 3 * Byte )
29
30
s .cObject = newObject ("cccccccccccccccccccccccccccccccccccccccc" , 1 * Byte )
30
31
s .dObject = newObject ("dddddddddddddddddddddddddddddddddddddddd" , 1 * Byte )
32
+ s .eObject = newObject ("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee" , 2 * Byte )
31
33
32
34
s .c = make (map [string ]Object )
33
35
s .c ["two_bytes" ] = NewObjectLRU (2 * Byte )
@@ -70,6 +72,24 @@ func (s *ObjectSuite) TestPutCacheOverflow(c *C) {
70
72
c .Assert (obj , NotNil )
71
73
}
72
74
75
+ func (s * ObjectSuite ) TestEvictMultipleObjects (c * C ) {
76
+ o := s .c ["two_bytes" ]
77
+
78
+ o .Put (s .cObject )
79
+ o .Put (s .dObject ) // now cache is full with two objects
80
+ o .Put (s .eObject ) // this put should evict all previous objects
81
+
82
+ obj , ok := o .Get (s .cObject .Hash ())
83
+ c .Assert (ok , Equals , false )
84
+ c .Assert (obj , IsNil )
85
+ obj , ok = o .Get (s .dObject .Hash ())
86
+ c .Assert (ok , Equals , false )
87
+ c .Assert (obj , IsNil )
88
+ obj , ok = o .Get (s .eObject .Hash ())
89
+ c .Assert (ok , Equals , true )
90
+ c .Assert (obj , NotNil )
91
+ }
92
+
73
93
func (s * ObjectSuite ) TestClear (c * C ) {
74
94
for _ , o := range s .c {
75
95
o .Put (s .aObject )
0 commit comments