// vfs/disk/disk_test.go package disk import ( "fmt" "io" "os" "path/filepath" "s1d3sw1ped/SteamCache2/vfs/vfserror" "testing" ) func TestAllDisk(t *testing.T) { t.Parallel() m := NewSkipInit(t.TempDir(), 1024) w, err := m.Create("key", 5) if err != nil { t.Errorf("Create failed: %v", err) } w.Write([]byte("value")) w.Close() w, err = m.Create("key", 6) if err != nil { t.Errorf("Create failed: %v", err) } w.Write([]byte("value1")) w.Close() rc, err := m.Open("key") if err != nil { t.Errorf("Open failed: %v", err) } d, _ := io.ReadAll(rc) rc.Close() 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.Open("key"); err == nil { t.Errorf("Open 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) } w, err = m.Create("key", 5) if err != nil { t.Errorf("Create failed: %v", err) } w.Write([]byte("value")) w.Close() 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++ { 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 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) rc, err := m.Open("test/key") if err != nil { t.Fatalf("Open failed: %v", err) } rc.Close() s, err := m.Stat("test/key") if err != nil { t.Fatalf("Stat failed: %v", err) } if s == nil { t.Error("Stat returned nil") } if s != nil && s.Name() != "test/key" { t.Errorf("Stat failed: got %s, want %s", s.Name(), "test/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 m.Size() != 6 { t.Errorf("Size failed: got %d, want %d", m.Size(), 6) } w, err := m.Create("key", 5) if err != nil { t.Errorf("Create failed: %v", err) } w.Write([]byte("value")) w.Close() w, err = m.Create("key1", 6) if err != nil { t.Errorf("Create failed: %v", err) } w.Write([]byte("value1")) w.Close() if assumedSize != m.Size() { t.Errorf("Size failed: got %d, want %d", m.Size(), assumedSize) } rc, err := m.Open("key") if err != nil { t.Errorf("Open failed: %v", err) } d, _ := io.ReadAll(rc) rc.Close() if string(d) != "value" { t.Errorf("Get failed: got %s, want %s", d, "value") } rc, err = m.Open("key1") if err != nil { t.Errorf("Open failed: %v", err) } d, _ = io.ReadAll(rc) rc.Close() 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) } rc, err = m.Open("key") if err != nil { t.Errorf("Open failed: %v", err) } d, _ = io.ReadAll(rc) rc.Close() if string(d) != "value" { t.Errorf("Get failed: got %s, want %s", d, "value") } rc, err = m.Open("key1") if err != nil { t.Errorf("Open failed: %v", err) } d, _ = io.ReadAll(rc) rc.Close() 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) } }