filebrowser/backend/diskcache/file_cache_test.go

68 lines
1.6 KiB
Go
Raw Normal View History

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()
}