Skip to content

Commit

Permalink
add tests for GetWithTTL
Browse files Browse the repository at this point in the history
  • Loading branch information
corinapurcarea committed Aug 12, 2020
1 parent 91984f7 commit 0bc17c6
Show file tree
Hide file tree
Showing 5 changed files with 144 additions and 3 deletions.
46 changes: 46 additions & 0 deletions store/bigcache_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package store
import (
"errors"
"testing"
"time"

mocksStore "github.com/eko/gocache/test/mocks/store/clients"
"github.com/golang/mock/gomock"
Expand Down Expand Up @@ -68,6 +69,51 @@ func TestBigcacheGetWhenError(t *testing.T) {
assert.Nil(t, value)
}

func TestBigcacheGetWithTTL(t *testing.T) {
// Given
ctrl := gomock.NewController(t)
defer ctrl.Finish()

cacheKey := "my-key"
cacheValue := []byte("my-cache-value")

client := mocksStore.NewMockBigcacheClientInterface(ctrl)
client.EXPECT().Get(cacheKey).Return(cacheValue, nil)

store := NewBigcache(client, nil)

// When
value, ttl, err := store.GetWithTTL(cacheKey)

// Then
assert.Nil(t, err)
assert.Equal(t, cacheValue, value)
assert.Equal(t, 0*time.Second, ttl)
}

func TestBigcacheGetWithTTLWhenError(t *testing.T) {
// Given
ctrl := gomock.NewController(t)
defer ctrl.Finish()

cacheKey := "my-key"

expectedErr := errors.New("An unexpected error occurred")

client := mocksStore.NewMockBigcacheClientInterface(ctrl)
client.EXPECT().Get(cacheKey).Return(nil, expectedErr)

store := NewBigcache(client, nil)

// When
value, ttl, err := store.GetWithTTL(cacheKey)

// Then
assert.Equal(t, expectedErr, err)
assert.Nil(t, value)
assert.Equal(t, 0*time.Second, ttl)
}

func TestBigcacheSet(t *testing.T) {
// Given
ctrl := gomock.NewController(t)
Expand Down
2 changes: 1 addition & 1 deletion store/memcache.go
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ func (s *MemcacheStore) GetWithTTL(key interface{}) (interface{}, time.Duration,
return nil, 0, errors.New("Unable to retrieve data from memcache")
}

return item.Value, time.Duration(item.Expiration), err
return item.Value, time.Duration(item.Expiration) * time.Second, err
}

// Set defines data in Memcache for given key identifier
Expand Down
52 changes: 52 additions & 0 deletions store/memcache_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,58 @@ func TestMemcacheGetWhenError(t *testing.T) {
assert.Nil(t, value)
}

func TestMemcacheGetWithTTL(t *testing.T) {
// Given
ctrl := gomock.NewController(t)
defer ctrl.Finish()

options := &Options{Expiration: 3 * time.Second}

cacheKey := "my-key"
cacheValue := []byte("my-cache-value")

client := mocksStore.NewMockMemcacheClientInterface(ctrl)
client.EXPECT().Get(cacheKey).Return(&memcache.Item{
Value: cacheValue,
Expiration: int32(5),
}, nil)

store := NewMemcache(client, options)

// When
value, ttl, err := store.GetWithTTL(cacheKey)

// Then
assert.Nil(t, err)
assert.Equal(t, cacheValue, value)
assert.Equal(t, 5*time.Second, ttl)
}

func TestMemcacheGetWithTTLWhenError(t *testing.T) {
// Given
ctrl := gomock.NewController(t)
defer ctrl.Finish()

options := &Options{Expiration: 3 * time.Second}

cacheKey := "my-key"

expectedErr := errors.New("An unexpected error occurred")

client := mocksStore.NewMockMemcacheClientInterface(ctrl)
client.EXPECT().Get(cacheKey).Return(nil, expectedErr)

store := NewMemcache(client, options)

// When
value, ttl, err := store.GetWithTTL(cacheKey)

// Then
assert.Equal(t, expectedErr, err)
assert.Nil(t, value)
assert.Equal(t, 0*time.Second, ttl)
}

func TestMemcacheSet(t *testing.T) {
// Given
ctrl := gomock.NewController(t)
Expand Down
4 changes: 2 additions & 2 deletions store/ristretto.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,8 @@ func (s *RistrettoStore) Get(key interface{}) (interface{}, error) {

// GetWithTTL returns data stored from a given key
func (s *RistrettoStore) GetWithTTL(key interface{}) (interface{}, time.Duration, error) {
item, err := s.Get(key)
return item, 0, err
value, err := s.Get(key)
return value, 0, err
}

// Set defines data in Ristretto memoey cache for given key identifier
Expand Down
43 changes: 43 additions & 0 deletions store/ristretto_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,49 @@ func TestRistrettoGetWhenError(t *testing.T) {
assert.Equal(t, errors.New("Value not found in Ristretto store"), err)
}

func TestRistrettoGetWithTTL(t *testing.T) {
// Given
ctrl := gomock.NewController(t)
defer ctrl.Finish()

cacheKey := "my-key"
cacheValue := "my-cache-value"

client := mocksStore.NewMockRistrettoClientInterface(ctrl)
client.EXPECT().Get(cacheKey).Return(cacheValue, true)

store := NewRistretto(client, nil)

// When
value, ttl, err := store.GetWithTTL(cacheKey)

// Then
assert.Nil(t, err)
assert.Equal(t, cacheValue, value)
assert.Equal(t, 0*time.Second, ttl)
}

func TestRistrettoGetWithTTLWhenError(t *testing.T) {
// Given
ctrl := gomock.NewController(t)
defer ctrl.Finish()

cacheKey := "my-key"

client := mocksStore.NewMockRistrettoClientInterface(ctrl)
client.EXPECT().Get(cacheKey).Return(nil, false)

store := NewRistretto(client, nil)

// When
value, ttl, err := store.GetWithTTL(cacheKey)

// Then
assert.Nil(t, value)
assert.Equal(t, errors.New("Value not found in Ristretto store"), err)
assert.Equal(t, 0*time.Second, ttl)
}

func TestRistrettoSet(t *testing.T) {
// Given
ctrl := gomock.NewController(t)
Expand Down

0 comments on commit 0bc17c6

Please sign in to comment.