mirror of
https://git.kernel.org/pub/scm/bluetooth/bluez.git
synced 2024-11-15 16:24:28 +08:00
test-runner: Add DBus session support
Audio daemons requests access to DBus session to start
This commit is contained in:
parent
6e2066fdab
commit
a7e2f05e02
@ -47,6 +47,7 @@ static int test_argc;
|
||||
|
||||
static bool run_auto = false;
|
||||
static bool start_dbus = false;
|
||||
static bool start_dbus_session;
|
||||
static bool start_daemon = false;
|
||||
static bool start_emulator = false;
|
||||
static bool start_monitor = false;
|
||||
@ -251,9 +252,11 @@ static void start_qemu(void)
|
||||
"acpi=off pci=noacpi noapic quiet ro init=%s "
|
||||
"bluetooth.enable_ecred=1"
|
||||
"TESTHOME=%s TESTDBUS=%u TESTDAEMON=%u "
|
||||
"TESTDBUSSESSION=%u XDG_RUNTIME_DIR=/run/user/0 "
|
||||
"TESTMONITOR=%u TESTEMULATOR=%u TESTDEVS=%d "
|
||||
"TESTAUTO=%u TESTARGS=\'%s\'",
|
||||
initcmd, cwd, start_dbus, start_daemon,
|
||||
start_dbus_session,
|
||||
start_monitor, start_emulator, num_devs,
|
||||
run_auto, testargs);
|
||||
|
||||
@ -420,19 +423,63 @@ static void create_dbus_system_conf(void)
|
||||
mkdir("/run/dbus", 0755);
|
||||
}
|
||||
|
||||
static pid_t start_dbus_daemon(void)
|
||||
static void create_dbus_session_conf(void)
|
||||
{
|
||||
FILE *fp;
|
||||
|
||||
fp = fopen("/etc/dbus-1/session.conf", "we");
|
||||
if (!fp)
|
||||
return;
|
||||
|
||||
fputs("<!DOCTYPE busconfig PUBLIC "
|
||||
"\"-//freedesktop//DTD D-Bus Bus Configuration 1.0//EN\" "
|
||||
"\"http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd\">\n", fp);
|
||||
fputs("<busconfig>\n", fp);
|
||||
fputs("<type>session</type>\n", fp);
|
||||
fputs("<listen>unix:path=/run/user/0/bus</listen>\n", fp);
|
||||
fputs("<policy context=\"default\">\n", fp);
|
||||
fputs("<allow user=\"*\"/>\n", fp);
|
||||
fputs("<allow own=\"*\"/>\n", fp);
|
||||
fputs("<allow send_type=\"method_call\"/>\n", fp);
|
||||
fputs("<allow send_type=\"signal\"/>\n", fp);
|
||||
fputs("<allow send_type=\"method_return\"/>\n", fp);
|
||||
fputs("<allow send_type=\"error\"/>\n", fp);
|
||||
fputs("<allow receive_type=\"method_call\"/>\n", fp);
|
||||
fputs("<allow receive_type=\"signal\"/>\n", fp);
|
||||
fputs("<allow receive_type=\"method_return\"/>\n", fp);
|
||||
fputs("<allow receive_type=\"error\"/>\n", fp);
|
||||
fputs("</policy>\n", fp);
|
||||
fputs("</busconfig>\n", fp);
|
||||
|
||||
fclose(fp);
|
||||
|
||||
if (symlink("/etc/dbus-1/session.conf",
|
||||
"/usr/share/dbus-1/session.conf") < 0)
|
||||
perror("Failed to create session.conf symlink");
|
||||
|
||||
mkdir("/run/user", 0755);
|
||||
mkdir("/run/user/0", 0755);
|
||||
}
|
||||
|
||||
static pid_t start_dbus_daemon(bool session)
|
||||
{
|
||||
char *argv[3], *envp[1];
|
||||
pid_t pid;
|
||||
int i;
|
||||
char *bus_type = session ? "session" : "system";
|
||||
char *socket_path = session ?
|
||||
"/run/user/0/bus" : "/run/dbus/system_bus_socket";
|
||||
|
||||
argv[0] = "/usr/bin/dbus-daemon";
|
||||
argv[1] = "--system";
|
||||
if (session)
|
||||
argv[1] = "--session";
|
||||
else
|
||||
argv[1] = "--system";
|
||||
argv[2] = NULL;
|
||||
|
||||
envp[0] = NULL;
|
||||
|
||||
printf("Starting D-Bus daemon\n");
|
||||
printf("Starting D-Bus %s daemon\n", bus_type);
|
||||
|
||||
pid = fork();
|
||||
if (pid < 0) {
|
||||
@ -445,13 +492,13 @@ static pid_t start_dbus_daemon(void)
|
||||
exit(EXIT_SUCCESS);
|
||||
}
|
||||
|
||||
printf("D-Bus daemon process %d created\n", pid);
|
||||
printf("D-Bus %s daemon process %d created\n", bus_type, pid);
|
||||
|
||||
for (i = 0; i < 20; i++) {
|
||||
struct stat st;
|
||||
|
||||
if (!stat("/run/dbus/system_bus_socket", &st)) {
|
||||
printf("Found D-Bus daemon socket\n");
|
||||
if (!stat(socket_path, &st)) {
|
||||
printf("Found D-Bus %s daemon socket\n", bus_type);
|
||||
return pid;
|
||||
}
|
||||
|
||||
@ -666,7 +713,8 @@ 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, emulator_pid;
|
||||
pid_t pid, dbus_pid, daemon_pid, monitor_pid, emulator_pid,
|
||||
dbus_session_pid;
|
||||
|
||||
if (num_devs) {
|
||||
const char *node = "/dev/ttyS1";
|
||||
@ -684,10 +732,16 @@ static void run_command(char *cmdname, char *home)
|
||||
|
||||
if (start_dbus) {
|
||||
create_dbus_system_conf();
|
||||
dbus_pid = start_dbus_daemon();
|
||||
dbus_pid = start_dbus_daemon(false);
|
||||
} else
|
||||
dbus_pid = -1;
|
||||
|
||||
if (start_dbus_session) {
|
||||
create_dbus_session_conf();
|
||||
dbus_session_pid = start_dbus_daemon(true);
|
||||
} else
|
||||
dbus_session_pid = -1;
|
||||
|
||||
if (start_daemon)
|
||||
daemon_pid = start_bluetooth_daemon(home);
|
||||
else
|
||||
@ -780,7 +834,12 @@ start_next:
|
||||
printf("Process %d continued\n", corpse);
|
||||
|
||||
if (corpse == dbus_pid) {
|
||||
printf("D-Bus daemon terminated\n");
|
||||
printf("D-Bus system daemon terminated\n");
|
||||
dbus_pid = -1;
|
||||
}
|
||||
|
||||
if (corpse == dbus_session_pid) {
|
||||
printf("D-Bus session daemon terminated\n");
|
||||
dbus_pid = -1;
|
||||
}
|
||||
|
||||
@ -814,6 +873,9 @@ start_next:
|
||||
if (dbus_pid > 0)
|
||||
kill(dbus_pid, SIGTERM);
|
||||
|
||||
if (dbus_session_pid > 0)
|
||||
kill(dbus_session_pid, SIGTERM);
|
||||
|
||||
if (emulator_pid > 0)
|
||||
kill(dbus_pid, SIGTERM);
|
||||
|
||||
@ -874,10 +936,16 @@ static void run_tests(void)
|
||||
|
||||
ptr = strstr(cmdline, "TESTDBUS=1");
|
||||
if (ptr) {
|
||||
printf("D-Bus daemon requested\n");
|
||||
printf("D-Bus system daemon requested\n");
|
||||
start_dbus = true;
|
||||
}
|
||||
|
||||
ptr = strstr(cmdline, "TESTDBUSSESSION=1");
|
||||
if (ptr) {
|
||||
printf("D-Bus session daemon requested\n");
|
||||
start_dbus_session = true;
|
||||
}
|
||||
|
||||
ptr = strstr(cmdline, "TESTDAEMON=1");
|
||||
if (ptr) {
|
||||
printf("bluetoothd requested\n");
|
||||
@ -914,7 +982,8 @@ static void usage(void)
|
||||
printf("\ttest-runner [options] [--] <command> [args]\n");
|
||||
printf("Options:\n"
|
||||
"\t-a, --auto Find tests and run them\n"
|
||||
"\t-b, --dbus Start D-Bus daemon\n"
|
||||
"\t-b, --dbus Start D-Bus system daemon\n"
|
||||
"\t-s, --dbus-session Start D-Bus session daemon\n"
|
||||
"\t-d, --daemon Start bluetoothd\n"
|
||||
"\t-m, --monitor Start btmon\n"
|
||||
"\t-l, --emulator Start btvirt\n"
|
||||
@ -928,6 +997,7 @@ static const struct option main_options[] = {
|
||||
{ "all", no_argument, NULL, 'a' },
|
||||
{ "auto", no_argument, NULL, 'a' },
|
||||
{ "dbus", no_argument, NULL, 'b' },
|
||||
{ "dbus-session", no_argument, NULL, 's' },
|
||||
{ "unix", no_argument, NULL, 'u' },
|
||||
{ "daemon", no_argument, NULL, 'd' },
|
||||
{ "emulator", no_argument, NULL, 'l' },
|
||||
@ -953,7 +1023,7 @@ int main(int argc, char *argv[])
|
||||
for (;;) {
|
||||
int opt;
|
||||
|
||||
opt = getopt_long(argc, argv, "aubdlmq:k:vh", main_options,
|
||||
opt = getopt_long(argc, argv, "aubdslmq:k:vh", main_options,
|
||||
NULL);
|
||||
if (opt < 0)
|
||||
break;
|
||||
@ -968,6 +1038,9 @@ int main(int argc, char *argv[])
|
||||
case 'b':
|
||||
start_dbus = true;
|
||||
break;
|
||||
case 's':
|
||||
start_dbus_session = true;
|
||||
break;
|
||||
case 'd':
|
||||
start_dbus = true;
|
||||
start_daemon = true;
|
||||
|
Loading…
Reference in New Issue
Block a user