aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorBjoern Brandenburg <bbb@mpi-sws.org>2015-07-27 11:50:14 -0400
committerBjoern Brandenburg <bbb@mpi-sws.org>2015-07-27 11:50:14 -0400
commita483e1f85dd78be6f9d6b8cdb024859983ec1f55 (patch)
treebf5aa0ec6971a382b2d5c927c986e7e508d62b53 /tests
parent86468257446cf8639bc1e0d3b4cbe382321582a5 (diff)
Test suite: add -v (verbose) option to runtests
Logging PIDs makes finding the right message in kernel debug traces easier...
Diffstat (limited to 'tests')
-rw-r--r--tests/runner.c54
1 files changed, 46 insertions, 8 deletions
diff --git a/tests/runner.c b/tests/runner.c
index 0fd3aa7..ab6bbf6 100644
--- a/tests/runner.c
+++ b/tests/runner.c
@@ -13,6 +13,8 @@
13 13
14#include "litmus.h" 14#include "litmus.h"
15 15
16int verbose = 0;
17
16int run_test(struct testcase *tc) { 18int run_test(struct testcase *tc) {
17 int status; 19 int status;
18 pid_t pid; 20 pid_t pid;
@@ -26,6 +28,10 @@ int run_test(struct testcase *tc) {
26 tc->function(); 28 tc->function();
27 exit(0); 29 exit(0);
28 } else { 30 } else {
31 if (verbose) {
32 printf("[PID=%d] ", pid);
33 fflush(stdout);
34 }
29 /* parent: wait for completion of test */ 35 /* parent: wait for completion of test */
30 SYSCALL( waitpid(pid, &status, 0) ); 36 SYSCALL( waitpid(pid, &status, 0) );
31 if (WIFEXITED(status) && WEXITSTATUS(status) == 0) 37 if (WIFEXITED(status) && WEXITSTATUS(status) == 0)
@@ -74,18 +80,53 @@ static int get_active_plugin(char *buf, size_t buf_size)
74 return 0; 80 return 0;
75} 81}
76 82
83const char *usage_msg =
84 "Usage: runtests OPTIONS [plugin name]\n"
85 " -v verbose (prints PIDs)\n"
86 "\n";
87
88void usage(char *error) {
89 int i;
90 fprintf(stderr, "%s\n%s", error, usage_msg);
91 fprintf(stderr, "Supported plugins: ");
92 for (i = 0; i < NUM_PLUGINS; i++)
93 fprintf(stderr, "%s ", testsuite[i].plugin);
94 fprintf(stderr, "\n");
95 exit(1);
96}
97
77#define streq(s1, s2) (!strcmp(s1, s2)) 98#define streq(s1, s2) (!strcmp(s1, s2))
78 99
100#define OPTSTR "v"
101
79int main(int argc, char** argv) 102int main(int argc, char** argv)
80{ 103{
81 int ok, i; 104 int ok, i, opt;
82 char active_plugin[256]; 105 char active_plugin[256];
83 char *plugin_name = NULL; 106 char *plugin_name = NULL;
84 107
108 while ((opt = getopt(argc, argv, OPTSTR)) != -1) {
109 switch (opt) {
110 case 'v':
111 verbose = 1;
112 break;
113 case ':':
114 usage("Argument missing.");
115 break;
116 case '?':
117 default:
118 usage("Bad argument.");
119 break;
120 }
121 }
122
123 argc -= optind;
124 argv += optind;
125
85 printf("** LITMUS^RT test suite.\n"); 126 printf("** LITMUS^RT test suite.\n");
86 127
87 if (argc == 2) 128 if (argc == 1)
88 plugin_name = argv[1]; 129 plugin_name = argv[0];
89 else if (get_active_plugin(active_plugin, sizeof(active_plugin))) { 130 else if (get_active_plugin(active_plugin, sizeof(active_plugin))) {
90 /* run tests for currently active plugin */ 131 /* run tests for currently active plugin */
91 plugin_name = active_plugin; 132 plugin_name = active_plugin;
@@ -102,13 +143,10 @@ int main(int argc, char** argv)
102 return ok == testsuite[i].num_cases ? 0 : 3; 143 return ok == testsuite[i].num_cases ? 0 : 3;
103 } 144 }
104 fprintf(stderr, "** Unknown plugin: '%s'\n", plugin_name); 145 fprintf(stderr, "** Unknown plugin: '%s'\n", plugin_name);
146 usage("");
105 return 1; 147 return 1;
106 } else { 148 } else {
107 fprintf(stderr, "Usage: %s <plugin name>\n", argv[0]); 149 usage("** Active plugin unknown");
108 fprintf(stderr, "Supported plugins: ");
109 for (i = 0; i < NUM_PLUGINS; i++)
110 fprintf(stderr, "%s ", testsuite[i].plugin);
111 fprintf(stderr, "\n");
112 return 2; 150 return 2;
113 } 151 }
114} 152}