@@ -19,6 +19,7 @@ type ObjectSuite struct {
1919 bObject plumbing.EncodedObject
2020 cObject plumbing.EncodedObject
2121 dObject plumbing.EncodedObject
22+ eObject plumbing.EncodedObject
2223}
2324
2425var _ = Suite (& ObjectSuite {})
@@ -28,6 +29,7 @@ func (s *ObjectSuite) SetUpTest(c *C) {
2829 s .bObject = newObject ("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" , 3 * Byte )
2930 s .cObject = newObject ("cccccccccccccccccccccccccccccccccccccccc" , 1 * Byte )
3031 s .dObject = newObject ("dddddddddddddddddddddddddddddddddddddddd" , 1 * Byte )
32+ s .eObject = newObject ("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee" , 2 * Byte )
3133
3234 s .c = make (map [string ]Object )
3335 s .c ["two_bytes" ] = NewObjectLRU (2 * Byte )
@@ -70,6 +72,24 @@ func (s *ObjectSuite) TestPutCacheOverflow(c *C) {
7072 c .Assert (obj , NotNil )
7173}
7274
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+
7393func (s * ObjectSuite ) TestClear (c * C ) {
7494 for _ , o := range s .c {
7595 o .Put (s .aObject )
0 commit comments