mirror of
https://github.com/slackhq/nebula.git
synced 2026-08-15 11:56:57 +02:00
68 lines
1.8 KiB
Go
68 lines
1.8 KiB
Go
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)
|
|
}
|