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