summaryrefslogtreecommitdiff
path: root/internal/statsengine/aggregate_test.go
blob: 0d11214f2ec0cd8994b168e32fc843bf9a60c1a5 (plain)
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)
	}
}