All checks were successful
PR Check / check-and-test (pull_request) Successful in 30s
130 lines
2.4 KiB
Go
130 lines
2.4 KiB
Go
// vfs/memory/memory_test.go
|
|
package memory
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"io"
|
|
"s1d3sw1ped/SteamCache2/vfs/vfserror"
|
|
"testing"
|
|
)
|
|
|
|
func TestCreateAndOpen(t *testing.T) {
|
|
m := New(1024)
|
|
key := "key"
|
|
value := []byte("value")
|
|
|
|
w, err := m.Create(key, int64(len(value)))
|
|
if err != nil {
|
|
t.Fatalf("Create failed: %v", err)
|
|
}
|
|
w.Write(value)
|
|
w.Close()
|
|
|
|
rc, err := m.Open(key)
|
|
if err != nil {
|
|
t.Fatalf("Open failed: %v", err)
|
|
}
|
|
got, _ := io.ReadAll(rc)
|
|
rc.Close()
|
|
|
|
if string(got) != string(value) {
|
|
t.Fatalf("expected %s, got %s", value, got)
|
|
}
|
|
}
|
|
|
|
func TestOverwrite(t *testing.T) {
|
|
m := New(1024)
|
|
key := "key"
|
|
value1 := []byte("value1")
|
|
value2 := []byte("value2")
|
|
|
|
w, err := m.Create(key, int64(len(value1)))
|
|
if err != nil {
|
|
t.Fatalf("Create failed: %v", err)
|
|
}
|
|
w.Write(value1)
|
|
w.Close()
|
|
|
|
w, err = m.Create(key, int64(len(value2)))
|
|
if err != nil {
|
|
t.Fatalf("Create failed: %v", err)
|
|
}
|
|
w.Write(value2)
|
|
w.Close()
|
|
|
|
rc, err := m.Open(key)
|
|
if err != nil {
|
|
t.Fatalf("Open failed: %v", err)
|
|
}
|
|
got, _ := io.ReadAll(rc)
|
|
rc.Close()
|
|
|
|
if string(got) != string(value2) {
|
|
t.Fatalf("expected %s, got %s", value2, got)
|
|
}
|
|
}
|
|
|
|
func TestDelete(t *testing.T) {
|
|
m := New(1024)
|
|
key := "key"
|
|
value := []byte("value")
|
|
|
|
w, err := m.Create(key, int64(len(value)))
|
|
if err != nil {
|
|
t.Fatalf("Create failed: %v", err)
|
|
}
|
|
w.Write(value)
|
|
w.Close()
|
|
|
|
if err := m.Delete(key); err != nil {
|
|
t.Fatalf("Delete failed: %v", err)
|
|
}
|
|
|
|
_, err = m.Open(key)
|
|
if !errors.Is(err, vfserror.ErrNotFound) {
|
|
t.Fatalf("expected %v, got %v", vfserror.ErrNotFound, err)
|
|
}
|
|
}
|
|
|
|
func TestCapacityLimit(t *testing.T) {
|
|
m := New(10)
|
|
for i := 0; i < 11; i++ {
|
|
w, err := m.Create(fmt.Sprintf("key%d", i), 1)
|
|
if err != nil && i < 10 {
|
|
t.Errorf("Create failed: %v", err)
|
|
} else if i == 10 && err == nil {
|
|
t.Errorf("Create succeeded: got nil, want %v", vfserror.ErrDiskFull)
|
|
}
|
|
if i < 10 {
|
|
w.Write([]byte("1"))
|
|
w.Close()
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestStat(t *testing.T) {
|
|
m := New(1024)
|
|
key := "key"
|
|
value := []byte("value")
|
|
|
|
w, err := m.Create(key, int64(len(value)))
|
|
if err != nil {
|
|
t.Fatalf("Create failed: %v", err)
|
|
}
|
|
w.Write(value)
|
|
w.Close()
|
|
|
|
info, err := m.Stat(key)
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
|
|
if info == nil {
|
|
t.Fatal("expected file info to be non-nil")
|
|
}
|
|
if info.Size() != int64(len(value)) {
|
|
t.Errorf("expected size %d, got %d", len(value), info.Size())
|
|
}
|
|
}
|