Hao Xiang <[email protected]> writes:
> * Add test case to start and complete multifd live migration with DSA
> offloading enabled.
> * Add test case to start and cancel multifd live migration with DSA
> offloading enabled.
>
> Signed-off-by: Bryan Zhang <[email protected]>
> Signed-off-by: Hao Xiang <[email protected]>
> ---
> tests/qtest/migration-test.c | 66 +++++++++++++++++++++++++++++++++++-
> 1 file changed, 65 insertions(+), 1 deletion(-)
>
> diff --git a/tests/qtest/migration-test.c b/tests/qtest/migration-test.c
> index 8eb2053dbb..f22d39e72e 100644
> --- a/tests/qtest/migration-test.c
> +++ b/tests/qtest/migration-test.c
> @@ -631,6 +631,12 @@ typedef struct {
> const char *opts_target;
> } MigrateStart;
>
> +/*
> + * It requires separate steps to configure and enable DSA device.
> + * This test assumes that the configuration is done already.
> + */
> +static const char* dsa_dev_path = "/dev/dsa/wq4.0";
Hmm, this is tricky. No developer is going to have this setup neither
will our CI. So it might be that this test just sits there and never
gets executed. I have to think more about this.
Nonetheless, you should check that the file exists and skip the test if
it doesn't.
> +
> /*
> * A hook that runs after the src and dst QEMUs have been
> * created, but before the migration is started. This can
> @@ -2431,7 +2437,7 @@ static void
> test_multifd_tcp_tls_x509_reject_anon_client(void)
> *
> * And see that it works
> */
> -static void test_multifd_tcp_cancel(void)
> +static void test_multifd_tcp_cancel_common(bool use_dsa)
> {
> MigrateStart args = {
> .hide_stderr = true,
> @@ -2452,6 +2458,10 @@ static void test_multifd_tcp_cancel(void)
> migrate_set_capability(from, "multifd", true);
> migrate_set_capability(to, "multifd", true);
>
> + if (use_dsa) {
> + migrate_set_parameter_str(from, "multifd-dsa-accel", dsa_dev_path);
> + }
> +
> /* Start incoming migration from the 1st socket */
> migrate_incoming_qmp(to, "tcp:127.0.0.1:0", "{}");
>
> @@ -2508,6 +2518,48 @@ static void test_multifd_tcp_cancel(void)
> test_migrate_end(from, to2, true);
> }
>
> +/*
> + * This test does:
> + * source target
> + * migrate_incoming
> + * migrate
> + * migrate_cancel
> + * launch another target
> + * migrate
> + *
> + * And see that it works
> + */
> +static void test_multifd_tcp_cancel(void)
> +{
> + test_multifd_tcp_cancel_common(false);
> +}
> +
> +#ifdef CONFIG_DSA_OPT
> +
> +static void *test_migrate_precopy_tcp_multifd_start_dsa(QTestState *from,
> + QTestState *to)
> +{
> + migrate_set_parameter_str(from, "multifd-dsa-accel", dsa_dev_path);
> + return test_migrate_precopy_tcp_multifd_start_common(from, to, "none");
> +}
> +
> +static void test_multifd_tcp_none_dsa(void)
> +{
> + MigrateCommon args = {
> + .listen_uri = "defer",
> + .start_hook = test_migrate_precopy_tcp_multifd_start_dsa,
> + };
> +
> + test_precopy_common(&args);
> +}
> +
> +static void test_multifd_tcp_cancel_dsa(void)
> +{
> + test_multifd_tcp_cancel_common(true);
> +}
> +
> +#endif
> +
> static void calc_dirty_rate(QTestState *who, uint64_t calc_time)
> {
> qtest_qmp_assert_success(who,
> @@ -2921,6 +2973,18 @@ int main(int argc, char **argv)
> }
> qtest_add_func("/migration/multifd/tcp/plain/none",
> test_multifd_tcp_none);
> +
> +#ifdef CONFIG_DSA_OPT
> + if (g_str_equal(arch, "x86_64")) {
> + qtest_add_func("/migration/multifd/tcp/plain/none/dsa",
> + test_multifd_tcp_none_dsa);
> + }
> + if (getenv("QEMU_TEST_FLAKY_TESTS")) {
It's safe to not use FLAKY here. This test already requires special
setup.
We have also fixed the cancel test a while back. We will remove the
flaky tag from it soon.