| 65 | } |
| 66 | |
| 67 | func TestNextTick(t *testing.T) { |
| 68 | t.Parallel() |
| 69 | |
| 70 | t.Run("NoJitter", func(t *testing.T) { |
| 71 | t.Parallel() |
| 72 | |
| 73 | now := time.Date(2026, 3, 13, 14, 2, 30, 0, time.UTC) |
| 74 | interval := 4 * time.Hour |
| 75 | |
| 76 | boundary, delay := nextTick(now, interval, 0) |
| 77 | |
| 78 | expectedBoundary := time.Date(2026, 3, 13, 16, 0, 0, 0, time.UTC) |
| 79 | require.Equal(t, expectedBoundary, boundary) |
| 80 | require.Equal(t, boundary.Sub(now), delay) |
| 81 | }) |
| 82 | |
| 83 | t.Run("WithJitter", func(t *testing.T) { |
| 84 | t.Parallel() |
| 85 | |
| 86 | now := time.Date(2026, 3, 13, 14, 2, 30, 0, time.UTC) |
| 87 | interval := 4 * time.Hour |
| 88 | jitter := 10 * time.Minute |
| 89 | |
| 90 | boundary, delay := nextTick(now, interval, jitter) |
| 91 | |
| 92 | expectedBoundary := time.Date(2026, 3, 13, 16, 0, 0, 0, time.UTC) |
| 93 | require.Equal(t, expectedBoundary, boundary) |
| 94 | |
| 95 | base := boundary.Sub(now) |
| 96 | require.GreaterOrEqual(t, delay, base, |
| 97 | "delay must be at least the base distance to boundary") |
| 98 | require.Less(t, delay, base+jitter, |
| 99 | "delay must be less than base + jitter") |
| 100 | }) |
| 101 | } |