All checks were successful
Release Tag / release (push) Successful in 13s
feat: add upstream support allowing to chain cache servers if needed fix: tweaked garbage collection to be better
147 lines
3.3 KiB
Go
147 lines
3.3 KiB
Go
package disk
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
"s1d3sw1ped/SteamCache2/vfs/vfserror"
|
|
"testing"
|
|
)
|
|
|
|
func TestAllDisk(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
m := NewSkipInit(t.TempDir(), 1024)
|
|
if err := m.Set("key", []byte("value")); err != nil {
|
|
t.Errorf("Set failed: %v", err)
|
|
}
|
|
|
|
if err := m.Set("key", []byte("value1")); err != nil {
|
|
t.Errorf("Set failed: %v", err)
|
|
}
|
|
|
|
if d, err := m.Get("key"); err != nil {
|
|
t.Errorf("Get failed: %v", err)
|
|
} else if string(d) != "value1" {
|
|
t.Errorf("Get failed: got %s, want %s", d, "value1")
|
|
}
|
|
|
|
if err := m.Delete("key"); err != nil {
|
|
t.Errorf("Delete failed: %v", err)
|
|
}
|
|
|
|
if _, err := m.Get("key"); err == nil {
|
|
t.Errorf("Get failed: got nil, want %v", vfserror.ErrNotFound)
|
|
}
|
|
|
|
if err := m.Delete("key"); err == nil {
|
|
t.Errorf("Delete failed: got nil, want %v", vfserror.ErrNotFound)
|
|
}
|
|
|
|
if _, err := m.Stat("key"); err == nil {
|
|
t.Errorf("Stat failed: got nil, want %v", vfserror.ErrNotFound)
|
|
}
|
|
|
|
if err := m.Set("key", []byte("value")); err != nil {
|
|
t.Errorf("Set failed: %v", err)
|
|
}
|
|
|
|
if _, err := m.Stat("key"); err != nil {
|
|
t.Errorf("Stat failed: %v", err)
|
|
}
|
|
}
|
|
|
|
func TestLimited(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
m := NewSkipInit(t.TempDir(), 10)
|
|
for i := 0; i < 11; i++ {
|
|
if err := m.Set(fmt.Sprintf("key%d", i), []byte("1")); err != nil && i < 10 {
|
|
t.Errorf("Set failed: %v", err)
|
|
} else if i == 10 && err == nil {
|
|
t.Errorf("Set succeeded: got nil, want %v", vfserror.ErrDiskFull)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestInit(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
td := t.TempDir()
|
|
|
|
path := filepath.Join(td, "test", "key")
|
|
|
|
os.MkdirAll(filepath.Dir(path), 0755)
|
|
|
|
os.WriteFile(path, []byte("value"), 0644)
|
|
|
|
m := New(td, 10)
|
|
if _, err := m.Get("test/key"); err != nil {
|
|
t.Errorf("Get failed: %v", err)
|
|
}
|
|
|
|
s, _ := m.Stat("test/key")
|
|
if s.Name() != "test/key" {
|
|
t.Errorf("Stat failed: got %s, want %s", s.Name(), "key")
|
|
}
|
|
}
|
|
|
|
func TestDiskSizeDiscrepancy(t *testing.T) {
|
|
t.Parallel()
|
|
td := t.TempDir()
|
|
|
|
assumedSize := int64(6 + 5 + 6) // 6 + 5 + 6 bytes for key, key1, key2
|
|
os.WriteFile(filepath.Join(td, "key2"), []byte("value2"), 0644)
|
|
|
|
m := New(td, 1024)
|
|
if 6 != m.Size() {
|
|
t.Errorf("Size failed: got %d, want %d", m.Size(), 6)
|
|
}
|
|
|
|
if err := m.Set("key", []byte("value")); err != nil {
|
|
t.Errorf("Set failed: %v", err)
|
|
}
|
|
|
|
if err := m.Set("key1", []byte("value1")); err != nil {
|
|
t.Errorf("Set failed: %v", err)
|
|
}
|
|
|
|
if assumedSize != m.Size() {
|
|
t.Errorf("Size failed: got %d, want %d", m.Size(), assumedSize)
|
|
}
|
|
|
|
if d, err := m.Get("key"); err != nil {
|
|
t.Errorf("Get failed: %v", err)
|
|
} else if string(d) != "value" {
|
|
t.Errorf("Get failed: got %s, want %s", d, "value")
|
|
}
|
|
|
|
if d, err := m.Get("key1"); err != nil {
|
|
t.Errorf("Get failed: %v", err)
|
|
} else if string(d) != "value1" {
|
|
t.Errorf("Get failed: got %s, want %s", d, "value1")
|
|
}
|
|
|
|
m = New(td, 1024)
|
|
|
|
if assumedSize != m.Size() {
|
|
t.Errorf("Size failed: got %d, want %d", m.Size(), assumedSize)
|
|
}
|
|
|
|
if d, err := m.Get("key"); err != nil {
|
|
t.Errorf("Get failed: %v", err)
|
|
} else if string(d) != "value" {
|
|
t.Errorf("Get failed: got %s, want %s", d, "value")
|
|
}
|
|
|
|
if d, err := m.Get("key1"); err != nil {
|
|
t.Errorf("Get failed: %v", err)
|
|
} else if string(d) != "value1" {
|
|
t.Errorf("Get failed: got %s, want %s", d, "value1")
|
|
}
|
|
|
|
if assumedSize != m.Size() {
|
|
t.Errorf("Size failed: got %d, want %d", m.Size(), assumedSize)
|
|
}
|
|
}
|