1 package link
2
3 import (
4 "errors"
5 "os"
6 "testing"
7
8 "github.com/cilium/ebpf"
9 "github.com/cilium/ebpf/internal/testutils"
10 "github.com/cilium/ebpf/internal/unix"
11
12 qt "github.com/frankban/quicktest"
13 )
14
15 func TestTracepoint(t *testing.T) {
16
17 testutils.SkipOnOldKernel(t, "4.7", "tracepoint support")
18
19 prog := mustLoadProgram(t, ebpf.TracePoint, 0, "")
20
21
22
23 tp, err := Tracepoint("printk", "console", prog, nil)
24 if err != nil {
25 t.Fatal(err)
26 }
27
28 if err := tp.Close(); err != nil {
29 t.Error("closing tracepoint:", err)
30 }
31 }
32
33 func TestTracepointMissing(t *testing.T) {
34
35 testutils.SkipOnOldKernel(t, "4.7", "tracepoint support")
36
37 prog := mustLoadProgram(t, ebpf.TracePoint, 0, "")
38
39 _, err := Tracepoint("missing", "foobazbar", prog, nil)
40 if !errors.Is(err, os.ErrNotExist) {
41 t.Error("Expected os.ErrNotExist, got", err)
42 }
43 }
44
45 func TestTracepointErrors(t *testing.T) {
46 c := qt.New(t)
47
48
49 _, err := Tracepoint("", "", nil, nil)
50 c.Assert(errors.Is(err, errInvalidInput), qt.IsTrue)
51
52 _, err = Tracepoint("_", "_", nil, nil)
53 c.Assert(errors.Is(err, errInvalidInput), qt.IsTrue)
54
55 _, err = Tracepoint(".", "+", &ebpf.Program{}, nil)
56 c.Assert(errors.Is(err, errInvalidInput), qt.IsTrue)
57
58 _, err = Tracepoint("foo", "bar", &ebpf.Program{}, nil)
59 c.Assert(errors.Is(err, errInvalidInput), qt.IsTrue)
60 }
61
62 func TestTraceGetEventID(t *testing.T) {
63 _, err := getTraceEventID("syscalls", "sys_enter_openat")
64 if err != nil {
65 t.Fatal("Can't read trace event ID:", err)
66 }
67
68 _, err = getTraceEventID("totally", "bogus")
69 if !errors.Is(err, os.ErrNotExist) {
70 t.Fatal("Expected os.ErrNotExist, got", err)
71 }
72 }
73
74 func TestTracepointProgramCall(t *testing.T) {
75
76 testutils.SkipOnOldKernel(t, "4.14", "syscalls tracepoint support")
77
78 m, p := newUpdaterMapProg(t, ebpf.TracePoint)
79
80
81
82 tp, err := Tracepoint("syscalls", "sys_enter_getpid", p, nil)
83 if err != nil {
84 t.Fatal(err)
85 }
86
87
88 unix.Getpid()
89
90
91 assertMapValue(t, m, 0, 1)
92
93
94 if err := tp.Close(); err != nil {
95 t.Fatal(err)
96 }
97
98
99 if err := m.Update(uint32(0), uint32(0), ebpf.UpdateExist); err != nil {
100 t.Fatal(err)
101 }
102
103
104 unix.Getpid()
105
106
107 assertMapValue(t, m, 0, 0)
108 }
109
View as plain text