diff mbox series

[BlueZ,v2,3/3] test-runner: Add udevd and trigger events

Message ID 20220610072850.16593-4-frederic.danis@collabora.com (mailing list archive)
State Superseded
Headers show
Series test-runner: Add support for audio daemons | expand

Checks

Context Check Description
tedd_an/pre-ci_am success Success
tedd_an/checkpatch success Checkpatch PASS
tedd_an/gitlint success Gitlint PASS

Commit Message

Frédéric Danis June 10, 2022, 7:28 a.m. UTC
Kernel events should have been managed so the audio card is accessible
from PipeWire
---
 tools/test-runner.c | 83 +++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 80 insertions(+), 3 deletions(-)

Comments

Luiz Augusto von Dentz June 10, 2022, 3:50 p.m. UTC | #1
Hi Frédéric,

On Fri, Jun 10, 2022 at 12:30 AM Frédéric Danis
<frederic.danis@collabora.com> wrote:
>
> Kernel events should have been managed so the audio card is accessible
> from PipeWire
> ---
>  tools/test-runner.c | 83 +++++++++++++++++++++++++++++++++++++++++++--
>  1 file changed, 80 insertions(+), 3 deletions(-)
>
> diff --git a/tools/test-runner.c b/tools/test-runner.c
> index bbbca5b5d..e79e3b6e9 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 "
> +                               "AUDIO_SUPPORT=%u "

Lets name these TESTAUDIO instead of AUDIO_SUPPORT so it is consistent
with the other parameters like it.

>                                 "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, "AUDIO_SUPPORT=1");
> +       if (ptr) {
> +               printf("Audio support requested\n");
> +               audio_support = true;
> +       }
> +
>         ptr = strstr(cmdline, "TESTHOME=");
>         if (ptr) {
>                 home = ptr + 4;
> --
> 2.25.1
>
diff mbox series

Patch

diff --git a/tools/test-runner.c b/tools/test-runner.c
index bbbca5b5d..e79e3b6e9 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 "
+				"AUDIO_SUPPORT=%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, "AUDIO_SUPPORT=1");
+	if (ptr) {
+		printf("Audio support requested\n");
+		audio_support = true;
+	}
+
 	ptr = strstr(cmdline, "TESTHOME=");
 	if (ptr) {
 		home = ptr + 4;