diff mbox series

[BlueZ] test-runner: Add option to start emulator

Message ID 20220228232720.1614099-1-luiz.dentz@gmail.com
State New
Headers show
Series [BlueZ] test-runner: Add option to start emulator | expand

Commit Message

Luiz Augusto von Dentz Feb. 28, 2022, 11:27 p.m. UTC
From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>

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
---
 tools/test-runner.c | 86 ++++++++++++++++++++++++++++++++++++++++++---
 1 file changed, 82 insertions(+), 4 deletions(-)

Comments

bluez.test.bot@gmail.com March 1, 2022, 12:35 a.m. UTC | #1
This is automated email and please do not reply to this email!

Dear submitter,

Thank you for submitting the patches to the linux bluetooth mailing list.
This is a CI test results with your patch series:
PW Link:https://patchwork.kernel.org/project/bluetooth/list/?series=618913

---Test result---

Test Summary:
CheckPatch                    FAIL      1.54 seconds
GitLint                       PASS      1.05 seconds
Prep - Setup ELL              PASS      43.02 seconds
Build - Prep                  PASS      0.74 seconds
Build - Configure             PASS      8.82 seconds
Build - Make                  PASS      1440.03 seconds
Make Check                    PASS      11.46 seconds
Make Check w/Valgrind         PASS      446.11 seconds
Make Distcheck                PASS      231.77 seconds
Build w/ext ELL - Configure   PASS      8.81 seconds
Build w/ext ELL - Make        PASS      1433.12 seconds
Incremental Build with patchesPASS      0.00 seconds

Details
##############################
Test: CheckPatch - FAIL
Desc: Run checkpatch.pl script with rule in .checkpatch.conf
Output:
[BlueZ] test-runner: Add option to start emulator
ERROR:INITIALISED_STATIC: do not initialise statics to false
#98: FILE: tools/test-runner.c:50:
+static bool start_emulator = false;

WARNING:STATIC_CONST_CHAR_ARRAY: static const char * array should probably be static const char * const
#119: FILE: tools/test-runner.c:605:
+static const char *btvirt_table[] = {

/github/workspace/src/12763863.patch total: 1 errors, 1 warnings, 152 lines checked

NOTE: For some of the reported defects, checkpatch may be able to
      mechanically convert to the typical style using --fix or --fix-inplace.

/github/workspace/src/12763863.patch has style problems, please review.

NOTE: Ignored message types: COMMIT_MESSAGE COMPLEX_MACRO CONST_STRUCT FILE_PATH_CHANGES MISSING_SIGN_OFF PREFER_PACKED SPDX_LICENSE_TAG SPLIT_STRING SSCANF_TO_KSTRTO

NOTE: If any of the errors are false positives, please report
      them to the maintainer, see CHECKPATCH in MAINTAINERS.




---
Regards,
Linux Bluetooth
Luiz Augusto von Dentz March 2, 2022, 11:22 p.m. UTC | #2
Hi,

On Mon, Feb 28, 2022 at 4:35 PM <bluez.test.bot@gmail.com> wrote:
>
> This is automated email and please do not reply to this email!
>
> Dear submitter,
>
> Thank you for submitting the patches to the linux bluetooth mailing list.
> This is a CI test results with your patch series:
> PW Link:https://patchwork.kernel.org/project/bluetooth/list/?series=618913
>
> ---Test result---
>
> Test Summary:
> CheckPatch                    FAIL      1.54 seconds
> GitLint                       PASS      1.05 seconds
> Prep - Setup ELL              PASS      43.02 seconds
> Build - Prep                  PASS      0.74 seconds
> Build - Configure             PASS      8.82 seconds
> Build - Make                  PASS      1440.03 seconds
> Make Check                    PASS      11.46 seconds
> Make Check w/Valgrind         PASS      446.11 seconds
> Make Distcheck                PASS      231.77 seconds
> Build w/ext ELL - Configure   PASS      8.81 seconds
> Build w/ext ELL - Make        PASS      1433.12 seconds
> Incremental Build with patchesPASS      0.00 seconds
>
> Details
> ##############################
> Test: CheckPatch - FAIL
> Desc: Run checkpatch.pl script with rule in .checkpatch.conf
> Output:
> [BlueZ] test-runner: Add option to start emulator
> ERROR:INITIALISED_STATIC: do not initialise statics to false
> #98: FILE: tools/test-runner.c:50:
> +static bool start_emulator = false;
>
> WARNING:STATIC_CONST_CHAR_ARRAY: static const char * array should probably be static const char * const
> #119: FILE: tools/test-runner.c:605:
> +static const char *btvirt_table[] = {
>
> /github/workspace/src/12763863.patch total: 1 errors, 1 warnings, 152 lines checked
>
> NOTE: For some of the reported defects, checkpatch may be able to
>       mechanically convert to the typical style using --fix or --fix-inplace.
>
> /github/workspace/src/12763863.patch has style problems, please review.
>
> NOTE: Ignored message types: COMMIT_MESSAGE COMPLEX_MACRO CONST_STRUCT FILE_PATH_CHANGES MISSING_SIGN_OFF PREFER_PACKED SPDX_LICENSE_TAG SPLIT_STRING SSCANF_TO_KSTRTO
>
> NOTE: If any of the errors are false positives, please report
>       them to the maintainer, see CHECKPATCH in MAINTAINERS.
>
>
>
>
> ---
> Regards,
> Linux Bluetooth
>
Pushed.
diff mbox series

Patch

diff --git a/tools/test-runner.c b/tools/test-runner.c
index 71cc0d2df..e0e002dd6 100644
--- a/tools/test-runner.c
+++ b/tools/test-runner.c
@@ -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;