mirror of
https://github.com/slackhq/nebula.git
synced 2026-08-15 23:56:57 +02:00
wakey wakey
This commit is contained in:
@@ -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)
|
||||
}
|
||||
Reference in New Issue
Block a user