github.com/Jeffail/benthos/v3@v3.65.0/internal/integration/cache_test_definitions.go (about) 1 package integration 2 3 import ( 4 "errors" 5 "fmt" 6 "testing" 7 "time" 8 9 "github.com/Jeffail/benthos/v3/lib/types" 10 "github.com/stretchr/testify/assert" 11 "github.com/stretchr/testify/require" 12 ) 13 14 // CacheTestOpenClose checks that the cache can be started, an item added, and 15 // then stopped. 16 func CacheTestOpenClose() CacheTestDefinition { 17 return namedCacheTest( 18 "can open and close", 19 func(t *testing.T, env *cacheTestEnvironment) { 20 t.Parallel() 21 22 cache := initCache(t, env) 23 t.Cleanup(func() { 24 closeCache(t, cache) 25 }) 26 27 require.NoError(t, cache.Add("foo", []byte("bar"))) 28 29 res, err := cache.Get("foo") 30 require.NoError(t, err) 31 assert.Equal(t, "bar", string(res)) 32 }, 33 ) 34 } 35 36 // CacheTestMissingKey checks that we get an error on missing key. 37 func CacheTestMissingKey() CacheTestDefinition { 38 return namedCacheTest( 39 "return consistent error on missing key", 40 func(t *testing.T, env *cacheTestEnvironment) { 41 t.Parallel() 42 43 cache := initCache(t, env) 44 t.Cleanup(func() { 45 closeCache(t, cache) 46 }) 47 48 _, err := cache.Get("missingkey") 49 assert.EqualError(t, err, "key does not exist") 50 }, 51 ) 52 } 53 54 // CacheTestDoubleAdd ensures that a double add returns an error. 55 func CacheTestDoubleAdd() CacheTestDefinition { 56 return namedCacheTest( 57 "add with duplicate key fails", 58 func(t *testing.T, env *cacheTestEnvironment) { 59 t.Parallel() 60 61 cache := initCache(t, env) 62 t.Cleanup(func() { 63 closeCache(t, cache) 64 }) 65 66 require.NoError(t, cache.Add("addkey", []byte("first"))) 67 68 assert.Eventually(t, func() bool { 69 return errors.Is(cache.Add("addkey", []byte("second")), types.ErrKeyAlreadyExists) 70 }, time.Minute, time.Second) 71 72 res, err := cache.Get("addkey") 73 require.NoError(t, err) 74 assert.Equal(t, "first", string(res)) 75 }, 76 ) 77 } 78 79 // CacheTestDelete checks that deletes work. 80 func CacheTestDelete() CacheTestDefinition { 81 return namedCacheTest( 82 "can set and delete keys", 83 func(t *testing.T, env *cacheTestEnvironment) { 84 t.Parallel() 85 86 cache := initCache(t, env) 87 t.Cleanup(func() { 88 closeCache(t, cache) 89 }) 90 91 require.NoError(t, cache.Add("addkey", []byte("first"))) 92 93 res, err := cache.Get("addkey") 94 require.NoError(t, err) 95 assert.Equal(t, "first", string(res)) 96 97 require.NoError(t, cache.Delete("addkey")) 98 99 _, err = cache.Get("addkey") 100 require.EqualError(t, err, "key does not exist") 101 }, 102 ) 103 } 104 105 // CacheTestGetAndSet checks that we can set and then get n items. 106 func CacheTestGetAndSet(n int) CacheTestDefinition { 107 return namedCacheTest( 108 "can get and set", 109 func(t *testing.T, env *cacheTestEnvironment) { 110 t.Parallel() 111 112 cache := initCache(t, env) 113 t.Cleanup(func() { 114 closeCache(t, cache) 115 }) 116 117 for i := 0; i < n; i++ { 118 key := fmt.Sprintf("key:%v", i) 119 value := fmt.Sprintf("value:%v", i) 120 require.NoError(t, cache.Set(key, []byte(value))) 121 } 122 123 for i := 0; i < n; i++ { 124 key := fmt.Sprintf("key:%v", i) 125 value := fmt.Sprintf("value:%v", i) 126 127 res, err := cache.Get(key) 128 require.NoError(t, err) 129 assert.Equal(t, value, string(res)) 130 } 131 }, 132 ) 133 }