func (*suite) TestEvictOld(c *gc.C) { // Test that evict removes entries even when they're // in the old map. now := time.Now() p := cache.New(time.Minute) // Populate the cache with an initial entry. v, err := cache.GetAtTime(p, "a", fetchValue("a"), now) c.Assert(err, gc.IsNil) c.Assert(v, gc.Equals, "a") c.Assert(p.Len(), gc.Equals, 1) v, err = cache.GetAtTime(p, "b", fetchValue("b"), now.Add(time.Minute/2)) c.Assert(err, gc.IsNil) c.Assert(v, gc.Equals, "b") c.Assert(p.Len(), gc.Equals, 2) // Fetch an item after the expiry time, // causing current entries to be moved to old. v, err = cache.GetAtTime(p, "a", fetchValue("a1"), now.Add(time.Minute+1)) c.Assert(err, gc.IsNil) c.Assert(v, gc.Equals, "a1") c.Assert(p.Len(), gc.Equals, 2) c.Assert(cache.OldLen(p), gc.Equals, 1) p.Evict("b") v, err = cache.GetAtTime(p, "b", fetchValue("b1"), now.Add(time.Minute+2)) c.Assert(err, gc.IsNil) c.Assert(v, gc.Equals, "b1") }
func (*suite) TestEntriesRemovedWhenNotRetrieved(c *gc.C) { now := time.Now() p := cache.New(time.Minute) // Populate the cache with an initial entry. v, err := cache.GetAtTime(p, "a", fetchValue("a"), now) c.Assert(err, gc.IsNil) c.Assert(v, gc.Equals, "a") c.Assert(p.Len(), gc.Equals, 1) // Fetch another item after the expiry time, // causing current entries to be moved to old. v, err = cache.GetAtTime(p, "b", fetchValue("b"), now.Add(time.Minute+1)) c.Assert(err, gc.IsNil) c.Assert(v, gc.Equals, "b") c.Assert(p.Len(), gc.Equals, 2) c.Assert(cache.OldLen(p), gc.Equals, 1) // Fetch the other item after another expiry time // causing the old entries to be discarded because // nothing has fetched them. v, err = cache.GetAtTime(p, "b", fetchValue("b"), now.Add(time.Minute*2+2)) c.Assert(err, gc.IsNil) c.Assert(v, gc.Equals, "b") c.Assert(p.Len(), gc.Equals, 1) }