pkg.re/essentialkaos/ek.10@v12.41.0+incompatible/cache/cache_test.go (about)

     1  package cache
     2  
     3  // ////////////////////////////////////////////////////////////////////////////////// //
     4  //                                                                                    //
     5  //                         Copyright (c) 2022 ESSENTIAL KAOS                          //
     6  //      Apache License, Version 2.0 <https://www.apache.org/licenses/LICENSE-2.0>     //
     7  //                                                                                    //
     8  // ////////////////////////////////////////////////////////////////////////////////// //
     9  
    10  import (
    11  	"testing"
    12  	"time"
    13  
    14  	. "pkg.re/essentialkaos/check.v1"
    15  )
    16  
    17  // ////////////////////////////////////////////////////////////////////////////////// //
    18  
    19  type CacheSuite struct{}
    20  
    21  // ////////////////////////////////////////////////////////////////////////////////// //
    22  
    23  func Test(t *testing.T) { TestingT(t) }
    24  
    25  // ////////////////////////////////////////////////////////////////////////////////// //
    26  
    27  var _ = Suite(&CacheSuite{})
    28  
    29  // ////////////////////////////////////////////////////////////////////////////////// //
    30  
    31  func (s *CacheSuite) TestCache(c *C) {
    32  	cache := New(time.Second/16, time.Second/32)
    33  
    34  	cache.Set("1", "TEST")
    35  	cache.Set("2", "TEST")
    36  
    37  	c.Assert(cache.Size(), Equals, 2)
    38  
    39  	c.Assert(cache.Get("1"), Equals, "TEST")
    40  	c.Assert(cache.Get("2"), Equals, "TEST")
    41  
    42  	c.Assert(cache.Has("2"), Equals, true)
    43  	c.Assert(cache.Has("3"), Equals, false)
    44  
    45  	item, exp := cache.GetWithExpiration("1")
    46  
    47  	c.Assert(item, Equals, "TEST")
    48  	c.Assert(exp.IsZero(), Not(Equals), true)
    49  
    50  	cache.Delete("1")
    51  
    52  	c.Assert(cache.Get("1"), Equals, nil)
    53  
    54  	time.Sleep(time.Second / 8)
    55  
    56  	item, _ = cache.GetWithExpiration("2")
    57  
    58  	c.Assert(cache.Get("2"), Equals, nil)
    59  	c.Assert(item, Equals, nil)
    60  
    61  	cache.Flush()
    62  }
    63  
    64  func (s *CacheSuite) TestCacheWithoutJanitor(c *C) {
    65  	cache := New(time.Second/32, 0)
    66  
    67  	cache.Set("1", "TEST")
    68  	cache.Set("2", "TEST")
    69  	cache.Set("3", "TEST")
    70  
    71  	c.Assert(cache.Has("2"), Equals, true)
    72  	c.Assert(cache.Has("0"), Equals, false)
    73  
    74  	time.Sleep(time.Second / 16)
    75  
    76  	c.Assert(cache.Expired(), Equals, 3)
    77  	c.Assert(cache.Has("1"), Equals, false)
    78  	c.Assert(cache.Get("2"), Equals, nil)
    79  
    80  	data, _ := cache.GetWithExpiration("3")
    81  
    82  	c.Assert(data, Equals, nil)
    83  }
    84  
    85  func (s *CacheSuite) TestExpiration(c *C) {
    86  	cache := New(time.Second/16, time.Minute)
    87  
    88  	cache.Set("1", "TEST")
    89  
    90  	time.Sleep(time.Second / 8)
    91  
    92  	item, _ := cache.GetWithExpiration("1")
    93  	c.Assert(item, Equals, nil)
    94  
    95  	c.Assert(cache.Get("1"), Equals, nil)
    96  }
    97  
    98  func (s *CacheSuite) TestNil(c *C) {
    99  	var cache *Cache
   100  
   101  	cache.Set("1", "TEST")
   102  	cache.Delete("1")
   103  	cache.Flush()
   104  
   105  	c.Assert(cache.Size(), Equals, 0)
   106  	c.Assert(cache.Expired(), Equals, 0)
   107  	c.Assert(cache.Get("1"), Equals, nil)
   108  	c.Assert(cache.Has("1"), Equals, false)
   109  
   110  	item, exp := cache.GetWithExpiration("1")
   111  	c.Assert(item, Equals, nil)
   112  	c.Assert(exp.IsZero(), Equals, true)
   113  }