57 lines
1.9 KiB
Go
57 lines
1.9 KiB
Go
|
|
package engine
|
||
|
|
|
||
|
|
import (
|
||
|
|
"path/filepath"
|
||
|
|
"strings"
|
||
|
|
"testing"
|
||
|
|
)
|
||
|
|
|
||
|
|
func TestCheckDiskSpace_Enough(t *testing.T) {
|
||
|
|
// A tiny need in a real temp dir (huge free space) → nil.
|
||
|
|
if err := CheckDiskSpace(t.TempDir(), 1024, 0); err != nil {
|
||
|
|
t.Errorf("expected nil for a 1 KiB need, got %v", err)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestCheckDiskSpace_Insufficient(t *testing.T) {
|
||
|
|
// Need more than any real disk has → InsufficientDiskError.
|
||
|
|
err := CheckDiskSpace(t.TempDir(), 1<<62, 0)
|
||
|
|
if err == nil {
|
||
|
|
t.Fatal("expected an error for an impossibly large need")
|
||
|
|
}
|
||
|
|
if !IsInsufficientDisk(err) {
|
||
|
|
t.Errorf("IsInsufficientDisk = false, want true (err=%v)", err)
|
||
|
|
}
|
||
|
|
if !strings.Contains(err.Error(), "insufficient disk space") {
|
||
|
|
t.Errorf("error message = %q, want it to mention insufficient disk space", err.Error())
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestCheckDiskSpace_ReserveTriggers(t *testing.T) {
|
||
|
|
// Tiny need but an impossibly large reserve → free-need < reserve → error.
|
||
|
|
err := CheckDiskSpace(t.TempDir(), 1024, 1<<62)
|
||
|
|
if !IsInsufficientDisk(err) {
|
||
|
|
t.Errorf("expected insufficient when reserve exceeds free space, got %v", err)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestCheckDiskSpace_UnknownSize(t *testing.T) {
|
||
|
|
// need <= 0 means the size is unknown — the check must be skipped, even with
|
||
|
|
// an enormous reserve.
|
||
|
|
if err := CheckDiskSpace(t.TempDir(), 0, 1<<62); err != nil {
|
||
|
|
t.Errorf("need=0 must skip the check, got %v", err)
|
||
|
|
}
|
||
|
|
if err := CheckDiskSpace(t.TempDir(), -5, 1<<62); err != nil {
|
||
|
|
t.Errorf("negative need must skip the check, got %v", err)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestCheckDiskSpace_BadDirIsBestEffort(t *testing.T) {
|
||
|
|
// An unstat-able path → DiskInfo errors → best-effort nil (never block a
|
||
|
|
// download on a guard we can't evaluate; ENOSPC stays the backstop).
|
||
|
|
bad := filepath.Join(t.TempDir(), "does", "not", "exist")
|
||
|
|
if err := CheckDiskSpace(bad, 1<<40, 0); err != nil {
|
||
|
|
t.Errorf("unstat-able dir must skip the check, got %v", err)
|
||
|
|
}
|
||
|
|
}
|