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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
package integrationtests
import (
"strings"
"testing"
)
func TestSocketBasic(t *testing.T) {
result, _ := runScenarioResult(t, "socket-basic", []ExpectedEvent{
{
Tracepoint: "enter_socket",
MinCount: 1,
},
{
Tracepoint: "enter_close",
MinCount: 1,
},
})
assertTracepointPathPrefix(t, result, "enter_socket", "socket:1:")
assertTracepointPathPrefix(t, result, "enter_close", "socket:1:")
}
func TestSocketpairBasic(t *testing.T) {
result, _ := runScenarioResult(t, "socketpair-basic", []ExpectedEvent{
{
Tracepoint: "enter_socketpair",
MinCount: 1,
},
{
Tracepoint: "enter_close",
MinCount: 2,
},
})
assertTracepointPathPrefix(t, result, "enter_socketpair", "socket:1:")
if got := totalTracepointPathCount(result, "enter_close", "socket:1:"); got < 2 {
t.Fatalf("enter_close records with tracked socket descriptor prefix = %d, want >= 2", got)
}
}
func TestSocketAcceptLifecycle(t *testing.T) {
result, _ := runScenarioResult(t, "socket-accept-lifecycle", []ExpectedEvent{
{Tracepoint: "enter_bind", MinCount: 1},
{Tracepoint: "enter_connect", MinCount: 1},
{Tracepoint: "enter_listen", MinCount: 1},
{Tracepoint: "enter_accept4", MinCount: 1},
{Tracepoint: "enter_shutdown", MinCount: 1},
})
assertTracepointPathPrefix(t, result, "enter_bind", "socket:1:")
assertTracepointPathPrefix(t, result, "enter_connect", "socket:1:")
assertTracepointPathPrefix(t, result, "enter_listen", "socket:1:")
assertTracepointPathPrefix(t, result, "enter_accept4", "socket:1:")
assertTracepointPathPrefix(t, result, "enter_shutdown", "socket:1:")
}
func TestSocketAcceptLifecyclePlain(t *testing.T) {
result, _ := runScenarioResult(t, "socket-accept-lifecycle-plain", []ExpectedEvent{
{Tracepoint: "enter_bind", MinCount: 1},
{Tracepoint: "enter_connect", MinCount: 1},
{Tracepoint: "enter_listen", MinCount: 1},
{Tracepoint: "enter_accept", MinCount: 1},
{Tracepoint: "enter_shutdown", MinCount: 1},
})
assertTracepointPathPrefix(t, result, "enter_bind", "socket:1:")
assertTracepointPathPrefix(t, result, "enter_connect", "socket:1:")
assertTracepointPathPrefix(t, result, "enter_listen", "socket:1:")
assertTracepointPathPrefix(t, result, "enter_accept", "socket:1:")
assertTracepointPathPrefix(t, result, "enter_shutdown", "socket:1:")
AssertEventsAbsent(t, result, []ExpectedEvent{
{Tracepoint: "enter_accept4"},
})
}
func TestSocketIntrospection(t *testing.T) {
result, _ := runScenarioResult(t, "socket-introspection", []ExpectedEvent{
{Tracepoint: "enter_getsockname", MinCount: 1},
{Tracepoint: "enter_getpeername", MinCount: 1},
{Tracepoint: "enter_setsockopt", MinCount: 1},
{Tracepoint: "enter_getsockopt", MinCount: 1},
})
assertTracepointPathPrefix(t, result, "enter_getsockname", "socket:1:")
assertTracepointPathPrefix(t, result, "enter_getpeername", "socket:1:")
assertTracepointPathPrefix(t, result, "enter_setsockopt", "socket:1:")
assertTracepointPathPrefix(t, result, "enter_getsockopt", "socket:1:")
}
func assertTracepointPathPrefix(t *testing.T, result TestResult, tracepoint, wantPrefix string) {
t.Helper()
if got := countTracepointPathPrefix(result, tracepoint, wantPrefix); got == 0 {
t.Fatalf("expected at least one %s record with path prefix %q", tracepoint, wantPrefix)
}
}
func countTracepointPathPrefix(result TestResult, tracepoint, wantPrefix string) int {
var count int
for _, rec := range result.Records {
if !strings.Contains(rec.TraceID.String(), tracepoint) {
continue
}
if strings.HasPrefix(rec.Path, wantPrefix) {
count++
}
}
return count
}
func totalTracepointPathCount(result TestResult, tracepoint, wantPrefix string) uint64 {
var total uint64
for _, rec := range result.Records {
if !strings.Contains(rec.TraceID.String(), tracepoint) {
continue
}
if strings.HasPrefix(rec.Path, wantPrefix) {
total += rec.Cnt.Count
}
}
return total
}
|