84 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			84 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package ezcache_test
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| 	"testing"
 | |
| 	"time"
 | |
| 
 | |
| 	"codeberg.org/danjones000/ezcache"
 | |
| 	"github.com/stretchr/testify/assert"
 | |
| )
 | |
| 
 | |
| var fetcher ezcache.Fetcher[uint8, string] = func(key uint8) (string, error) { return fmt.Sprintf("%d", key), nil }
 | |
| 
 | |
| func TestNewHappy(t *testing.T) {
 | |
| 	cache, err := ezcache.New(fetcher, 1)
 | |
| 
 | |
| 	assert.NoError(t, err)
 | |
| 	assert.NotNil(t, cache)
 | |
| }
 | |
| 
 | |
| func TestNewNilFetcher(t *testing.T) {
 | |
| 	cache, err := ezcache.New[uint8, string](nil, 1)
 | |
| 
 | |
| 	assert.ErrorIs(t, err, ezcache.ErrInvalidFetcher)
 | |
| 	assert.Nil(t, cache)
 | |
| }
 | |
| 
 | |
| func TestNewBadExpiry(tt *testing.T) {
 | |
| 	testcases := []struct {
 | |
| 		name string
 | |
| 		exp  time.Duration
 | |
| 	}{
 | |
| 		{"zero", 0},
 | |
| 		{"negative", -5},
 | |
| 	}
 | |
| 	for _, tc := range testcases {
 | |
| 		tt.Run(tc.name, func(t *testing.T) {
 | |
| 			cache, err := ezcache.New(fetcher, tc.exp)
 | |
| 
 | |
| 			assert.ErrorIs(t, err, ezcache.ErrInvalidExpiry)
 | |
| 			assert.Nil(t, cache)
 | |
| 		})
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func TestGetHappy(t *testing.T) {
 | |
| 	var hit bool
 | |
| 	cache, _ := ezcache.New(func(key uint8) (string, error) { hit = true; return fetcher(key) }, 5*time.Second)
 | |
| 
 | |
| 	val, err := cache.Get(4)
 | |
| 	assert.NoError(t, err)
 | |
| 	assert.Equal(t, "4", val)
 | |
| 	assert.True(t, hit)
 | |
| 
 | |
| 	hit = false
 | |
| 	val, err = cache.Get(4)
 | |
| 	assert.NoError(t, err)
 | |
| 	assert.Equal(t, "4", val)
 | |
| 	assert.False(t, hit)
 | |
| }
 | |
| 
 | |
| func TestGetExpire(t *testing.T) {
 | |
| 	var hit bool
 | |
| 	cache, _ := ezcache.New(func(key uint8) (string, error) { hit = true; return fetcher(key) }, 1)
 | |
| 
 | |
| 	val, err := cache.Get(4)
 | |
| 	assert.NoError(t, err)
 | |
| 	assert.Equal(t, "4", val)
 | |
| 	assert.True(t, hit)
 | |
| 
 | |
| 	hit = false
 | |
| 	time.Sleep(2)
 | |
| 	val, err = cache.Get(4)
 | |
| 	assert.NoError(t, err)
 | |
| 	assert.Equal(t, "4", val)
 | |
| 	assert.True(t, hit)
 | |
| }
 | |
| 
 | |
| func TestGetError(t *testing.T) {
 | |
| 	cache, _ := ezcache.New(func(k uint8) (byte, error) { return 0, fmt.Errorf("Nope for %d", k) }, 1)
 | |
| 
 | |
| 	_, err := cache.Get(4)
 | |
| 	assert.ErrorContains(t, err, "Nope for 4")
 | |
| }
 |