| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- 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)
- }
|