Files
kandev/apps/backend/internal/system/metrics/disk_windows_test.go
T
2026-06-15 18:54:16 +01:00

72 lines
1.5 KiB
Go

//go:build windows
package metrics
import (
"context"
"errors"
"testing"
"time"
)
func TestDiskPercentReturnsWhenContextCancelsWhileQueryBlocks(t *testing.T) {
original := getDiskFreeSpaceEx
block := make(chan struct{})
started := make(chan struct{})
getDiskFreeSpaceEx = func(_ *uint16, _ *uint64, _ *uint64, _ *uint64) error {
close(started)
<-block
return errors.New("unblocked")
}
t.Cleanup(func() {
close(block)
getDiskFreeSpaceEx = original
})
ctx, cancel := context.WithCancel(context.Background())
done := make(chan error, 1)
go func() {
_, err := diskPercent(ctx, `C:\`)
done <- err
}()
select {
case <-started:
case <-time.After(time.Second):
t.Fatal("GetDiskFreeSpaceEx was not called")
}
cancel()
select {
case err := <-done:
if !errors.Is(err, context.Canceled) {
t.Fatalf("diskPercent error = %v, want context.Canceled", err)
}
case <-time.After(500 * time.Millisecond):
t.Fatal("diskPercent did not return after context cancellation")
}
}
func TestDiskPercentLive(t *testing.T) {
v, err := diskPercent(context.Background(), `C:\`)
if err != nil {
t.Fatalf("diskPercent: %v", err)
}
if v < 0 || v > 100 {
t.Fatalf("disk percent=%v, want 0..100", v)
}
}
func TestDiskPercentFromBytes(t *testing.T) {
if _, err := diskPercentFromBytes(0, 0); err == nil {
t.Fatal("expected error when total is zero")
}
v, err := diskPercentFromBytes(100, 25)
if err != nil {
t.Fatalf("diskPercentFromBytes: %v", err)
}
if v != 75 {
t.Fatalf("got %v, want 75", v)
}
}