// vfs/gc/gc_test.go package gc // func TestGCSmallRandom(t *testing.T) { // t.Parallel() // m := memory.New(1024 * 1024 * 16) // gc := New(m, 10, func(vfs vfs.VFS, size uint) (uint, uint) { // deletions := 0 // var reclaimed uint // t.Logf("GC starting to reclaim %d bytes", size) // stats := vfs.StatAll() // sort.Slice(stats, func(i, j int) bool { // // Sort by access time so we can remove the oldest files first. // return stats[i].AccessTime().Before(stats[j].AccessTime()) // }) // // Delete the oldest files until we've reclaimed enough space. // for _, s := range stats { // sz := uint(s.Size()) // Get the size of the file // err := vfs.Delete(s.Name()) // if err != nil { // panic(err) // } // reclaimed += sz // Track how much space we've reclaimed // deletions++ // Track how many files we've deleted // // t.Logf("GC deleting %s, %v", s.Name(), s.AccessTime().Format(time.RFC3339Nano)) // if reclaimed >= size { // We've reclaimed enough space // break // } // } // return uint(reclaimed), uint(deletions) // }) // for i := 0; i < 10000; i++ { // if err := gc.Set(fmt.Sprintf("key:%d", i), genRandomData(1024*1, 1024*4)); err != nil { // t.Errorf("Set failed: %v", err) // } // } // if gc.Size() > 1024*1024*16 { // t.Errorf("MemoryFS size is %d, want <= 1024", m.Size()) // } // } // func genRandomData(min int, max int) []byte { // data := make([]byte, rand.Intn(max-min)+min) // rand.Read(data) // return data // } // func TestGCLargeRandom(t *testing.T) { // t.Parallel() // m := memory.New(1024 * 1024 * 16) // 16MB // gc := New(m, 10, func(vfs vfs.VFS, size uint) (uint, uint) { // deletions := 0 // var reclaimed uint // t.Logf("GC starting to reclaim %d bytes", size) // stats := vfs.StatAll() // sort.Slice(stats, func(i, j int) bool { // // Sort by access time so we can remove the oldest files first. // return stats[i].AccessTime().Before(stats[j].AccessTime()) // }) // // Delete the oldest files until we've reclaimed enough space. // for _, s := range stats { // sz := uint(s.Size()) // Get the size of the file // vfs.Delete(s.Name()) // reclaimed += sz // Track how much space we've reclaimed // deletions++ // Track how many files we've deleted // if reclaimed >= size { // We've reclaimed enough space // break // } // } // return uint(reclaimed), uint(deletions) // }) // for i := 0; i < 10000; i++ { // if err := gc.Set(fmt.Sprintf("key:%d", i), genRandomData(1024, 1024*1024)); err != nil { // t.Errorf("Set failed: %v", err) // } // } // if gc.Size() > 1024*1024*16 { // t.Errorf("MemoryFS size is %d, want <= 1024", m.Size()) // } // }