Message ID | 20231018140736.3618-11-farosas@suse.de |
---|---|
State | New |
Headers | show |
Series | tests/migration-test: Allow testing older machine types | expand |
Fabiano Rosas <farosas@suse.de> wrote: D> We have strict rules around migration compatibility between different > QEMU versions but no test to validate the migration state between > different binaries. > > Add infrastructure to allow running the migration tests with two > different QEMU binaries as migration source and destination. > > The code now recognizes two new environment variables > QTEST_QEMU_BINARY_SRC and QTEST_QEMU_BINARY_DST. In the absence of > either of them, the test will use the QTEST_QEMU_BINARY variable. If > both are missing then the tests are run with single binary as > previously. > > The machine type is selected automatically as the latest machine type > version that works with both binaries. > > Usage: > QTEST_QEMU_BINARY_SRC=../build-8.2.0/qemu-system-x86_64 \ > QTEST_QEMU_BINARY_DST=../build-8.1.0/qemu-system-x86_64 \ > ./tests/qtest/migration-test > > Reviewed-by: Juan Quintela <quintela@redhat.com> > Signed-off-by: Fabiano Rosas <farosas@suse.de> The test works for me. But I would really like to be able to specify the machine type for which I have to test. I.e. right now, we can test: qemu-8.2 <-> qemu-8.1 and it is going to use q35-8.1 But in the case that I want to test that two binaries with q35-8.0, there is no way to setup that. So basically what I need is QTEST_QEMU_MACHINE_TYPE var, and if that exist, just use that instead of the value of "machine" What do you think? Later, Juan.
Juan Quintela <quintela@redhat.com> writes: > Fabiano Rosas <farosas@suse.de> wrote: > D> We have strict rules around migration compatibility between different >> QEMU versions but no test to validate the migration state between >> different binaries. >> >> Add infrastructure to allow running the migration tests with two >> different QEMU binaries as migration source and destination. >> >> The code now recognizes two new environment variables >> QTEST_QEMU_BINARY_SRC and QTEST_QEMU_BINARY_DST. In the absence of >> either of them, the test will use the QTEST_QEMU_BINARY variable. If >> both are missing then the tests are run with single binary as >> previously. >> >> The machine type is selected automatically as the latest machine type >> version that works with both binaries. >> >> Usage: >> QTEST_QEMU_BINARY_SRC=../build-8.2.0/qemu-system-x86_64 \ >> QTEST_QEMU_BINARY_DST=../build-8.1.0/qemu-system-x86_64 \ >> ./tests/qtest/migration-test >> >> Reviewed-by: Juan Quintela <quintela@redhat.com> >> Signed-off-by: Fabiano Rosas <farosas@suse.de> > > The test works for me. But I would really like to be able to specify > the machine type for which I have to test. I.e. right now, we can test: > > qemu-8.2 <-> qemu-8.1 > > and it is going to use q35-8.1 > > But in the case that I want to test that two binaries with q35-8.0, > there is no way to setup that. Sorry, I didn't catch that you wanted to test versions other than the latest when you mentioned it the first time. > So basically what I need is > > QTEST_QEMU_MACHINE_TYPE var, and if that exist, just use that instead of > the value of "machine" > > What do you think? I don't see why not. I have to resend this series because I sent the wrong version by accident. I'll add the new var then.
Fabiano Rosas <farosas@suse.de> wrote: > Juan Quintela <quintela@redhat.com> writes: > >> Fabiano Rosas <farosas@suse.de> wrote: >> D> We have strict rules around migration compatibility between different >>> QEMU versions but no test to validate the migration state between >>> different binaries. >>> >>> Add infrastructure to allow running the migration tests with two >>> different QEMU binaries as migration source and destination. >>> >>> The code now recognizes two new environment variables >>> QTEST_QEMU_BINARY_SRC and QTEST_QEMU_BINARY_DST. In the absence of >>> either of them, the test will use the QTEST_QEMU_BINARY variable. If >>> both are missing then the tests are run with single binary as >>> previously. >>> >>> The machine type is selected automatically as the latest machine type >>> version that works with both binaries. >>> >>> Usage: >>> QTEST_QEMU_BINARY_SRC=../build-8.2.0/qemu-system-x86_64 \ >>> QTEST_QEMU_BINARY_DST=../build-8.1.0/qemu-system-x86_64 \ >>> ./tests/qtest/migration-test >>> >>> Reviewed-by: Juan Quintela <quintela@redhat.com> >>> Signed-off-by: Fabiano Rosas <farosas@suse.de> >> >> The test works for me. But I would really like to be able to specify >> the machine type for which I have to test. I.e. right now, we can test: >> >> qemu-8.2 <-> qemu-8.1 >> >> and it is going to use q35-8.1 >> >> But in the case that I want to test that two binaries with q35-8.0, >> there is no way to setup that. > > Sorry, I didn't catch that you wanted to test versions other than the > latest when you mentioned it the first time. > >> So basically what I need is >> >> QTEST_QEMU_MACHINE_TYPE var, and if that exist, just use that instead of >> the value of "machine" >> >> What do you think? > > I don't see why not. > > I have to resend this series because I sent the wrong version by > accident. I'll add the new var then. Thanks.
On Wed, Oct 18, 2023 at 11:07:35AM -0300, Fabiano Rosas wrote: > Usage: > QTEST_QEMU_BINARY_SRC=../build-8.2.0/qemu-system-x86_64 \ > QTEST_QEMU_BINARY_DST=../build-8.1.0/qemu-system-x86_64 \ > ./tests/qtest/migration-test Please also touch up this example when repost; I think it's not allowed now..
diff --git a/tests/qtest/migration-test.c b/tests/qtest/migration-test.c index 209e611061..11ac414e56 100644 --- a/tests/qtest/migration-test.c +++ b/tests/qtest/migration-test.c @@ -71,6 +71,8 @@ static bool got_dst_resume; #define QEMU_VM_FILE_MAGIC 0x5145564d #define FILE_TEST_FILENAME "migfile" #define FILE_TEST_OFFSET 0x1000 +#define QEMU_ENV_SRC "QTEST_QEMU_BINARY_SRC" +#define QEMU_ENV_DST "QTEST_QEMU_BINARY_DST" #if defined(__linux__) #include <sys/syscall.h> @@ -744,6 +746,7 @@ static int test_migrate_start(QTestState **from, QTestState **to, const char *arch = qtest_get_arch(); const char *memory_size; const char *machine; + g_autofree char *machine_type = NULL; if (args->use_shmem) { if (!g_file_test("/dev/shm", G_FILE_TEST_IS_DIR)) { @@ -821,6 +824,10 @@ static int test_migrate_start(QTestState **from, QTestState **to, kvm_opts = ",dirty-ring-size=4096"; } + machine_type = find_common_machine_version(machine, QEMU_ENV_SRC, + QEMU_ENV_DST); + g_test_message("Using machine type: %s", machine_type); + cmd_source = g_strdup_printf("-accel kvm%s -accel tcg " "-machine %s " "-name source,debug-threads=on " @@ -828,7 +835,7 @@ static int test_migrate_start(QTestState **from, QTestState **to, "-serial file:%s/src_serial " "%s %s %s %s %s", kvm_opts ? kvm_opts : "", - machine, + machine_type, memory_size, tmpfs, arch_opts ? arch_opts : "", arch_source ? arch_source : "", @@ -836,7 +843,7 @@ static int test_migrate_start(QTestState **from, QTestState **to, args->opts_source ? args->opts_source : "", ignore_stderr); if (!args->only_target) { - *from = qtest_init(cmd_source); + *from = qtest_init_with_env(QEMU_ENV_SRC, cmd_source); qtest_qmp_set_event_callback(*from, migrate_watch_for_stop, &got_src_stop); @@ -850,14 +857,14 @@ static int test_migrate_start(QTestState **from, QTestState **to, "-incoming %s " "%s %s %s %s %s", kvm_opts ? kvm_opts : "", - machine, + machine_type, memory_size, tmpfs, uri, arch_opts ? arch_opts : "", arch_target ? arch_target : "", shmem_opts ? shmem_opts : "", args->opts_target ? args->opts_target : "", ignore_stderr); - *to = qtest_init(cmd_target); + *to = qtest_init_with_env(QEMU_ENV_DST, cmd_target); qtest_qmp_set_event_callback(*to, migrate_watch_for_resume, &got_dst_resume); @@ -2988,10 +2995,23 @@ int main(int argc, char **argv) bool has_uffd; const char *arch; g_autoptr(GError) err = NULL; + const char *qemu_src = getenv(QEMU_ENV_SRC); + const char *qemu_dst = getenv(QEMU_ENV_DST); int ret; g_test_init(&argc, &argv, NULL); + /* + * The default QTEST_QEMU_BINARY must always be provided because + * that is what helpers use to query the accel type and + * architecture. + */ + if (qemu_src && qemu_dst) { + g_test_message("Only one of %s, %s is allowed", + QEMU_ENV_SRC, QEMU_ENV_DST); + exit(1); + } + has_kvm = qtest_has_accel("kvm"); has_tcg = qtest_has_accel("tcg");