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