master
go 74 lines 1.62 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 package pinger
4
5 import (
6 "testing"
7 "time"
8
9 "github.com/stretchr/testify/assert"
10 )
11
12 func TestCalcMeanJitter(t *testing.T) {
13 tests := map[string]struct {
14 rtts []time.Duration
15 want time.Duration
16 }{
17 "empty": {
18 want: 0,
19 },
20 "single": {
21 rtts: []time.Duration{10 * time.Millisecond},
22 want: 0,
23 },
24 "two samples": {
25 rtts: []time.Duration{10 * time.Millisecond, 15 * time.Millisecond},
26 want: 5 * time.Millisecond,
27 },
28 "five samples": {
29 rtts: []time.Duration{
30 10 * time.Millisecond,
31 12 * time.Millisecond,
32 15 * time.Millisecond,
33 18 * time.Millisecond,
34 20 * time.Millisecond,
35 },
36 want: 2500 * time.Microsecond,
37 },
38 }
39
40 for name, tc := range tests {
41 t.Run(name, func(t *testing.T) {
42 assert.Equal(t, tc.want, calcMeanJitter(tc.rtts))
43 })
44 }
45 }
46
47 func TestStateStore_Update(t *testing.T) {
48 state := newStateStore()
49 cfg := AnalysisConfig{
50 JitterEWMASamples: 16,
51 JitterSMAWindow: 3,
52 }
53
54 ewma, sma := state.update("host", 2500*time.Microsecond, cfg)
55 assert.Equal(t, time.Duration(156250), ewma)
56 assert.Equal(t, 2500*time.Microsecond, sma)
57
58 ewma, sma = state.update("host", 2500*time.Microsecond, cfg)
59 assert.Equal(t, time.Duration(302734), ewma)
60 assert.Equal(t, 2500*time.Microsecond, sma)
61
62 _, sma = state.update("host", 4000*time.Microsecond, cfg)
63 assert.Equal(t, time.Duration(3000000), sma)
64 }
65
66 func TestRTTSummaryVariance(t *testing.T) {
67 rtt := RTTSummary{
68 Valid: true,
69 StdDev: 5 * time.Millisecond,
70 }
71
72 assert.Equal(t, int64(25000000), rtt.VarianceMicrosecondsSquared())
73 assert.InDelta(t, 25.0, rtt.VarianceMillisecondsSquared(), 1e-9)
74 }