xref: /linux/tools/tracing/rtla/tests/unit/osnoise_hist_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_hist_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", "hist", "-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", "hist", "--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", "hist", "-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", "hist", "--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", "hist", "-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", "hist", "--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", "hist", "-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", "hist", "--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", "hist", "-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", "hist", "--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", "hist", "-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", "hist", "--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", "hist", "-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", "hist", "-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", "hist", "-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", "hist", "-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", "hist", "--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", "hist", "--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", "hist", "--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", "hist", "--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", "hist", "-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", "hist", "--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", "hist", "-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", "hist", "-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", "hist", "-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", "hist", "--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", "hist", "-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", "hist", "--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", "hist", "-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", "hist", "-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", "hist", "-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", "hist", "--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", "hist", "--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", "hist", "--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", "hist", "-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", "hist", "--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 /* Histogram Options */
347 
348 START_TEST(test_bucket_size_short)
349 {
350 	PARSE_ARGS("osnoise", "hist", "-b", "2");
351 
352 	ck_assert_int_eq(params->hist.bucket_size, 2);
353 }
354 END_TEST
355 
356 START_TEST(test_bucket_size_long)
357 {
358 	PARSE_ARGS("osnoise", "hist", "--bucket-size", "2");
359 
360 	ck_assert_int_eq(params->hist.bucket_size, 2);
361 }
362 END_TEST
363 
364 START_TEST(test_entries_short)
365 {
366 	PARSE_ARGS("osnoise", "hist", "-E", "512");
367 
368 	ck_assert_int_eq(params->hist.entries, 512);
369 }
370 END_TEST
371 
372 START_TEST(test_entries_long)
373 {
374 	PARSE_ARGS("osnoise", "hist", "--entries", "512");
375 
376 	ck_assert_int_eq(params->hist.entries, 512);
377 }
378 END_TEST
379 
380 START_TEST(test_no_header)
381 {
382 	PARSE_ARGS("osnoise", "hist", "--no-header");
383 
384 	ck_assert(params->hist.no_header);
385 }
386 END_TEST
387 
388 START_TEST(test_no_index)
389 {
390 	PARSE_ARGS("osnoise", "hist", "--with-zeros", "--no-index");
391 
392 	ck_assert(params->hist.no_index);
393 }
394 END_TEST
395 
396 START_TEST(test_no_summary)
397 {
398 	PARSE_ARGS("osnoise", "hist", "--no-summary");
399 
400 	ck_assert(params->hist.no_summary);
401 }
402 END_TEST
403 
404 START_TEST(test_with_zeros)
405 {
406 	PARSE_ARGS("osnoise", "hist", "--with-zeros");
407 
408 	ck_assert(params->hist.with_zeros);
409 }
410 END_TEST
411 
412 /* System Tuning */
413 
414 START_TEST(test_trace_buffer_size)
415 {
416 	PARSE_ARGS("osnoise", "hist", "--trace-buffer-size", "200");
417 
418 	ck_assert_int_eq(params->buffer_size, 200);
419 }
420 END_TEST
421 
422 START_TEST(test_warm_up)
423 {
424 	PARSE_ARGS("osnoise", "hist", "--warm-up", "5");
425 
426 	ck_assert_int_eq(params->warmup, 5);
427 }
428 END_TEST
429 
430 /* Auto Analysis and Actions */
431 
432 START_TEST(test_auto)
433 {
434 	PARSE_ARGS("osnoise", "hist", "-a", "20");
435 
436 	CLI_OSNOISE_ASSERT_AUTO(20);
437 }
438 END_TEST
439 
440 START_TEST(test_on_end)
441 {
442 	PARSE_ARGS("osnoise", "hist", "--on-end", "trace");
443 
444 	CLI_ASSERT_SINGLE_ACTION(end_actions, ACTION_TRACE_OUTPUT, trace_output, str,
445 				 "osnoise_trace.txt");
446 }
447 END_TEST
448 
449 START_TEST(test_on_threshold)
450 {
451 	PARSE_ARGS("osnoise", "hist", "--on-threshold", "trace");
452 
453 	CLI_ASSERT_SINGLE_ACTION(threshold_actions, ACTION_TRACE_OUTPUT, trace_output, str,
454 				 "osnoise_trace.txt");
455 }
456 END_TEST
457 
458 /* General */
459 
460 START_TEST(test_debug_short)
461 {
462 	PARSE_ARGS("osnoise", "hist", "-D");
463 
464 	ck_assert(config_debug);
465 }
466 END_TEST
467 
468 START_TEST(test_debug_long)
469 {
470 	PARSE_ARGS("osnoise", "hist", "--debug");
471 
472 	ck_assert(config_debug);
473 }
474 END_TEST
475 
476 START_TEST(test_duration_short)
477 {
478 	PARSE_ARGS("osnoise", "hist", "-d", "1m");
479 
480 	ck_assert_int_eq(params->duration, 60);
481 }
482 END_TEST
483 
484 START_TEST(test_duration_long)
485 {
486 	PARSE_ARGS("osnoise", "hist", "--duration", "1m");
487 
488 	ck_assert_int_eq(params->duration, 60);
489 }
490 END_TEST
491 
492 Suite *osnoise_hist_cli_suite(void)
493 {
494 	Suite *s = suite_create("osnoise_hist_cli");
495 	TCase *tc;
496 
497 	tc = tcase_create("tracing_options");
498 	tcase_add_test(tc, test_period_short);
499 	tcase_add_test(tc, test_period_long);
500 	tcase_add_test(tc, test_period_unset_short);
501 	tcase_add_test(tc, test_period_unset_long);
502 	tcase_add_test(tc, test_runtime_short);
503 	tcase_add_test(tc, test_runtime_long);
504 	tcase_add_test(tc, test_stop_short);
505 	tcase_add_test(tc, test_stop_long);
506 	tcase_add_test(tc, test_stop_total_short);
507 	tcase_add_test(tc, test_stop_total_long);
508 	tcase_add_test(tc, test_threshold_short);
509 	tcase_add_test(tc, test_threshold_long);
510 	tcase_add_test(tc, test_trace_short_noarg);
511 	tcase_add_test(tc, test_trace_short_followarg);
512 	tcase_add_test(tc, test_trace_short_space);
513 	tcase_add_test(tc, test_trace_short_equals);
514 	tcase_add_test(tc, test_trace_long_noarg);
515 	tcase_add_test(tc, test_trace_long_followarg);
516 	tcase_add_test(tc, test_trace_long_space);
517 	tcase_add_test(tc, test_trace_long_equals);
518 	suite_add_tcase(s, tc);
519 
520 	tc = tcase_create("event_configuration");
521 	tcase_add_test(tc, test_event_short);
522 	tcase_add_test(tc, test_event_long);
523 	tcase_add_test(tc, test_filter);
524 	tcase_add_test(tc, test_trigger);
525 	suite_add_tcase(s, tc);
526 
527 	tc = tcase_create("cpu_configuration");
528 	tcase_add_test(tc, test_cpus_short);
529 	tcase_add_test(tc, test_cpus_long);
530 	tcase_add_test(tc, test_housekeeping_short);
531 	tcase_add_test(tc, test_housekeeping_long);
532 	suite_add_tcase(s, tc);
533 
534 	tc = tcase_create("thread_configuration");
535 	tcase_add_test(tc, test_cgroup_short_noarg);
536 	tcase_add_test(tc, test_cgroup_short_space);
537 	tcase_add_test(tc, test_cgroup_short_equals);
538 	tcase_add_test(tc, test_cgroup_long_noarg);
539 	tcase_add_test(tc, test_cgroup_long_space);
540 	tcase_add_test(tc, test_cgroup_long_equals);
541 	tcase_add_test(tc, test_priority_short);
542 	tcase_add_test(tc, test_priority_long);
543 	suite_add_tcase(s, tc);
544 
545 	tc = tcase_create("histogram_options");
546 	tcase_add_test(tc, test_bucket_size_short);
547 	tcase_add_test(tc, test_bucket_size_long);
548 	tcase_add_test(tc, test_entries_short);
549 	tcase_add_test(tc, test_entries_long);
550 	tcase_add_test(tc, test_no_header);
551 	tcase_add_test(tc, test_no_index);
552 	tcase_add_test(tc, test_no_summary);
553 	tcase_add_test(tc, test_with_zeros);
554 	suite_add_tcase(s, tc);
555 
556 	tc = tcase_create("system_tuning");
557 	tcase_add_test(tc, test_trace_buffer_size);
558 	tcase_add_test(tc, test_warm_up);
559 	suite_add_tcase(s, tc);
560 
561 	tc = tcase_create("aa_actions");
562 	tcase_add_test(tc, test_auto);
563 	tcase_add_test(tc, test_on_end);
564 	tcase_add_test(tc, test_on_threshold);
565 	suite_add_tcase(s, tc);
566 
567 	tc = tcase_create("general");
568 	tcase_add_test(tc, test_debug_short);
569 	tcase_add_test(tc, test_debug_long);
570 	tcase_add_test(tc, test_duration_short);
571 	tcase_add_test(tc, test_duration_long);
572 	suite_add_tcase(s, tc);
573 
574 	return s;
575 }
576