a06f331eb8
CI / benchmark (push) Has been skipped
install-script / posix-syntax (push) Successful in 6m1s
CI / build-onnx (push) Failing after 6m43s
init-smoke / dry-run (push) Failing after 15m57s
security / govulncheck (push) Has been cancelled
security / trivy-fs (push) Has been cancelled
CI / test (1.26, ubuntu-latest) (push) Has been cancelled
Scorecard supply-chain security / Scorecard analysis (push) Has been cancelled
CI / test (1.26, macos-latest) (push) Has been cancelled
CI / build-windows (push) Has been cancelled
CI / lint (push) Has been cancelled
install-script / powershell-syntax (push) Has been cancelled
install-script / install (macos-14) (push) Has been cancelled
install-script / install (ubuntu-latest) (push) Has been cancelled
160 lines
4.6 KiB
Go
160 lines
4.6 KiB
Go
package eval
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestNewCache_EmptyDirDefaultsToHome(t *testing.T) {
|
|
c, err := NewCache("", "v1.0.0")
|
|
require.NoError(t, err)
|
|
|
|
home, err := os.UserHomeDir()
|
|
require.NoError(t, err)
|
|
|
|
expected := filepath.Join(home, ".gortex-eval-cache")
|
|
assert.Equal(t, expected, c.dir)
|
|
}
|
|
|
|
func TestCheck_ReturnsFalseForNonExistentEntry(t *testing.T) {
|
|
c, err := NewCache(t.TempDir(), "v1.0.0")
|
|
require.NoError(t, err)
|
|
|
|
assert.False(t, c.Check("myrepo", "abc123"))
|
|
}
|
|
|
|
func TestStoreAndCheck(t *testing.T) {
|
|
cacheDir := t.TempDir()
|
|
c, err := NewCache(cacheDir, "v1.0.0")
|
|
require.NoError(t, err)
|
|
|
|
// Create a fake index directory with some content.
|
|
indexDir := t.TempDir()
|
|
require.NoError(t, os.WriteFile(filepath.Join(indexDir, "graph.bin"), []byte("graph-data"), 0o644))
|
|
|
|
require.NoError(t, c.Store("myrepo", "abc123", indexDir))
|
|
assert.True(t, c.Check("myrepo", "abc123"))
|
|
}
|
|
|
|
func TestStoreAndLoad(t *testing.T) {
|
|
cacheDir := t.TempDir()
|
|
c, err := NewCache(cacheDir, "v1.0.0")
|
|
require.NoError(t, err)
|
|
|
|
indexDir := t.TempDir()
|
|
require.NoError(t, os.WriteFile(filepath.Join(indexDir, "graph.bin"), []byte("graph-data"), 0o644))
|
|
|
|
require.NoError(t, c.Store("myrepo", "abc123", indexDir))
|
|
|
|
path, err := c.Load("myrepo", "abc123")
|
|
require.NoError(t, err)
|
|
|
|
expected := filepath.Join(cacheDir, "myrepo_abc123")
|
|
assert.Equal(t, expected, path)
|
|
|
|
// Verify the copied content is intact.
|
|
data, err := os.ReadFile(filepath.Join(path, "graph.bin"))
|
|
require.NoError(t, err)
|
|
assert.Equal(t, "graph-data", string(data))
|
|
}
|
|
|
|
func TestStoreAndValidate_MatchingVersion(t *testing.T) {
|
|
cacheDir := t.TempDir()
|
|
c, err := NewCache(cacheDir, "v1.0.0")
|
|
require.NoError(t, err)
|
|
|
|
indexDir := t.TempDir()
|
|
require.NoError(t, os.WriteFile(filepath.Join(indexDir, "graph.bin"), []byte("data"), 0o644))
|
|
|
|
require.NoError(t, c.Store("myrepo", "abc123", indexDir))
|
|
assert.True(t, c.Validate("myrepo", "abc123"))
|
|
}
|
|
|
|
func TestValidate_ReturnsFalseForMismatchedVersion(t *testing.T) {
|
|
cacheDir := t.TempDir()
|
|
c1, err := NewCache(cacheDir, "v1.0.0")
|
|
require.NoError(t, err)
|
|
|
|
indexDir := t.TempDir()
|
|
require.NoError(t, os.WriteFile(filepath.Join(indexDir, "graph.bin"), []byte("data"), 0o644))
|
|
|
|
require.NoError(t, c1.Store("myrepo", "abc123", indexDir))
|
|
|
|
// Create a new cache instance with a different version.
|
|
c2, err := NewCache(cacheDir, "v2.0.0")
|
|
require.NoError(t, err)
|
|
|
|
assert.False(t, c2.Validate("myrepo", "abc123"))
|
|
}
|
|
|
|
func TestEvict_RemovesEntry(t *testing.T) {
|
|
cacheDir := t.TempDir()
|
|
c, err := NewCache(cacheDir, "v1.0.0")
|
|
require.NoError(t, err)
|
|
|
|
indexDir := t.TempDir()
|
|
require.NoError(t, os.WriteFile(filepath.Join(indexDir, "graph.bin"), []byte("data"), 0o644))
|
|
|
|
require.NoError(t, c.Store("myrepo", "abc123", indexDir))
|
|
assert.True(t, c.Check("myrepo", "abc123"))
|
|
|
|
require.NoError(t, c.Evict("myrepo", "abc123"))
|
|
assert.False(t, c.Check("myrepo", "abc123"))
|
|
}
|
|
|
|
func TestStore_OverwritesExistingEntry(t *testing.T) {
|
|
cacheDir := t.TempDir()
|
|
c, err := NewCache(cacheDir, "v1.0.0")
|
|
require.NoError(t, err)
|
|
|
|
// Store first version.
|
|
indexDir1 := t.TempDir()
|
|
require.NoError(t, os.WriteFile(filepath.Join(indexDir1, "graph.bin"), []byte("old-data"), 0o644))
|
|
require.NoError(t, c.Store("myrepo", "abc123", indexDir1))
|
|
|
|
// Store second version — should overwrite.
|
|
indexDir2 := t.TempDir()
|
|
require.NoError(t, os.WriteFile(filepath.Join(indexDir2, "graph.bin"), []byte("new-data"), 0o644))
|
|
require.NoError(t, c.Store("myrepo", "abc123", indexDir2))
|
|
|
|
path, err := c.Load("myrepo", "abc123")
|
|
require.NoError(t, err)
|
|
|
|
data, err := os.ReadFile(filepath.Join(path, "graph.bin"))
|
|
require.NoError(t, err)
|
|
assert.Equal(t, "new-data", string(data))
|
|
}
|
|
|
|
func TestVersionMismatch_StoreV1_ValidateWithV2(t *testing.T) {
|
|
cacheDir := t.TempDir()
|
|
|
|
// Store with v1.
|
|
c1, err := NewCache(cacheDir, "v1.0.0")
|
|
require.NoError(t, err)
|
|
|
|
indexDir := t.TempDir()
|
|
require.NoError(t, os.WriteFile(filepath.Join(indexDir, "graph.bin"), []byte("data"), 0o644))
|
|
require.NoError(t, c1.Store("myrepo", "abc123", indexDir))
|
|
|
|
// Create cache with v2 — validate should return false.
|
|
c2, err := NewCache(cacheDir, "v2.0.0")
|
|
require.NoError(t, err)
|
|
|
|
assert.False(t, c2.Validate("myrepo", "abc123"))
|
|
|
|
// Entry still exists (Check is version-agnostic).
|
|
assert.True(t, c2.Check("myrepo", "abc123"))
|
|
|
|
// Evict the stale entry.
|
|
require.NoError(t, c2.Evict("myrepo", "abc123"))
|
|
assert.False(t, c2.Check("myrepo", "abc123"))
|
|
|
|
// Re-store with v2.
|
|
require.NoError(t, c2.Store("myrepo", "abc123", indexDir))
|
|
assert.True(t, c2.Validate("myrepo", "abc123"))
|
|
}
|