2020-07-27 17:01:02 +00:00
|
|
|
package diskcache
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
2024-08-24 22:02:33 +00:00
|
|
|
"os"
|
2020-07-27 17:01:02 +00:00
|
|
|
"path/filepath"
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestFileCache(t *testing.T) {
|
|
|
|
ctx := context.Background()
|
|
|
|
const (
|
|
|
|
key = "key"
|
|
|
|
value = "some text"
|
|
|
|
newValue = "new text"
|
2024-08-24 22:02:33 +00:00
|
|
|
cacheRoot = "cache"
|
2020-07-27 17:01:02 +00:00
|
|
|
cachedFilePath = "a/62/a62f2225bf70bfaccbc7f1ef2a397836717377de"
|
|
|
|
)
|
|
|
|
|
2024-08-24 22:02:33 +00:00
|
|
|
// Create temporary directory for the cache
|
|
|
|
cacheDir, err := os.MkdirTemp("", cacheRoot)
|
|
|
|
require.NoError(t, err)
|
|
|
|
defer os.RemoveAll(cacheDir) // Clean up
|
|
|
|
|
|
|
|
cache, err := NewFileCache(cacheDir)
|
|
|
|
require.NoError(t, err)
|
2020-07-27 17:01:02 +00:00
|
|
|
|
|
|
|
// store new key
|
2024-08-24 22:02:33 +00:00
|
|
|
err = cache.Store(ctx, key, []byte(value))
|
2020-07-27 17:01:02 +00:00
|
|
|
require.NoError(t, err)
|
2024-08-24 22:02:33 +00:00
|
|
|
checkValue(t, ctx, cache, filepath.Join(cacheDir, cachedFilePath), key, value)
|
2020-07-27 17:01:02 +00:00
|
|
|
|
|
|
|
// update existing key
|
|
|
|
err = cache.Store(ctx, key, []byte(newValue))
|
|
|
|
require.NoError(t, err)
|
2024-08-24 22:02:33 +00:00
|
|
|
checkValue(t, ctx, cache, filepath.Join(cacheDir, cachedFilePath), key, newValue)
|
2020-07-27 17:01:02 +00:00
|
|
|
|
|
|
|
// delete key
|
|
|
|
err = cache.Delete(ctx, key)
|
|
|
|
require.NoError(t, err)
|
2024-08-24 22:02:33 +00:00
|
|
|
exists := fileExists(filepath.Join(cacheDir, cachedFilePath))
|
2020-07-27 17:01:02 +00:00
|
|
|
require.False(t, exists)
|
|
|
|
}
|
|
|
|
|
2024-08-24 22:02:33 +00:00
|
|
|
func checkValue(t *testing.T, ctx context.Context, cache *FileCache, fileFullPath string, key, wantValue string) {
|
2020-07-27 17:01:02 +00:00
|
|
|
t.Helper()
|
|
|
|
// check actual file content
|
2024-08-24 22:02:33 +00:00
|
|
|
b, err := os.ReadFile(fileFullPath)
|
2020-07-27 17:01:02 +00:00
|
|
|
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))
|
|
|
|
}
|
2024-08-24 22:02:33 +00:00
|
|
|
|
|
|
|
func fileExists(filename string) bool {
|
|
|
|
info, err := os.Stat(filename)
|
|
|
|
if os.IsNotExist(err) {
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
return !info.IsDir()
|
|
|
|
}
|