1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
package statsengine
import (
"testing"
"ior/internal/types"
)
func TestIngestSyscallAggregatesUpdatesSnapshot(t *testing.T) {
engine := NewEngine(DefaultTopN)
engine.IngestSyscallAggregates([]SyscallAggregate{
{
TraceID: types.SYS_ENTER_FUTEX,
Count: 3,
Errors: 1,
TotalLatencyNs: 90,
MinLatencyNs: 10,
MaxLatencyNs: 50,
LatencyHistogramNs: [8]uint64{
1, 1, 1, 0, 0, 0, 0, 0,
},
},
})
snap, err := engine.Snapshot()
if err != nil {
t.Fatalf("snapshot error: %v", err)
}
if snap.TotalSyscalls != 3 {
t.Fatalf("TotalSyscalls = %d, want 3", snap.TotalSyscalls)
}
if snap.TotalErrors != 1 {
t.Fatalf("TotalErrors = %d, want 1", snap.TotalErrors)
}
if snap.LatencyHistogram.Total != 3 {
t.Fatalf("LatencyHistogram.Total = %d, want 3", snap.LatencyHistogram.Total)
}
syscalls := snap.Syscalls()
var futexRow *SyscallSnapshot
for i := range syscalls {
row := &syscalls[i]
if row.TraceID == types.SYS_ENTER_FUTEX {
futexRow = row
break
}
}
if futexRow == nil {
t.Fatal("expected futex syscall row")
}
if futexRow.Count != 3 || futexRow.Errors != 1 {
t.Fatalf("futex row = %+v, want count=3 errors=1", *futexRow)
}
if futexRow.LatencyMinNs != 10 || futexRow.LatencyMaxNs != 50 {
t.Fatalf("futex min/max = %d/%d, want 10/50", futexRow.LatencyMinNs, futexRow.LatencyMaxNs)
}
}
|