[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 07/17] tests/qtest: Introduce qtest_init_with_env
From: |
Juan Quintela |
Subject: |
[PULL 07/17] tests/qtest: Introduce qtest_init_with_env |
Date: |
Fri, 20 Oct 2023 08:57:41 +0200 |
From: Fabiano Rosas <farosas@suse.de>
Add a version of qtest_init() that takes an environment variable
containing the path of the QEMU binary. This allows tests to use more
than one QEMU binary.
If no variable is provided or the environment variable does not exist,
that is not an error. Fallback to using QTEST_QEMU_BINARY.
Signed-off-by: Fabiano Rosas <farosas@suse.de>
Reviewed-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Juan Quintela <quintela@redhat.com>
Message-ID: <20231018192741.25885-3-farosas@suse.de>
---
tests/qtest/libqtest.h | 13 +++++++++++++
tests/qtest/libqtest.c | 26 +++++++++++++++++++-------
2 files changed, 32 insertions(+), 7 deletions(-)
diff --git a/tests/qtest/libqtest.h b/tests/qtest/libqtest.h
index 5fe3d13466..76fc195f1c 100644
--- a/tests/qtest/libqtest.h
+++ b/tests/qtest/libqtest.h
@@ -55,6 +55,19 @@ QTestState *qtest_vinitf(const char *fmt, va_list ap)
G_GNUC_PRINTF(1, 0);
*/
QTestState *qtest_init(const char *extra_args);
+/**
+ * qtest_init_with_env:
+ * @var: Environment variable from where to take the QEMU binary
+ * @extra_args: Other arguments to pass to QEMU. CAUTION: these
+ * arguments are subject to word splitting and shell evaluation.
+ *
+ * Like qtest_init(), but use a different environment variable for the
+ * QEMU binary.
+ *
+ * Returns: #QTestState instance.
+ */
+QTestState *qtest_init_with_env(const char *var, const char *extra_args);
+
/**
* qtest_init_without_qmp_handshake:
* @extra_args: other arguments to pass to QEMU. CAUTION: these
diff --git a/tests/qtest/libqtest.c b/tests/qtest/libqtest.c
index 03fa644663..9eebba8767 100644
--- a/tests/qtest/libqtest.c
+++ b/tests/qtest/libqtest.c
@@ -388,7 +388,8 @@ static pid_t qtest_create_process(char *cmd)
}
#endif /* _WIN32 */
-static QTestState *G_GNUC_PRINTF(1, 2) qtest_spawn_qemu(const char *fmt, ...)
+static QTestState *G_GNUC_PRINTF(2, 3) qtest_spawn_qemu(const char *qemu_bin,
+ const char *fmt, ...)
{
va_list ap;
QTestState *s = g_new0(QTestState, 1);
@@ -398,8 +399,7 @@ static QTestState *G_GNUC_PRINTF(1, 2)
qtest_spawn_qemu(const char *fmt, ...)
g_autoptr(GString) command = g_string_new("");
va_start(ap, fmt);
- g_string_append_printf(command, CMD_EXEC "%s %s",
- qtest_qemu_binary(NULL), tracearg);
+ g_string_append_printf(command, CMD_EXEC "%s %s", qemu_bin, tracearg);
g_string_append_vprintf(command, fmt, ap);
va_end(ap);
@@ -438,7 +438,8 @@ static QTestState *G_GNUC_PRINTF(1, 2)
qtest_spawn_qemu(const char *fmt, ...)
return s;
}
-QTestState *qtest_init_without_qmp_handshake(const char *extra_args)
+static QTestState *qtest_init_internal(const char *qemu_bin,
+ const char *extra_args)
{
QTestState *s;
int sock, qmpsock, i;
@@ -463,7 +464,8 @@ QTestState *qtest_init_without_qmp_handshake(const char
*extra_args)
sock = init_socket(socket_path);
qmpsock = init_socket(qmp_socket_path);
- s = qtest_spawn_qemu("-qtest unix:%s "
+ s = qtest_spawn_qemu(qemu_bin,
+ "-qtest unix:%s "
"-qtest-log %s "
"-chardev socket,path=%s,id=char0 "
"-mon chardev=char0,mode=control "
@@ -516,9 +518,14 @@ QTestState *qtest_init_without_qmp_handshake(const char
*extra_args)
return s;
}
-QTestState *qtest_init(const char *extra_args)
+QTestState *qtest_init_without_qmp_handshake(const char *extra_args)
{
- QTestState *s = qtest_init_without_qmp_handshake(extra_args);
+ return qtest_init_internal(qtest_qemu_binary(NULL), extra_args);
+}
+
+QTestState *qtest_init_with_env(const char *var, const char *extra_args)
+{
+ QTestState *s = qtest_init_internal(qtest_qemu_binary(var), extra_args);
QDict *greeting;
/* Read the QMP greeting and then do the handshake */
@@ -529,6 +536,11 @@ QTestState *qtest_init(const char *extra_args)
return s;
}
+QTestState *qtest_init(const char *extra_args)
+{
+ return qtest_init_with_env(NULL, extra_args);
+}
+
QTestState *qtest_vinitf(const char *fmt, va_list ap)
{
char *args = g_strdup_vprintf(fmt, ap);
--
2.41.0
- [PULL 00/17] Migration 20231020 patches, Juan Quintela, 2023/10/20
- [PULL 01/17] tests/qtest/migration-test: Disable the analyze-migration.py test on s390x, Juan Quintela, 2023/10/20
- [PULL 02/17] migration: simplify blockers, Juan Quintela, 2023/10/20
- [PULL 03/17] migration: Fix parse_ramblock() on overwritten retvals, Juan Quintela, 2023/10/20
- [PULL 05/17] migration/multifd: Stop checking p->quit in multifd_send_thread, Juan Quintela, 2023/10/20
- [PULL 06/17] tests/qtest: Allow qtest_qemu_binary to use a custom environment variable, Juan Quintela, 2023/10/20
- [PULL 04/17] migration: simplify notifiers, Juan Quintela, 2023/10/20
- [PULL 07/17] tests/qtest: Introduce qtest_init_with_env,
Juan Quintela <=
- [PULL 08/17] tests/qtest: Allow qtest_get_machines to use an alternate QEMU binary, Juan Quintela, 2023/10/20
- [PULL 09/17] tests/qtest: Introduce qtest_has_machine_with_env, Juan Quintela, 2023/10/20
- [PULL 11/17] tests/qtest/migration: Introduce find_common_machine_version, Juan Quintela, 2023/10/20
- [PULL 10/17] tests/qtest: Introduce qtest_resolve_machine_alias, Juan Quintela, 2023/10/20
- [PULL 12/17] tests/qtest/migration: Define a machine for all architectures, Juan Quintela, 2023/10/20
- [PULL 13/17] tests/qtest/migration: Specify the geometry of the bootsector, Juan Quintela, 2023/10/20
- [PULL 16/17] tests/qtest/migration: Allow user to specify a machine type, Juan Quintela, 2023/10/20
- [PULL 14/17] tests/qtest/migration: Set q35 as the default machine for x86_86, Juan Quintela, 2023/10/20
- [PULL 17/17] tests/qtest: Don't print messages from query instances, Juan Quintela, 2023/10/20
- [PULL 15/17] tests/qtest/migration: Support more than one QEMU binary, Juan Quintela, 2023/10/20