mirror of
https://git.kernel.org/pub/scm/bluetooth/bluez.git
synced 2024-11-16 00:34:39 +08:00
test-runner: Add option to start emulator
This adds an option (-l/--emulator) to start btvirt before processing the command which is convenient to runs tools like bluetoothctl: sudo tools/test-runner -l -d -k <pathto/bzImage> -- client/bluetoothctl power on
This commit is contained in:
parent
d91fe6994f
commit
850003734a
@ -47,6 +47,7 @@ static int test_argc;
|
||||
|
||||
static bool run_auto = false;
|
||||
static bool start_dbus = false;
|
||||
static bool start_emulator = false;
|
||||
static bool start_monitor = false;
|
||||
static int num_devs = 0;
|
||||
static const char *qemu_binary = NULL;
|
||||
@ -249,9 +250,10 @@ static void start_qemu(void)
|
||||
"acpi=off pci=noacpi noapic quiet ro init=%s "
|
||||
"bluetooth.enable_ecred=1"
|
||||
"TESTHOME=%s TESTDBUS=%u TESTMONITOR=%u "
|
||||
"TESTDEVS=%d TESTAUTO=%u TESTARGS=\'%s\'",
|
||||
"TESTEMULATOR=%u TESTDEVS=%d TESTAUTO=%u "
|
||||
"TESTARGS=\'%s\'",
|
||||
initcmd, cwd, start_dbus, start_monitor,
|
||||
num_devs, run_auto, testargs);
|
||||
start_emulator, num_devs, run_auto, testargs);
|
||||
|
||||
argv = alloca(sizeof(qemu_argv) +
|
||||
(sizeof(char *) * (4 + (num_devs * 4))));
|
||||
@ -600,12 +602,64 @@ static pid_t start_btmon(const char *home)
|
||||
return pid;
|
||||
}
|
||||
|
||||
static const char *btvirt_table[] = {
|
||||
"btvirt",
|
||||
"emulator/btvirt",
|
||||
"/usr/sbin/btvirt",
|
||||
NULL
|
||||
};
|
||||
|
||||
static pid_t start_btvirt(void)
|
||||
{
|
||||
const char *btvirt = NULL;
|
||||
char *argv[3], *envp[2];
|
||||
pid_t pid;
|
||||
int i;
|
||||
|
||||
for (i = 0; btvirt_table[i]; i++) {
|
||||
struct stat st;
|
||||
|
||||
if (!stat(btvirt_table[i], &st)) {
|
||||
btvirt = btvirt_table[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!btvirt) {
|
||||
fprintf(stderr, "Failed to locate btvirt binary\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
printf("Using %s\n", btvirt);
|
||||
|
||||
argv[0] = (char *) btvirt;
|
||||
argv[1] = "-l";
|
||||
argv[2] = NULL;
|
||||
|
||||
printf("Starting Emulator\n");
|
||||
|
||||
pid = fork();
|
||||
if (pid < 0) {
|
||||
perror("Failed to fork new process");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (pid == 0) {
|
||||
execve(argv[0], argv, envp);
|
||||
exit(EXIT_SUCCESS);
|
||||
}
|
||||
|
||||
printf("Emulator process %d created\n", pid);
|
||||
|
||||
return pid;
|
||||
}
|
||||
|
||||
static void run_command(char *cmdname, char *home)
|
||||
{
|
||||
char *argv[9], *envp[3];
|
||||
int pos = 0, idx = 0;
|
||||
int serial_fd;
|
||||
pid_t pid, dbus_pid, daemon_pid, monitor_pid;
|
||||
pid_t pid, dbus_pid, daemon_pid, monitor_pid, emulator_pid;
|
||||
|
||||
if (num_devs) {
|
||||
const char *node = "/dev/ttyS1";
|
||||
@ -635,6 +689,11 @@ static void run_command(char *cmdname, char *home)
|
||||
else
|
||||
monitor_pid = -1;
|
||||
|
||||
if (start_emulator)
|
||||
emulator_pid = start_btvirt();
|
||||
else
|
||||
emulator_pid = -1;
|
||||
|
||||
start_next:
|
||||
if (run_auto) {
|
||||
if (chdir(home + 5) < 0) {
|
||||
@ -735,6 +794,11 @@ start_next:
|
||||
daemon_pid = -1;
|
||||
}
|
||||
|
||||
if (corpse == emulator_pid) {
|
||||
printf("Bluetooth emulator terminated\n");
|
||||
emulator_pid = -1;
|
||||
}
|
||||
|
||||
if (corpse == monitor_pid) {
|
||||
printf("Bluetooth monitor terminated\n");
|
||||
monitor_pid = -1;
|
||||
@ -755,6 +819,9 @@ start_next:
|
||||
if (dbus_pid > 0)
|
||||
kill(dbus_pid, SIGTERM);
|
||||
|
||||
if (emulator_pid > 0)
|
||||
kill(dbus_pid, SIGTERM);
|
||||
|
||||
if (monitor_pid > 0)
|
||||
kill(monitor_pid, SIGTERM);
|
||||
|
||||
@ -822,6 +889,12 @@ static void run_tests(void)
|
||||
start_monitor = true;
|
||||
}
|
||||
|
||||
ptr = strstr(cmdline, "TESTEMULATOR=1");
|
||||
if (ptr) {
|
||||
printf("Emulator requested\n");
|
||||
start_emulator = true;
|
||||
}
|
||||
|
||||
ptr = strstr(cmdline, "TESTHOME=");
|
||||
if (ptr) {
|
||||
home = ptr + 4;
|
||||
@ -853,6 +926,7 @@ static const struct option main_options[] = {
|
||||
{ "auto", no_argument, NULL, 'a' },
|
||||
{ "unix", no_argument, NULL, 'u' },
|
||||
{ "dbus", no_argument, NULL, 'd' },
|
||||
{ "emulator", no_argument, NULL, 'l' },
|
||||
{ "monitor", no_argument, NULL, 'm' },
|
||||
{ "qemu", required_argument, NULL, 'q' },
|
||||
{ "kernel", required_argument, NULL, 'k' },
|
||||
@ -875,7 +949,8 @@ int main(int argc, char *argv[])
|
||||
for (;;) {
|
||||
int opt;
|
||||
|
||||
opt = getopt_long(argc, argv, "audmq:k:vh", main_options, NULL);
|
||||
opt = getopt_long(argc, argv, "audlmq:k:vh", main_options,
|
||||
NULL);
|
||||
if (opt < 0)
|
||||
break;
|
||||
|
||||
@ -889,6 +964,9 @@ int main(int argc, char *argv[])
|
||||
case 'd':
|
||||
start_dbus = true;
|
||||
break;
|
||||
case 'l':
|
||||
start_emulator = true;
|
||||
break;
|
||||
case 'm':
|
||||
start_monitor = true;
|
||||
break;
|
||||
|
Loading…
Reference in New Issue
Block a user