From 0f6c06db068acb7a8eab639df20b72fa717232c8 Mon Sep 17 00:00:00 2001 From: Javi Fontan Date: Tue, 16 Jan 2018 13:12:58 +0000 Subject: Test eviction of more than one object Signed-off-by: Javi Fontan --- plumbing/cache/object_test.go | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/plumbing/cache/object_test.go b/plumbing/cache/object_test.go index ec01d60..ac3f0a3 100644 --- a/plumbing/cache/object_test.go +++ b/plumbing/cache/object_test.go @@ -19,6 +19,7 @@ type ObjectSuite struct { bObject plumbing.EncodedObject cObject plumbing.EncodedObject dObject plumbing.EncodedObject + eObject plumbing.EncodedObject } var _ = Suite(&ObjectSuite{}) @@ -28,6 +29,7 @@ func (s *ObjectSuite) SetUpTest(c *C) { s.bObject = newObject("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", 3*Byte) s.cObject = newObject("cccccccccccccccccccccccccccccccccccccccc", 1*Byte) s.dObject = newObject("dddddddddddddddddddddddddddddddddddddddd", 1*Byte) + s.eObject = newObject("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", 2*Byte) s.c = make(map[string]Object) s.c["two_bytes"] = NewObjectLRU(2 * Byte) @@ -70,6 +72,24 @@ func (s *ObjectSuite) TestPutCacheOverflow(c *C) { c.Assert(obj, NotNil) } +func (s *ObjectSuite) TestEvictMultipleObjects(c *C) { + o := s.c["two_bytes"] + + o.Put(s.cObject) + o.Put(s.dObject) // now cache is full with two objects + o.Put(s.eObject) // this put should evict all previous objects + + obj, ok := o.Get(s.cObject.Hash()) + c.Assert(ok, Equals, false) + c.Assert(obj, IsNil) + obj, ok = o.Get(s.dObject.Hash()) + c.Assert(ok, Equals, false) + c.Assert(obj, IsNil) + obj, ok = o.Get(s.eObject.Hash()) + c.Assert(ok, Equals, true) + c.Assert(obj, NotNil) +} + func (s *ObjectSuite) TestClear(c *C) { for _, o := range s.c { o.Put(s.aObject) -- cgit