// steamcache/steamcache_test.go package steamcache import ( "io" "os" "path/filepath" "testing" ) func TestCaching(t *testing.T) { td := t.TempDir() os.WriteFile(filepath.Join(td, "key2"), []byte("value2"), 0644) sc := New("localhost:8080", "1G", 10, "1G", 100, td, "") w, err := sc.vfs.Create("key", 5) if err != nil { t.Errorf("Create failed: %v", err) } w.Write([]byte("value")) w.Close() w, err = sc.vfs.Create("key1", 6) if err != nil { t.Errorf("Create failed: %v", err) } w.Write([]byte("value1")) w.Close() if sc.diskgc.Size() != 17 { t.Errorf("Size failed: got %d, want %d", sc.diskgc.Size(), 17) } if sc.vfs.Size() != 17 { t.Errorf("Size failed: got %d, want %d", sc.vfs.Size(), 17) } rc, err := sc.vfs.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 = sc.vfs.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") } rc, err = sc.vfs.Open("key2") if err != nil { t.Errorf("Open failed: %v", err) } d, _ = io.ReadAll(rc) rc.Close() if string(d) != "value2" { t.Errorf("Get failed: got %s, want %s", d, "value2") } if sc.diskgc.Size() != 17 { t.Errorf("Size failed: got %d, want %d", sc.diskgc.Size(), 17) } if sc.vfs.Size() != 17 { t.Errorf("Size failed: got %d, want %d", sc.vfs.Size(), 17) } sc.memory.Delete("key2") os.Remove(filepath.Join(td, "key2")) if _, err := sc.vfs.Open("key2"); err == nil { t.Errorf("Open failed: got nil, want error") } } func TestCacheMissAndHit(t *testing.T) { sc := New("localhost:8080", "0", 0, "1G", 100, t.TempDir(), "") key := "testkey" value := []byte("testvalue") // Simulate miss: but since no upstream, skip full ServeHTTP, test VFS w, err := sc.vfs.Create(key, int64(len(value))) if err != nil { t.Fatal(err) } w.Write(value) w.Close() rc, err := sc.vfs.Open(key) if err != nil { t.Fatal(err) } got, _ := io.ReadAll(rc) rc.Close() if string(got) != string(value) { t.Errorf("expected %s, got %s", value, got) } }