xref: /linux/tools/tracing/rtla/tests/unit/osnoise_top_cli.c (revision 05f4bcb2e2d9859de5d6bd2f35f909de9f8ee12f)
1 // SPDX-License-Identifier: GPL-2.0
2 
3 #define _GNU_SOURCE
4 #include <check.h>
5 #include <stdio.h>
6 #include <stdlib.h>
7 #include <sched.h>
8 #include <limits.h>
9 #include <unistd.h>
10 #include <sys/sysinfo.h>
11 
12 #include "cli_params_assert.h"
13 #include "../../src/cli.h"
14 
15 #define PARSE_ARGS(...) char *argv[] = { __VA_ARGS__, NULL  };\
16 			int argc = sizeof(argv) / sizeof(char *) - 1;\
17 			struct common_params *params =\
18 				osnoise_top_parse_args(argc, argv);\
19 			struct osnoise_params *osn_params __maybe_unused =\
20 				to_osnoise_params(params)
21 
22 /* Tracing Options */
23 
24 START_TEST(test_period_short)
25 {
26 	PARSE_ARGS("osnoise", "top", "-p", "100000");
27 
28 	ck_assert_int_eq(osn_params->period, 100000);
29 }
30 END_TEST
31 
32 START_TEST(test_period_long)
33 {
34 	PARSE_ARGS("osnoise", "top", "--period", "100000");
35 
36 	ck_assert_int_eq(osn_params->period, 100000);
37 }
38 END_TEST
39 
40 START_TEST(test_period_unset_short)
41 {
42 	PARSE_ARGS("osnoise", "top", "-p", "100000", "--no-period");
43 
44 	ck_assert_int_eq(osn_params->period, 0);
45 }
46 END_TEST
47 
48 START_TEST(test_period_unset_long)
49 {
50 	PARSE_ARGS("osnoise", "top", "--period", "100000", "--no-period");
51 
52 	ck_assert_int_eq(osn_params->period, 0);
53 }
54 END_TEST
55 
56 START_TEST(test_runtime_short)
57 {
58 	PARSE_ARGS("osnoise", "top", "-r", "95000");
59 
60 	ck_assert_int_eq(osn_params->runtime, 95000);
61 }
62 END_TEST
63 
64 START_TEST(test_runtime_long)
65 {
66 	PARSE_ARGS("osnoise", "top", "--runtime", "95000");
67 
68 	ck_assert_int_eq(osn_params->runtime, 95000);
69 }
70 END_TEST
71 
72 START_TEST(test_stop_short)
73 {
74 	PARSE_ARGS("osnoise", "top", "-s", "20");
75 
76 	ck_assert_int_eq(params->stop_us, 20);
77 }
78 END_TEST
79 
80 START_TEST(test_stop_long)
81 {
82 	PARSE_ARGS("osnoise", "top", "--stop", "20");
83 
84 	ck_assert_int_eq(params->stop_us, 20);
85 }
86 END_TEST
87 
88 START_TEST(test_stop_total_short)
89 {
90 	PARSE_ARGS("osnoise", "top", "-S", "20");
91 
92 	ck_assert_int_eq(params->stop_total_us, 20);
93 }
94 END_TEST
95 
96 START_TEST(test_stop_total_long)
97 {
98 	PARSE_ARGS("osnoise", "top", "--stop-total", "20");
99 
100 	ck_assert_int_eq(params->stop_total_us, 20);
101 }
102 END_TEST
103 
104 START_TEST(test_threshold_short)
105 {
106 	PARSE_ARGS("osnoise", "top", "-T", "5");
107 
108 	ck_assert_int_eq(osn_params->threshold, 5);
109 }
110 END_TEST
111 
112 START_TEST(test_threshold_long)
113 {
114 	PARSE_ARGS("osnoise", "top", "--threshold", "5");
115 
116 	ck_assert_int_eq(osn_params->threshold, 5);
117 }
118 END_TEST
119 
120 START_TEST(test_trace_short_noarg)
121 {
122 	PARSE_ARGS("osnoise", "top", "-t");
123 
124 	CLI_ASSERT_SINGLE_ACTION(threshold_actions, ACTION_TRACE_OUTPUT, trace_output, str,
125 				 "osnoise_trace.txt");
126 }
127 END_TEST
128 
129 START_TEST(test_trace_short_followarg)
130 {
131 	PARSE_ARGS("osnoise", "top", "-t", "-d", "20");
132 
133 	CLI_ASSERT_SINGLE_ACTION(threshold_actions, ACTION_TRACE_OUTPUT, trace_output, str,
134 				 "osnoise_trace.txt");
135 	ck_assert_int_eq(params->duration, 20); /* check if next argument is read correctly */
136 }
137 END_TEST
138 
139 START_TEST(test_trace_short_space)
140 {
141 	PARSE_ARGS("osnoise", "top", "-t", "tracefile");
142 
143 	CLI_ASSERT_SINGLE_ACTION(threshold_actions, ACTION_TRACE_OUTPUT, trace_output, str,
144 				 "tracefile");
145 }
146 END_TEST
147 
148 START_TEST(test_trace_short_equals)
149 {
150 	PARSE_ARGS("osnoise", "top", "-t=tracefile");
151 
152 	CLI_ASSERT_SINGLE_ACTION(threshold_actions, ACTION_TRACE_OUTPUT, trace_output, str,
153 				 "tracefile");
154 }
155 END_TEST
156 
157 START_TEST(test_trace_long_noarg)
158 {
159 	PARSE_ARGS("osnoise", "top", "--trace");
160 
161 	CLI_ASSERT_SINGLE_ACTION(threshold_actions, ACTION_TRACE_OUTPUT, trace_output, str,
162 				 "osnoise_trace.txt");
163 }
164 END_TEST
165 
166 START_TEST(test_trace_long_followarg)
167 {
168 	PARSE_ARGS("osnoise", "top", "--trace", "-d", "20");
169 
170 	CLI_ASSERT_SINGLE_ACTION(threshold_actions, ACTION_TRACE_OUTPUT, trace_output, str,
171 				 "osnoise_trace.txt");
172 	ck_assert_int_eq(params->duration, 20); /* check if next argument is read correctly */
173 }
174 END_TEST
175 
176 START_TEST(test_trace_long_space)
177 {
178 	PARSE_ARGS("osnoise", "top", "--trace", "tracefile");
179 
180 	CLI_ASSERT_SINGLE_ACTION(threshold_actions, ACTION_TRACE_OUTPUT, trace_output, str,
181 				 "tracefile");
182 }
183 END_TEST
184 
185 START_TEST(test_trace_long_equals)
186 {
187 	PARSE_ARGS("osnoise", "top", "--trace=tracefile");
188 
189 	CLI_ASSERT_SINGLE_ACTION(threshold_actions, ACTION_TRACE_OUTPUT, trace_output, str,
190 				 "tracefile");
191 }
192 END_TEST
193 
194 /* Event Configuration */
195 
196 START_TEST(test_event_short)
197 {
198 	PARSE_ARGS("osnoise", "top", "-e", "system:event");
199 
200 	CLI_ASSERT_SINGLE_EVENT("system", "event");
201 }
202 END_TEST
203 
204 START_TEST(test_event_long)
205 {
206 	PARSE_ARGS("osnoise", "top", "--event", "system:event");
207 
208 	CLI_ASSERT_SINGLE_EVENT("system", "event");
209 }
210 END_TEST
211 
212 START_TEST(test_filter)
213 {
214 	PARSE_ARGS("osnoise", "top", "-e", "system:event", "--filter", "filter");
215 
216 	CLI_ASSERT_SINGLE_FILTER("filter");
217 }
218 END_TEST
219 
220 START_TEST(test_trigger)
221 {
222 	PARSE_ARGS("osnoise", "top", "-e", "system:event", "--trigger", "trigger");
223 
224 	CLI_ASSERT_SINGLE_TRIGGER("trigger");
225 }
226 END_TEST
227 
228 /* CPU Configuration */
229 
230 START_TEST(test_cpus_short)
231 {
232 	nr_cpus = 4;
233 
234 	PARSE_ARGS("osnoise", "top", "-c", "0-1,3");
235 
236 	ck_assert_str_eq(params->cpus, "0-1,3");
237 	CLI_ASSERT_CPUSET(monitored_cpus, 0, 1, 3);
238 }
239 END_TEST
240 
241 START_TEST(test_cpus_long)
242 {
243 	nr_cpus = 4;
244 
245 	PARSE_ARGS("osnoise", "top", "--cpus", "0-1,3");
246 
247 	ck_assert_str_eq(params->cpus, "0-1,3");
248 	CLI_ASSERT_CPUSET(monitored_cpus, 0, 1, 3);
249 }
250 END_TEST
251 
252 START_TEST(test_housekeeping_short)
253 {
254 	nr_cpus = 4;
255 
256 	PARSE_ARGS("osnoise", "top", "-H", "0-1,3");
257 
258 	CLI_ASSERT_CPUSET(hk_cpu_set, 0, 1, 3);
259 }
260 END_TEST
261 
262 START_TEST(test_housekeeping_long)
263 {
264 	nr_cpus = 4;
265 
266 	PARSE_ARGS("osnoise", "top", "--house-keeping", "0-1,3");
267 
268 	CLI_ASSERT_CPUSET(hk_cpu_set, 0, 1, 3);
269 }
270 END_TEST
271 
272 /* Thread Configuration */
273 
274 START_TEST(test_cgroup_short_noarg)
275 {
276 	PARSE_ARGS("osnoise", "top", "-C");
277 
278 	ck_assert(params->cgroup);
279 	ck_assert_ptr_null(params->cgroup_name);
280 }
281 END_TEST
282 
283 START_TEST(test_cgroup_short_space)
284 {
285 	PARSE_ARGS("osnoise", "top", "-C", "cgroup");
286 
287 	ck_assert(params->cgroup);
288 	ck_assert_str_eq(params->cgroup_name, "cgroup");
289 }
290 END_TEST
291 
292 START_TEST(test_cgroup_short_equals)
293 {
294 	PARSE_ARGS("osnoise", "top", "-C=cgroup");
295 
296 	ck_assert(params->cgroup);
297 	ck_assert_str_eq(params->cgroup_name, "cgroup");
298 }
299 END_TEST
300 
301 START_TEST(test_cgroup_long_noarg)
302 {
303 	PARSE_ARGS("osnoise", "top", "--cgroup");
304 
305 	ck_assert(params->cgroup);
306 	ck_assert_ptr_null(params->cgroup_name);
307 }
308 END_TEST
309 
310 START_TEST(test_cgroup_long_space)
311 {
312 	PARSE_ARGS("osnoise", "top", "--cgroup", "cgroup");
313 
314 	ck_assert(params->cgroup);
315 	ck_assert_str_eq(params->cgroup_name, "cgroup");
316 }
317 END_TEST
318 
319 START_TEST(test_cgroup_long_equals)
320 {
321 	PARSE_ARGS("osnoise", "top", "--cgroup=cgroup");
322 
323 	ck_assert(params->cgroup);
324 	ck_assert_str_eq(params->cgroup_name, "cgroup");
325 }
326 END_TEST
327 
328 START_TEST(test_priority_short)
329 {
330 	PARSE_ARGS("osnoise", "top", "-P", "f:95");
331 
332 	ck_assert_int_eq(params->sched_param.sched_policy, SCHED_FIFO);
333 	ck_assert_int_eq(params->sched_param.sched_priority, 95);
334 }
335 END_TEST
336 
337 START_TEST(test_priority_long)
338 {
339 	PARSE_ARGS("osnoise", "top", "--priority", "f:95");
340 
341 	ck_assert_int_eq(params->sched_param.sched_policy, SCHED_FIFO);
342 	ck_assert_int_eq(params->sched_param.sched_priority, 95);
343 }
344 END_TEST
345 
346 /* Output */
347 
348 START_TEST(test_quiet_short)
349 {
350 	PARSE_ARGS("osnoise", "top", "-q");
351 
352 	ck_assert(params->quiet);
353 }
354 END_TEST
355 
356 START_TEST(test_quiet_long)
357 {
358 	PARSE_ARGS("osnoise", "top", "--quiet");
359 
360 	ck_assert(params->quiet);
361 }
362 END_TEST
363 
364 /* Auto Analysis and Actions */
365 
366 START_TEST(test_auto)
367 {
368 	PARSE_ARGS("osnoise", "top", "-a", "20");
369 
370 	CLI_OSNOISE_ASSERT_AUTO(20);
371 }
372 END_TEST
373 
374 START_TEST(test_on_end)
375 {
376 	PARSE_ARGS("osnoise", "top", "--on-end", "trace");
377 
378 	CLI_ASSERT_SINGLE_ACTION(end_actions, ACTION_TRACE_OUTPUT, trace_output, str,
379 				 "osnoise_trace.txt");
380 }
381 END_TEST
382 
383 START_TEST(test_on_threshold)
384 {
385 	PARSE_ARGS("osnoise", "top", "--on-threshold", "trace");
386 
387 	CLI_ASSERT_SINGLE_ACTION(threshold_actions, ACTION_TRACE_OUTPUT, trace_output, str,
388 				 "osnoise_trace.txt");
389 }
390 END_TEST
391 
392 /* System Tuning */
393 
394 START_TEST(test_trace_buffer_size)
395 {
396 	PARSE_ARGS("osnoise", "top", "--trace-buffer-size", "200");
397 
398 	ck_assert_int_eq(params->buffer_size, 200);
399 }
400 END_TEST
401 
402 START_TEST(test_warm_up)
403 {
404 	PARSE_ARGS("osnoise", "top", "--warm-up", "5");
405 
406 	ck_assert_int_eq(params->warmup, 5);
407 }
408 END_TEST
409 
410 /* General */
411 
412 START_TEST(test_debug_short)
413 {
414 	PARSE_ARGS("osnoise", "top", "-D");
415 
416 	ck_assert(config_debug);
417 }
418 END_TEST
419 
420 START_TEST(test_debug_long)
421 {
422 	PARSE_ARGS("osnoise", "top", "--debug");
423 
424 	ck_assert(config_debug);
425 }
426 END_TEST
427 
428 START_TEST(test_duration_short)
429 {
430 	PARSE_ARGS("osnoise", "top", "-d", "1m");
431 
432 	ck_assert_int_eq(params->duration, 60);
433 }
434 END_TEST
435 
436 START_TEST(test_duration_long)
437 {
438 	PARSE_ARGS("osnoise", "top", "--duration", "1m");
439 
440 	ck_assert_int_eq(params->duration, 60);
441 }
442 END_TEST
443 
444 Suite *osnoise_top_cli_suite(void)
445 {
446 	Suite *s = suite_create("osnoise_top_cli");
447 	TCase *tc;
448 
449 	tc = tcase_create("tracing_options");
450 	tcase_add_test(tc, test_period_short);
451 	tcase_add_test(tc, test_period_long);
452 	tcase_add_test(tc, test_period_unset_short);
453 	tcase_add_test(tc, test_period_unset_long);
454 	tcase_add_test(tc, test_runtime_short);
455 	tcase_add_test(tc, test_runtime_long);
456 	tcase_add_test(tc, test_stop_short);
457 	tcase_add_test(tc, test_stop_long);
458 	tcase_add_test(tc, test_stop_total_short);
459 	tcase_add_test(tc, test_stop_total_long);
460 	tcase_add_test(tc, test_threshold_short);
461 	tcase_add_test(tc, test_threshold_long);
462 	tcase_add_test(tc, test_trace_short_noarg);
463 	tcase_add_test(tc, test_trace_short_followarg);
464 	tcase_add_test(tc, test_trace_short_space);
465 	tcase_add_test(tc, test_trace_short_equals);
466 	tcase_add_test(tc, test_trace_long_noarg);
467 	tcase_add_test(tc, test_trace_long_followarg);
468 	tcase_add_test(tc, test_trace_long_space);
469 	tcase_add_test(tc, test_trace_long_equals);
470 	suite_add_tcase(s, tc);
471 
472 	tc = tcase_create("event_configuration");
473 	tcase_add_test(tc, test_event_short);
474 	tcase_add_test(tc, test_event_long);
475 	tcase_add_test(tc, test_filter);
476 	tcase_add_test(tc, test_trigger);
477 	suite_add_tcase(s, tc);
478 
479 	tc = tcase_create("cpu_configuration");
480 	tcase_add_test(tc, test_cpus_short);
481 	tcase_add_test(tc, test_cpus_long);
482 	tcase_add_test(tc, test_housekeeping_short);
483 	tcase_add_test(tc, test_housekeeping_long);
484 	suite_add_tcase(s, tc);
485 
486 	tc = tcase_create("thread_configuration");
487 	tcase_add_test(tc, test_cgroup_short_noarg);
488 	tcase_add_test(tc, test_cgroup_short_space);
489 	tcase_add_test(tc, test_cgroup_short_equals);
490 	tcase_add_test(tc, test_cgroup_long_noarg);
491 	tcase_add_test(tc, test_cgroup_long_space);
492 	tcase_add_test(tc, test_cgroup_long_equals);
493 	tcase_add_test(tc, test_priority_short);
494 	tcase_add_test(tc, test_priority_long);
495 	suite_add_tcase(s, tc);
496 
497 	tc = tcase_create("output");
498 	tcase_add_test(tc, test_quiet_short);
499 	tcase_add_test(tc, test_quiet_long);
500 	suite_add_tcase(s, tc);
501 
502 	tc = tcase_create("system_tuning");
503 	tcase_add_test(tc, test_trace_buffer_size);
504 	tcase_add_test(tc, test_warm_up);
505 	suite_add_tcase(s, tc);
506 
507 	tc = tcase_create("aa_actions");
508 	tcase_add_test(tc, test_auto);
509 	tcase_add_test(tc, test_on_end);
510 	tcase_add_test(tc, test_on_threshold);
511 	suite_add_tcase(s, tc);
512 
513 	tc = tcase_create("general");
514 	tcase_add_test(tc, test_debug_short);
515 	tcase_add_test(tc, test_debug_long);
516 	tcase_add_test(tc, test_duration_short);
517 	tcase_add_test(tc, test_duration_long);
518 	suite_add_tcase(s, tc);
519 
520 	return s;
521 }
522