76 lines
2.6 KiB
Go
76 lines
2.6 KiB
Go
package files
|
|
|
|
import "testing"
|
|
|
|
func TestNoopSpaceGuardAlwaysAllows(t *testing.T) {
|
|
g := NoopSpaceGuard{}
|
|
if allowed, err := g.Allow(1 << 40); err != nil || !allowed {
|
|
t.Fatalf("expected noop guard to always allow, got allowed=%v err=%v", allowed, err)
|
|
}
|
|
if _, _, ok := g.Usage(); ok {
|
|
t.Fatal("expected noop guard to report no usage snapshot")
|
|
}
|
|
}
|
|
|
|
func TestLocalDiskSpaceGuardBeforeFirstRefresh(t *testing.T) {
|
|
g := NewLocalDiskSpaceGuard(1 << 30)
|
|
// Before setFree has ever run, the guard must not reject -- a startup
|
|
// race shouldn't turn into spurious upload failures.
|
|
if allowed, err := g.Allow(1 << 40); err != nil || !allowed {
|
|
t.Fatalf("expected pre-refresh guard to allow, got allowed=%v err=%v", allowed, err)
|
|
}
|
|
if _, _, ok := g.Usage(); ok {
|
|
t.Fatal("expected no usage snapshot before first refresh")
|
|
}
|
|
}
|
|
|
|
func TestLocalDiskSpaceGuardThreshold(t *testing.T) {
|
|
const minFree = int64(1000)
|
|
g := NewLocalDiskSpaceGuard(minFree)
|
|
g.setFree(1500, 10000)
|
|
|
|
if allowed, err := g.Allow(400); err != nil || !allowed {
|
|
t.Fatalf("writing 400 bytes leaves 1100 free (>= 1000 min): want allow, got allowed=%v err=%v", allowed, err)
|
|
}
|
|
if allowed, err := g.Allow(600); err != nil || allowed {
|
|
t.Fatalf("writing 600 bytes leaves 900 free (< 1000 min): want reject, got allowed=%v err=%v", allowed, err)
|
|
}
|
|
|
|
used, total, ok := g.Usage()
|
|
if !ok || total != 10000 || used != 8500 {
|
|
t.Fatalf("usage snapshot = used=%d total=%d ok=%v, want used=8500 total=10000 ok=true", used, total, ok)
|
|
}
|
|
}
|
|
|
|
func TestLocalDiskSpaceGuardDisabled(t *testing.T) {
|
|
g := NewLocalDiskSpaceGuard(0)
|
|
g.setFree(10, 1000)
|
|
if allowed, err := g.Allow(1 << 40); err != nil || !allowed {
|
|
t.Fatalf("minFreeBytes<=0 must disable the check, got allowed=%v err=%v", allowed, err)
|
|
}
|
|
}
|
|
|
|
func TestS3BudgetSpaceGuardThreshold(t *testing.T) {
|
|
const maxTotal = int64(10000)
|
|
g := NewS3BudgetSpaceGuard(maxTotal)
|
|
g.setUsed(9000)
|
|
|
|
if allowed, err := g.Allow(1000); err != nil || !allowed {
|
|
t.Fatalf("9000+1000 == budget: want allow, got allowed=%v err=%v", allowed, err)
|
|
}
|
|
if allowed, err := g.Allow(1001); err != nil || allowed {
|
|
t.Fatalf("9000+1001 exceeds budget: want reject, got allowed=%v err=%v", allowed, err)
|
|
}
|
|
|
|
used, total, ok := g.Usage()
|
|
if !ok || total != maxTotal || used != 9000 {
|
|
t.Fatalf("usage snapshot = used=%d total=%d ok=%v, want used=9000 total=%d ok=true", used, total, ok, maxTotal)
|
|
}
|
|
}
|
|
|
|
func TestS3BudgetSpaceGuardBeforeFirstRefresh(t *testing.T) {
|
|
g := NewS3BudgetSpaceGuard(100)
|
|
if allowed, err := g.Allow(1 << 40); err != nil || !allowed {
|
|
t.Fatalf("expected pre-refresh guard to allow, got allowed=%v err=%v", allowed, err)
|
|
}
|
|
}
|