56 lines
1.4 KiB
Go
56 lines
1.4 KiB
Go
|
package diskcache
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"path/filepath"
|
||
|
"testing"
|
||
|
|
||
|
"github.com/spf13/afero"
|
||
|
"github.com/stretchr/testify/require"
|
||
|
)
|
||
|
|
||
|
func TestFileCache(t *testing.T) {
|
||
|
ctx := context.Background()
|
||
|
const (
|
||
|
key = "key"
|
||
|
value = "some text"
|
||
|
newValue = "new text"
|
||
|
cacheRoot = "/cache"
|
||
|
cachedFilePath = "a/62/a62f2225bf70bfaccbc7f1ef2a397836717377de"
|
||
|
)
|
||
|
|
||
|
fs := afero.NewMemMapFs()
|
||
|
cache := New(fs, "/cache")
|
||
|
|
||
|
// store new key
|
||
|
err := cache.Store(ctx, key, []byte(value))
|
||
|
require.NoError(t, err)
|
||
|
checkValue(t, ctx, fs, filepath.Join(cacheRoot, cachedFilePath), cache, key, value)
|
||
|
|
||
|
// update existing key
|
||
|
err = cache.Store(ctx, key, []byte(newValue))
|
||
|
require.NoError(t, err)
|
||
|
checkValue(t, ctx, fs, filepath.Join(cacheRoot, cachedFilePath), cache, key, newValue)
|
||
|
|
||
|
// delete key
|
||
|
err = cache.Delete(ctx, key)
|
||
|
require.NoError(t, err)
|
||
|
exists, err := afero.Exists(fs, filepath.Join(cacheRoot, cachedFilePath))
|
||
|
require.NoError(t, err)
|
||
|
require.False(t, exists)
|
||
|
}
|
||
|
|
||
|
func checkValue(t *testing.T, ctx context.Context, fs afero.Fs, fileFullPath string, cache *FileCache, key, wantValue string) { //nolint:golint
|
||
|
t.Helper()
|
||
|
// check actual file content
|
||
|
b, err := afero.ReadFile(fs, fileFullPath)
|
||
|
require.NoError(t, err)
|
||
|
require.Equal(t, wantValue, string(b))
|
||
|
|
||
|
// check cache content
|
||
|
b, ok, err := cache.Load(ctx, key)
|
||
|
require.NoError(t, err)
|
||
|
require.True(t, ok)
|
||
|
require.Equal(t, wantValue, string(b))
|
||
|
}
|