summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorFrédéric Danis <frederic.danis@collabora.com>2022-06-10 18:38:20 +0200
committerLuiz Augusto von Dentz <luiz.von.dentz@intel.com>2022-06-13 11:03:40 -0700
commit91a48af52efb0751fab396b2b9026c9186b10b88 (patch)
tree22ded72b4bfd20289a9c4d8efa9b3617ec0eecaf /tools
parente20e7e0b05c7edb74255c9b092916ac5bb99c97f (diff)
downloadbluez-91a48af52efb0751fab396b2b9026c9186b10b88.tar.gz
test-runner: Add udevd and trigger events
Kernel events should have been managed so the audio card is accessible from PipeWire
Diffstat (limited to 'tools')
-rw-r--r--tools/test-runner.c83
1 files changed, 80 insertions, 3 deletions
diff --git a/tools/test-runner.c b/tools/test-runner.c
index bbbca5b5d..49fc21325 100644
--- a/tools/test-runner.c
+++ b/tools/test-runner.c
@@ -251,13 +251,14 @@ static void start_qemu(void)
"rootfstype=9p "
"rootflags=trans=virtio,version=9p2000.L "
"acpi=off pci=noacpi noapic quiet ro init=%s "
- "bluetooth.enable_ecred=1"
+ "bluetooth.enable_ecred=1 "
"TESTHOME=%s TESTDBUS=%u TESTDAEMON=%u "
"TESTDBUSSESSION=%u XDG_RUNTIME_DIR=/run/user/0 "
+ "TESTAUDIO=%u "
"TESTMONITOR=%u TESTEMULATOR=%u TESTDEVS=%d "
"TESTAUTO=%u TESTARGS=\'%s\'",
initcmd, cwd, start_dbus, start_daemon,
- start_dbus_session,
+ start_dbus_session, audio_support,
start_monitor, start_emulator, num_devs,
run_auto, testargs);
@@ -724,13 +725,70 @@ static pid_t start_btvirt(const char *home)
return pid;
}
+static void trigger_udev(void)
+{
+ char *argv[3], *envp[1];
+ pid_t pid;
+
+ argv[0] = "/bin/udevadm";
+ argv[1] = "trigger";
+ argv[2] = NULL;
+
+ envp[0] = NULL;
+
+ printf("Triggering udev events\n");
+
+ pid = fork();
+ if (pid < 0) {
+ perror("Failed to fork new process");
+ return;
+ }
+
+ if (pid == 0) {
+ execve(argv[0], argv, envp);
+ exit(EXIT_SUCCESS);
+ }
+
+ printf("udev trigger process %d created\n", pid);
+}
+
+static pid_t start_udevd(void)
+{
+ char *argv[2], *envp[1];
+ pid_t pid;
+
+ argv[0] = "/lib/systemd/systemd-udevd";
+ argv[1] = NULL;
+
+ envp[0] = NULL;
+
+ printf("Starting udevd daemon\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("udevd daemon process %d created\n", pid);
+
+ trigger_udev();
+
+ 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, emulator_pid,
- dbus_session_pid;
+ dbus_session_pid, udevd_pid;
if (num_devs) {
const char *node = "/dev/ttyS1";
@@ -746,6 +804,11 @@ static void run_command(char *cmdname, char *home)
} else
serial_fd = -1;
+ if (audio_support)
+ udevd_pid = start_udevd();
+ else
+ udevd_pid = -1;
+
if (start_dbus) {
create_dbus_system_conf();
dbus_pid = start_dbus_daemon(false);
@@ -874,6 +937,11 @@ start_next:
monitor_pid = -1;
}
+ if (corpse == udevd_pid) {
+ printf("udevd terminated\n");
+ udevd_pid = -1;
+ }
+
if (corpse == pid)
break;
}
@@ -898,6 +966,9 @@ start_next:
if (monitor_pid > 0)
kill(monitor_pid, SIGTERM);
+ if (udevd_pid > 0)
+ kill(udevd_pid, SIGTERM);
+
if (serial_fd >= 0) {
close(serial_fd);
serial_fd = -1;
@@ -980,6 +1051,12 @@ static void run_tests(void)
start_emulator = true;
}
+ ptr = strstr(cmdline, "TESTAUDIO=1");
+ if (ptr) {
+ printf("Audio support requested\n");
+ audio_support = true;
+ }
+
ptr = strstr(cmdline, "TESTHOME=");
if (ptr) {
home = ptr + 4;