Lines Matching +full:sig +full:- +full:dir

1 // SPDX-License-Identifier: GPL-2.0
3 * builtin-test.c
29 #include <subcmd/parse-options.h>
30 #include <subcmd/run-command.h>
37 #include <subcmd/exec-cmd.h>
40 #include "tests-scripts.h"
161 for (idx = 0; (suite)->test_cases && (suite)->test_cases[idx].name != NULL; idx++)
165 DIR *dir = opendir("/proc/self/fd"); in close_parent_fds() local
168 while ((ent = readdir(dir))) { in close_parent_fds()
172 if (ent->d_type != DT_LNK) in close_parent_fds()
175 if (!isdigit(ent->d_name[0])) in close_parent_fds()
178 fd = strtol(ent->d_name, &end, 10); in close_parent_fds()
182 if (fd <= 3 || fd == dirfd(dir)) in close_parent_fds()
187 closedir(dir); in close_parent_fds()
192 DIR *dir = opendir("/proc/self/fd"); in check_leaks() local
196 while ((ent = readdir(dir))) { in check_leaks()
202 if (ent->d_type != DT_LNK) in check_leaks()
205 if (!isdigit(ent->d_name[0])) in check_leaks()
208 fd = strtol(ent->d_name, &end, 10); in check_leaks()
212 if (fd <= 3 || fd == dirfd(dir)) in check_leaks()
216 len = readlinkat(dirfd(dir), ent->d_name, path, sizeof(path)); in check_leaks()
220 strncpy(path, ent->d_name, sizeof(path)); in check_leaks()
221 pr_err("Leak of file descriptor %s that opened: '%s'\n", ent->d_name, path); in check_leaks()
223 closedir(dir); in check_leaks()
239 if (!t->test_cases) in skip_reason()
242 return t->test_cases[test_case >= 0 ? test_case : 0].skip_reason; in skip_reason()
247 if (t->test_cases && test_case >= 0) in test_description()
248 return t->test_cases[test_case].desc; in test_description()
250 return t->desc; in test_description()
256 return t->test_cases[0].run_case; in test_function()
258 return t->test_cases[test_case].run_case; in test_function()
264 return t->test_cases[0].exclusive; in test_exclusive()
266 return t->test_cases[test_case].exclusive; in test_exclusive()
302 static void child_test_sig_handler(int sig) in child_test_sig_handler() argument
309 fprintf(stderr, "\n---- unexpected signal (%d) ----\n", sig); in child_test_sig_handler()
314 siglongjmp(run_test_jmp_buf, sig); in child_test_sig_handler()
330 err = err > 0 ? -err : -1; in run_test_child()
337 pr_debug("--- start ---\n"); in run_test_child()
339 err = test_function(child->test, child->test_case_num)(child->test, child->test_case_num); in run_test_child()
340 pr_debug("---- end(%d) ----\n", err); in run_test_child()
347 return -err; in run_test_child()
350 #define TEST_RUNNING -3
356 int subw = width > 2 ? width - 2 : width; in print_test_result()
358 pr_info("%3d.%1d: %-*s:", curr_suite + 1, curr_test_case + 1, subw, in print_test_result()
361 pr_info("%3d: %-*s:", curr_suite + 1, width, test_description(t, curr_test_case)); in print_test_result()
396 int last_running = -1; in finish_test()
403 t = child_test->test; in finish_test()
404 curr_suite = child_test->suite_num; in finish_test()
405 curr_test_case = child_test->test_case_num; in finish_test()
406 err = child_test->process.err; in finish_test()
412 pr_info("%3d: %-*s:\n", curr_suite + 1, width, test_description(t, -1)); in finish_test()
416 * non-blocking until EOF. in finish_test()
425 pr_info("%3d: %s:\n", curr_suite + 1, test_description(t, -1)); in finish_test()
439 if (check_if_command_finished(&child_tests[y]->process) == 0) in finish_test()
443 if (last_running != -1) { in finish_test()
467 len = read(err, buf, sizeof(buf) - 1); in finish_test()
477 err_done = check_if_command_finished(&child_test->process); in finish_test()
479 if (perf_use_color_default && last_running != -1) { in finish_test()
484 ret = finish_command(&child_test->process); in finish_test()
503 pr_debug("--- start ---\n"); in start_test()
505 pr_debug("---- end ----\n"); in start_test()
516 /* Sequential and non-exclusive tests were run on the first pass. */ in start_test()
521 return -ENOMEM; in start_test()
523 (*child)->test = test; in start_test()
524 (*child)->suite_num = curr_suite; in start_test()
525 (*child)->test_case_num = curr_test_case; in start_test()
526 (*child)->process.pid = -1; in start_test()
527 (*child)->process.no_stdin = 1; in start_test()
529 (*child)->process.no_stdout = 1; in start_test()
530 (*child)->process.no_stderr = 1; in start_test()
532 (*child)->process.stdout_to_stderr = 1; in start_test()
533 (*child)->process.out = -1; in start_test()
534 (*child)->process.err = -1; in start_test()
536 (*child)->process.no_exec_cmd = run_test_child; in start_test()
538 err = start_command(&(*child)->process); in start_test()
544 return start_command(&(*child)->process); in start_test()
553 static void cmd_test_sig_handler(int sig) in cmd_test_sig_handler() argument
555 siglongjmp(cmd_test_jmp_buf, sig); in cmd_test_sig_handler()
565 int i, len = strlen(test_description(*t, -1)); in __cmd_test()
579 return -ENOMEM; in __cmd_test()
588 if (!child_test || child_test->process.pid <= 0) in __cmd_test()
592 child_test->suite_num + 1, in __cmd_test()
593 child_test->process.pid); in __cmd_test()
594 kill(child_test->process.pid, err); in __cmd_test()
602 * In parallel mode pass 1 runs non-exclusive tests in parallel, pass 2 in __cmd_test()
614 if (!perf_test__matches(test_description(*t, -1), curr_suite, argc, argv)) { in __cmd_test()
635 pr_info("%3d: %-*s:", curr_suite + 1, width, in __cmd_test()
636 test_description(*t, -1)); in __cmd_test()
680 if (!perf_test__matches(test_description(*t, -1), curr_suite, argc, argv)) in perf_test__list()
683 fprintf(fp, "%3d: %s\n", curr_suite + 1, test_description(*t, -1)); in perf_test__list()
702 printed += fprintf(fp, "%s\n", twl->name); in workloads__fprintf_list()
712 if (!strcmp(twl->name, work)) in run_workload()
713 return twl->func(argc, argv); in run_workload()
717 return -1; in run_workload()
778 "perf test [<options>] [{list <test-name-fragment>|[<test-name-fragments>|<test-numbers>]}]", in cmd_test()
788 OPT_BOOLEAN('F', "dont-fork", &dont_fork, in cmd_test()
792 OPT_UINTEGER('r', "runs-per-test", &runs_per_test, in cmd_test()
794 …OPT_STRING('w', "workload", &workload, "work", "workload to run for testing, use '--list-workloads… in cmd_test()
795 …OPT_BOOLEAN(0, "list-workloads", &list_workloads, "List the available builtin workloads to use wit… in cmd_test()
817 ret = perf_test__list(stdout, suites, argc - 1, argv + 1); in cmd_test()
838 return -1; in cmd_test()