go-micro.dev/v5@v5.12.0/cache/memory_test.go (about) 1 package cache 2 3 import ( 4 "context" 5 "testing" 6 "time" 7 ) 8 9 var ( 10 ctx = context.TODO() 11 key string = "test" 12 val interface{} = "hello go-micro" 13 ) 14 15 // TestMemCache tests the in-memory cache implementation. 16 func TestCache(t *testing.T) { 17 t.Run("CacheGetMiss", func(t *testing.T) { 18 if _, _, err := NewCache().Get(ctx, key); err == nil { 19 t.Error("expected to get no value from cache") 20 } 21 }) 22 23 t.Run("CacheGetHit", func(t *testing.T) { 24 c := NewCache() 25 26 if err := c.Put(ctx, key, val, 0); err != nil { 27 t.Error(err) 28 } 29 30 if a, _, err := c.Get(ctx, key); err != nil { 31 t.Errorf("Expected a value, got err: %s", err) 32 } else if a != val { 33 t.Errorf("Expected '%v', got '%v'", val, a) 34 } 35 }) 36 37 t.Run("CacheGetExpired", func(t *testing.T) { 38 c := NewCache() 39 e := 20 * time.Millisecond 40 41 if err := c.Put(ctx, key, val, e); err != nil { 42 t.Error(err) 43 } 44 45 <-time.After(25 * time.Millisecond) 46 if _, _, err := c.Get(ctx, key); err == nil { 47 t.Error("expected to get no value from cache") 48 } 49 }) 50 51 t.Run("CacheGetValid", func(t *testing.T) { 52 c := NewCache() 53 e := 25 * time.Millisecond 54 55 if err := c.Put(ctx, key, val, e); err != nil { 56 t.Error(err) 57 } 58 59 <-time.After(20 * time.Millisecond) 60 if _, _, err := c.Get(ctx, key); err != nil { 61 t.Errorf("expected a value, got err: %s", err) 62 } 63 }) 64 65 t.Run("CacheDeleteMiss", func(t *testing.T) { 66 if err := NewCache().Delete(ctx, key); err == nil { 67 t.Error("expected to delete no value from cache") 68 } 69 }) 70 71 t.Run("CacheDeleteHit", func(t *testing.T) { 72 c := NewCache() 73 74 if err := c.Put(ctx, key, val, 0); err != nil { 75 t.Error(err) 76 } 77 78 if err := c.Delete(ctx, key); err != nil { 79 t.Errorf("Expected to delete an item, got err: %s", err) 80 } 81 82 if _, _, err := c.Get(ctx, key); err == nil { 83 t.Errorf("Expected error") 84 } 85 }) 86 } 87 88 func TestCacheWithOptions(t *testing.T) { 89 t.Run("CacheWithExpiration", func(t *testing.T) { 90 c := NewCache(Expiration(20 * time.Millisecond)) 91 92 if err := c.Put(ctx, key, val, 0); err != nil { 93 t.Error(err) 94 } 95 96 <-time.After(25 * time.Millisecond) 97 if _, _, err := c.Get(ctx, key); err == nil { 98 t.Error("expected to get no value from cache") 99 } 100 }) 101 102 t.Run("CacheWithItems", func(t *testing.T) { 103 c := NewCache(Items(map[string]Item{key: {val, 0}})) 104 105 if a, _, err := c.Get(ctx, key); err != nil { 106 t.Errorf("Expected a value, got err: %s", err) 107 } else if a != val { 108 t.Errorf("Expected '%v', got '%v'", val, a) 109 } 110 }) 111 }