diff --git a/tools/test-runner.c b/tools/test-runner.c
index ce1cbfd..3fc03fd 100644
--- a/tools/test-runner.c
+++ b/tools/test-runner.c
static char **test_argv;
static int test_argc;
+static bool run_auto = false;
static bool start_dbus = false;
static const char *qemu_binary = NULL;
static const char *kernel_image = NULL;
"rootfstype=9p "
"rootflags=trans=virtio,version=9p2000.L "
"acpi=off pci=noacpi noapic quiet ro init=%s "
- "TESTHOME=%s TESTDBUS=%u TESTARGS=\'%s\'",
- initcmd, cwd, start_dbus, testargs);
+ "TESTHOME=%s TESTDBUS=%u TESTAUTO=%u "
+ "TESTARGS=\'%s\'",
+ initcmd, cwd, start_dbus, run_auto, testargs);
argv = alloca(sizeof(qemu_argv));
memcpy(argv, qemu_argv, sizeof(qemu_argv));
return pid;
}
+static const char *test_table[] = {
+ "mgmt-tester",
+ "smp-tester",
+ "l2cap-tester",
+ "rfcomm-tester",
+ "sco-tester",
+ "check-selftest",
+ "tools/mgmt-tester",
+ "tools/smp-tester",
+ "tools/l2cap-tester",
+ "tools/rfcomm-tester",
+ "tools/sco-tester",
+ "tools/check-selftest",
+ NULL
+};
+
static void run_command(char *cmdname, char *home)
{
char *argv[9], *envp[3];
- int pos = 0;
+ int pos = 0, idx = 0;
pid_t pid, dbus_pid, daemon_pid;
if (start_dbus) {
daemon_pid = -1;
}
- while (1) {
- char *ptr;
+start_next:
+ if (run_auto) {
+ if (chdir(home + 5) < 0) {
+ perror("Failed to change home test directory");
+ return;
+ }
+
+ while (1) {
+ struct stat st;
- ptr = strchr(cmdname, ' ');
- if (!ptr) {
- argv[pos++] = cmdname;
- break;
+ if (!test_table[idx])
+ return;
+
+ if (!stat(test_table[idx], &st))
+ break;
+
+ idx++;
}
- *ptr = '\0';
- argv[pos++] = cmdname;
- if (pos > 8)
- break;
+ argv[0] = (char *) test_table[idx];
+ argv[1] = "-q";
+ argv[2] = NULL;
+ } else {
+ while (1) {
+ char *ptr;
- cmdname = ptr + 1;
- }
+ ptr = strchr(cmdname, ' ');
+ if (!ptr) {
+ argv[pos++] = cmdname;
+ break;
+ }
- argv[pos] = NULL;
+ *ptr = '\0';
+ argv[pos++] = cmdname;
+ if (pos > 8)
+ break;
+
+ cmdname = ptr + 1;
+ }
+
+ argv[pos] = NULL;
+ }
pos = 0;
envp[pos++] = "TERM=linux";
}
if (corpse == pid) {
- if (daemon_pid > 0)
- kill(daemon_pid, SIGTERM);
- if (dbus_pid > 0)
- kill(dbus_pid, SIGTERM);
+ if (!run_auto) {
+ if (daemon_pid > 0)
+ kill(daemon_pid, SIGTERM);
+ if (dbus_pid > 0)
+ kill(dbus_pid, SIGTERM);
+ }
break;
}
}
+
+ if (run_auto) {
+ idx++;
+ goto start_next;
+ }
}
static void run_tests(void)
*ptr = '\0';
+ ptr = strstr(cmdline, "TESTAUTO=1");
+ if (ptr) {
+ printf("Automatic test execution requested\n");
+ run_auto= true;
+ }
+
ptr = strstr(cmdline, "TESTDBUS=1");
if (ptr) {
printf("D-Bus daemon requested\n");
"Usage:\n");
printf("\ttest-runner [options] [--] <command> [args]\n");
printf("Options:\n"
+ "\t-a, --auto Find tests and run them\n"
"\t-d, --dbus Start D-Bus daemon\n"
"\t-q, --qemu <path> QEMU binary\n"
"\t-k, --kernel <image> Kernel image (bzImage)\n"
}
static const struct option main_options[] = {
+ { "all", no_argument, NULL, 'a' },
+ { "auto", no_argument, NULL, 'a' },
{ "dbus", no_argument, NULL, 'd' },
{ "qemu", required_argument, NULL, 'q' },
{ "kernel", required_argument, NULL, 'k' },
for (;;) {
int opt;
- opt = getopt_long(argc, argv, "dq:k:vh", main_options, NULL);
+ opt = getopt_long(argc, argv, "adq:k:vh", main_options, NULL);
if (opt < 0)
break;
switch (opt) {
+ case 'a':
+ run_auto = true;
+ break;
case 'd':
start_dbus = true;
break;
}
}
- if (argc - optind < 1) {
- fprintf(stderr, "Failed to specify test command\n");
- return EXIT_FAILURE;
+ if (run_auto) {
+ if (argc - optind > 0) {
+ fprintf(stderr, "Invalid command line parameters\n");
+ return EXIT_FAILURE;
+ }
+ } else {
+ if (argc - optind < 1) {
+ fprintf(stderr, "Failed to specify test command\n");
+ return EXIT_FAILURE;
+ }
}
own_binary = argv[0];