tests/qtest/migration: Add --full option

Add a new command line option to allow selecting between running the
full set of tests or a smaller set of tests. The default will be to
run the small set (i.e. no comand line option provided) so we can
reduce the amount of tests run by default. Only hosts which support
KVM for the target architecture being tested will run the complete set
of tests.

Adjust the meson.build file to pass in the --full option when
appropriate.

(for now, set the option unconditionally until the next patch actually
creates the small set)

Use cases:

configure --target-list=aarch64-softmmu,ppc64-softmmu,s390x-softmmu,x86_64-softmmu

                        | before - 615s/244 tests  | after - 244s/100 tests
------------------------+--------------------------+-----------------------------
make check              | full set for all archs   | full set for the KVM arch,
make check-qtest        |                          | small set for the rest
                        |                          |
qemu-system-$ARCH       | full set for $ARCH       | small set for $ARCH, KVM or
./migration-test        |                          | TCG automatically chosen
                        |                          |
qemu-system-$ARCH       | N/A                      | full set for $ARCH, KVM or
./migration-test --full |                          | TCG automatically chosen
                        |                          |
migration-compat-x86_64 | full set for x86_64      | small set for x86_64
CI job                  |                          |
------------------------+--------------------------+-----------------------------

Signed-off-by: Fabiano Rosas <farosas@suse.de>
Reviewed-by: Peter Xu <peterx@redhat.com>
Message-Id: <20250130184012.5711-2-farosas@suse.de>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20250207153112.3939799-9-alex.bennee@linaro.org>
This commit is contained in:
Fabiano Rosas 2025-02-07 15:31:03 +00:00 committed by Alex Bennée
parent a08eac9761
commit bc2a1f1a45
10 changed files with 65 additions and 1 deletions

View file

@ -405,6 +405,8 @@ foreach dir : target_dirs
target_base = dir.split('-')[0]
qtest_emulator = emulators['qemu-system-' + target_base]
target_qtests = get_variable('qtests_' + target_base, []) + qtests_generic
has_kvm = ('CONFIG_KVM' in config_all_accel and host_os == 'linux'
and cpu == target_base and fs.exists('/dev/kvm'))
test_deps = roms
qtest_env = environment()
@ -438,11 +440,18 @@ foreach dir : target_dirs
test: executable(test, src, dependencies: deps)
}
endif
test_args = ['--tap', '-k']
if test == 'migration-test' and has_kvm
test_args += ['--full']
endif
test('qtest-@0@/@1@'.format(target_base, test),
qtest_executables[test],
depends: [test_deps, qtest_emulator, emulator_modules],
env: qtest_env,
args: ['--tap', '-k'],
args: test_args,
protocol: 'tap',
timeout: slow_qtests.get(test, 60),
priority: slow_qtests.get(test, 60),

View file

@ -14,13 +14,39 @@
#include "migration/framework.h"
#include "qemu/module.h"
static void parse_args(int *argc_p, char ***argv_p, bool *full_set)
{
int argc = *argc_p;
char **argv = *argv_p;
int i, j;
j = 1;
for (i = 1; i < argc; i++) {
if (g_str_equal(argv[i], "--full")) {
*full_set = true;
continue;
}
argv[j++] = argv[i];
if (i >= j) {
argv[i] = NULL;
}
}
*argc_p = j;
}
int main(int argc, char **argv)
{
MigrationTestEnv *env;
int ret;
bool full_set = false;
/* strip the --full option if it's present */
parse_args(&argc, &argv, &full_set);
g_test_init(&argc, &argv, NULL);
env = migration_get_env();
env->full_set = full_set;
env->full_set = true; /* temporary */
module_call_init(MODULE_INIT_QOM);
migration_test_add_tls(env);

View file

@ -155,6 +155,10 @@ void migration_test_add_compression(MigrationTestEnv *env)
{
tmpfs = env->tmpfs;
if (!env->full_set) {
return;
}
#ifdef CONFIG_ZSTD
migration_test_add("/migration/multifd/tcp/plain/zstd",
test_multifd_tcp_zstd);

View file

@ -104,6 +104,10 @@ void migration_test_add_cpr(MigrationTestEnv *env)
{
tmpfs = env->tmpfs;
if (!env->full_set) {
return;
}
/*
* Our CI system has problems with shared memory.
* Don't run this test until we find a workaround.

View file

@ -304,6 +304,10 @@ void migration_test_add_file(MigrationTestEnv *env)
{
tmpfs = env->tmpfs;
if (!env->full_set) {
return;
}
migration_test_add("/migration/precopy/file",
test_precopy_file);

View file

@ -24,6 +24,7 @@ typedef struct MigrationTestEnv {
bool uffd_feature_thread_id;
bool has_dirty_ring;
bool is_x86;
bool full_set;
const char *arch;
const char *qemu_src;
const char *qemu_dst;

View file

@ -262,6 +262,10 @@ void migration_test_add_misc(MigrationTestEnv *env)
{
tmpfs = env->tmpfs;
if (!env->full_set) {
return;
}
migration_test_add("/migration/bad_dest", test_baddest);
#ifndef _WIN32
migration_test_add("/migration/analyze-script", test_analyze_script);

View file

@ -81,6 +81,10 @@ static void test_postcopy_preempt_recovery(void)
void migration_test_add_postcopy(MigrationTestEnv *env)
{
if (!env->full_set) {
return;
}
if (env->has_uffd) {
migration_test_add("/migration/postcopy/plain", test_postcopy);
migration_test_add("/migration/postcopy/recovery/plain",

View file

@ -955,6 +955,10 @@ void migration_test_add_precopy(MigrationTestEnv *env)
{
tmpfs = env->tmpfs;
if (!env->full_set) {
return;
}
if (env->is_x86) {
migration_test_add("/migration/precopy/unix/suspend/live",
test_precopy_unix_suspend_live);

View file

@ -726,6 +726,10 @@ void migration_test_add_tls(MigrationTestEnv *env)
{
tmpfs = env->tmpfs;
if (!env->full_set) {
return;
}
migration_test_add("/migration/precopy/unix/tls/psk",
test_precopy_unix_tls_psk);