wakey wakey

This commit is contained in:
JackDoan
2026-07-22 18:49:19 -05:00
parent c2fbe215e6
commit c8a3994cde
9 changed files with 417 additions and 0 deletions
+67
View File
@@ -0,0 +1,67 @@
package nebula
import (
"testing"
"time"
"github.com/stretchr/testify/assert"
)
func TestWakeDetector(t *testing.T) {
delta := time.Duration(0)
ok := true
w := &wakeDetector{read: func() (time.Duration, bool) { return delta, ok }}
// The first sample primes the baseline and never reports a wake, even with a pre-existing spread
delta = 3 * time.Hour
slept, sok := w.Sample()
assert.True(t, sok)
assert.Equal(t, time.Duration(0), slept)
// A stable spread means the machine never slept
slept, sok = w.Sample()
assert.True(t, sok)
assert.Equal(t, time.Duration(0), slept)
// The spread grows by exactly the time spent suspended
delta += 42 * time.Second
slept, sok = w.Sample()
assert.True(t, sok)
assert.Equal(t, 42*time.Second, slept)
// A wake is reported once, then the baseline moves with it
slept, sok = w.Sample()
assert.True(t, sok)
assert.Equal(t, time.Duration(0), slept)
// Negative jitter from the non-atomic clock pair reads clamps to zero
delta -= time.Microsecond
slept, sok = w.Sample()
assert.True(t, sok)
assert.Equal(t, time.Duration(0), slept)
// Consecutive suspends both report; the clamped jitter moved the baseline so it is not double-counted
delta += time.Minute
slept, _ = w.Sample()
assert.Equal(t, time.Minute, slept)
delta += time.Hour
slept, _ = w.Sample()
assert.Equal(t, time.Hour, slept)
// An unsupported platform read reports not-ok
ok = false
_, sok = w.Sample()
assert.False(t, sok)
}
// TestWakeDetectorPlatformClock smoke tests the real clock pair: two samples close together must not report a
// wake on a machine that isn't suspending mid-test.
func TestWakeDetectorPlatformClock(t *testing.T) {
w := newWakeDetector()
if _, ok := w.Sample(); !ok {
t.Skip("platform has no suspend clock pair")
}
slept, ok := w.Sample()
assert.True(t, ok)
assert.Less(t, slept, time.Second)
}