summaryrefslogtreecommitdiff
path: root/tools/testing/selftests/ftrace/test.d/event/event-mod.tc
blob: 175243cd9ab7e87f20ebce552b4fe153f858cb88 (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
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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
#!/bin/sh
# SPDX-License-Identifier: GPL-2.0
# description: event tracing - enable/disable with module event
# requires: set_event "Can enable module events via: :mod:":README
# flags: instance

rmmod trace-events-sample ||:
if ! modprobe trace-events-sample ; then
  echo "No trace-events sample module - please make CONFIG_SAMPLE_TRACE_EVENTS=m"
  exit_unresolved;
fi
trap "rmmod trace-events-sample" EXIT

# Set events for the module
echo ":mod:trace-events-sample" > set_event

test_all_enabled() {

	# Check if more than one is enabled
	grep -q sample-trace:foo_bar set_event
	grep -q sample-trace:foo_bar_with_cond set_event
	grep -q sample-trace:foo_bar_with_fn set_event

	# All of them should be enabled. Check via the enable file
	val=`cat events/sample-trace/enable`
	if [ $val -ne 1 ]; then
		exit_fail
	fi
}

clear_events() {
	echo > set_event
	val=`cat events/enable`
	if [ "$val" != "0" ]; then
		exit_fail
	fi
	count=`cat set_event | wc -l`
	if [ $count -ne 0 ]; then
		exit_fail
	fi
}

test_all_enabled

echo clear all events
echo 0 > events/enable

echo Confirm the events are disabled
val=`cat events/sample-trace/enable`
if [ $val -ne 0 ]; then
	exit_fail
fi

echo And the set_event file is empty

cnt=`wc -l set_event`
if [ $cnt -ne 0 ]; then
	exit_fail
fi

echo now enable all events
echo 1 > events/enable

echo Confirm the events are enabled again
val=`cat events/sample-trace/enable`
if [ $val -ne 1 ]; then
	exit_fail
fi

echo disable just the module events
echo '!:mod:trace-events-sample' >> set_event

echo Should have mix of events enabled
val=`cat events/enable`
if [ "$val" != "X" ]; then
	exit_fail
fi

echo Confirm the module events are disabled
val=`cat events/sample-trace/enable`
if [ $val -ne 0 ]; then
	exit_fail
fi

echo 0 > events/enable

echo now enable the system events
echo 'sample-trace:mod:trace-events-sample' > set_event

test_all_enabled

echo clear all events
echo 0 > events/enable

echo Confirm the events are disabled
val=`cat events/sample-trace/enable`
if [ $val -ne 0 ]; then
	exit_fail
fi

echo Test enabling foo_bar only
echo 'foo_bar:mod:trace-events-sample' > set_event

grep -q sample-trace:foo_bar set_event

echo make sure nothing is found besides foo_bar
if grep -q -v sample-trace:foo_bar set_event ; then
	exit_fail
fi

echo Append another using the system and event name
echo 'sample-trace:foo_bar_with_cond:mod:trace-events-sample' >> set_event

grep -q sample-trace:foo_bar set_event
grep -q sample-trace:foo_bar_with_cond set_event

count=`cat set_event | wc -l`

if [ $count -ne 2 ]; then
	exit_fail
fi

clear_events

rmmod trace-events-sample

echo ':mod:trace-events-sample' > set_event

echo make sure that the module shows up, and '-' is converted to '_'
grep -q '\*:\*:mod:trace_events_sample' set_event

modprobe trace-events-sample

test_all_enabled

clear_events

rmmod trace-events-sample

echo Enable just the system events
echo 'sample-trace:mod:trace-events-sample' > set_event
grep -q 'sample-trace:mod:trace_events_sample' set_event

modprobe trace-events-sample

test_all_enabled

clear_events

rmmod trace-events-sample

echo Enable event with just event name
echo 'foo_bar:mod:trace-events-sample' > set_event
grep -q 'foo_bar:mod:trace_events_sample' set_event

echo Enable another event with both system and event name
echo 'sample-trace:foo_bar_with_cond:mod:trace-events-sample' >> set_event
grep -q 'sample-trace:foo_bar_with_cond:mod:trace_events_sample' set_event
echo Make sure the other event was still there
grep -q 'foo_bar:mod:trace_events_sample' set_event

modprobe trace-events-sample

echo There should be no :mod: cached events
if grep -q ':mod:' set_event; then
	exit_fail
fi

echo two events should be enabled
count=`cat set_event | wc -l`
if [ $count -ne 2 ]; then
	exit_fail
fi

echo only two events should be enabled
val=`cat events/sample-trace/enable`
if [ "$val" != "X" ]; then
	exit_fail
fi

val=`cat events/sample-trace/foo_bar/enable`
if [ "$val" != "1" ]; then
	exit_fail
fi

val=`cat events/sample-trace/foo_bar_with_cond/enable`
if [ "$val" != "1" ]; then
	exit_fail
fi

clear_trace