Skip to content

Commit

Permalink
tests/qtest: Allow qtest_get_machines to use an alternate QEMU binary
Browse files Browse the repository at this point in the history
We're adding support for using more than one QEMU binary in
tests. Modify qtest_get_machines() to take an environment variable
that contains the QEMU binary path.

Since the function keeps a cache of the machines list in the form of a
static variable, refresh it any time the environment variable changes.

Reviewed-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Fabiano Rosas <farosas@suse.de>
Signed-off-by: Juan Quintela <quintela@redhat.com>
Message-ID: <20231018192741.25885-4-farosas@suse.de>
  • Loading branch information
Fabiano Rosas authored and Juan Quintela committed Oct 20, 2023
1 parent 9931215 commit 41b2eba
Showing 1 changed file with 25 additions and 4 deletions.
29 changes: 25 additions & 4 deletions tests/qtest/libqtest.c
Original file line number Diff line number Diff line change
Expand Up @@ -1468,13 +1468,26 @@ struct MachInfo {
char *alias;
};

static void qtest_free_machine_list(struct MachInfo *machines)
{
if (machines) {
for (int i = 0; machines[i].name != NULL; i++) {
g_free(machines[i].name);
g_free(machines[i].alias);
}

g_free(machines);
}
}

/*
* Returns an array with pointers to the available machine names.
* The terminating entry has the name set to NULL.
*/
static struct MachInfo *qtest_get_machines(void)
static struct MachInfo *qtest_get_machines(const char *var)
{
static struct MachInfo *machines;
static char *qemu_var;
QDict *response, *minfo;
QList *list;
const QListEntry *p;
Expand All @@ -1483,11 +1496,19 @@ static struct MachInfo *qtest_get_machines(void)
QTestState *qts;
int idx;

if (g_strcmp0(qemu_var, var)) {
qemu_var = g_strdup(var);

/* new qemu, clear the cache */
qtest_free_machine_list(machines);
machines = NULL;
}

if (machines) {
return machines;
}

qts = qtest_init("-machine none");
qts = qtest_init_with_env(qemu_var, "-machine none");
response = qtest_qmp(qts, "{ 'execute': 'query-machines' }");
g_assert(response);
list = qdict_get_qlist(response, "return");
Expand Down Expand Up @@ -1528,7 +1549,7 @@ void qtest_cb_for_every_machine(void (*cb)(const char *machine),
struct MachInfo *machines;
int i;

machines = qtest_get_machines();
machines = qtest_get_machines(NULL);

for (i = 0; machines[i].name != NULL; i++) {
/* Ignore machines that cannot be used for qtests */
Expand All @@ -1549,7 +1570,7 @@ bool qtest_has_machine(const char *machine)
struct MachInfo *machines;
int i;

machines = qtest_get_machines();
machines = qtest_get_machines(NULL);

for (i = 0; machines[i].name != NULL; i++) {
if (g_str_equal(machine, machines[i].name) ||
Expand Down

0 comments on commit 41b2eba

Please sign in to comment.