tests/qtest: failover: check migration with failover off
If failover is off, the primary device is not plugged and the migration is done only with the standby device. On destination, the primary device must not be plugged. Signed-off-by: Laurent Vivier <lvivier@redhat.com> Message-Id: <20220203141537.972317-6-lvivier@redhat.com> Signed-off-by: Thomas Huth <thuth@redhat.com>
This commit is contained in:
parent
78475083f7
commit
7f998491ae
@ -815,6 +815,135 @@ static void test_migrate_in(gconstpointer opaque)
|
||||
machine_stop(qts);
|
||||
}
|
||||
|
||||
static void test_off_migrate_out(gconstpointer opaque)
|
||||
{
|
||||
QTestState *qts;
|
||||
QDict *resp, *args, *ret;
|
||||
g_autofree gchar *uri = g_strdup_printf("exec: cat > %s", (gchar *)opaque);
|
||||
const gchar *status;
|
||||
QVirtioPCIDevice *vdev;
|
||||
|
||||
qts = machine_start(BASE_MACHINE
|
||||
"-netdev user,id=hs0 "
|
||||
"-netdev user,id=hs1 ",
|
||||
2);
|
||||
|
||||
check_one_card(qts, false, "standby0", MAC_STANDBY0);
|
||||
check_one_card(qts, false, "primary0", MAC_PRIMARY0);
|
||||
|
||||
qtest_qmp_device_add(qts, "virtio-net", "standby0",
|
||||
"{'bus': 'root0',"
|
||||
"'failover': 'off',"
|
||||
"'netdev': 'hs0',"
|
||||
"'mac': '"MAC_STANDBY0"'}");
|
||||
|
||||
check_one_card(qts, true, "standby0", MAC_STANDBY0);
|
||||
check_one_card(qts, false, "primary0", MAC_PRIMARY0);
|
||||
|
||||
qtest_qmp_device_add(qts, "virtio-net", "primary0",
|
||||
"{'bus': 'root1',"
|
||||
"'failover_pair_id': 'standby0',"
|
||||
"'netdev': 'hs1',"
|
||||
"'rombar': 0,"
|
||||
"'romfile': '',"
|
||||
"'mac': '"MAC_PRIMARY0"'}");
|
||||
|
||||
check_one_card(qts, true, "standby0", MAC_STANDBY0);
|
||||
check_one_card(qts, true, "primary0", MAC_PRIMARY0);
|
||||
|
||||
vdev = start_virtio_net(qts, 1, 0, "standby0", false);
|
||||
|
||||
check_one_card(qts, true, "standby0", MAC_STANDBY0);
|
||||
check_one_card(qts, true, "primary0", MAC_PRIMARY0);
|
||||
|
||||
args = qdict_from_jsonf_nofail("{}");
|
||||
g_assert_nonnull(args);
|
||||
qdict_put_str(args, "uri", uri);
|
||||
|
||||
resp = qtest_qmp(qts, "{ 'execute': 'migrate', 'arguments': %p}", args);
|
||||
g_assert(qdict_haskey(resp, "return"));
|
||||
qobject_unref(resp);
|
||||
|
||||
while (true) {
|
||||
ret = migrate_status(qts);
|
||||
|
||||
status = qdict_get_str(ret, "status");
|
||||
if (strcmp(status, "completed") == 0) {
|
||||
qobject_unref(ret);
|
||||
break;
|
||||
}
|
||||
g_assert_cmpstr(status, !=, "failed");
|
||||
g_assert_cmpstr(status, !=, "cancelling");
|
||||
g_assert_cmpstr(status, !=, "cancelled");
|
||||
qobject_unref(ret);
|
||||
}
|
||||
|
||||
qtest_qmp_eventwait(qts, "STOP");
|
||||
|
||||
qos_object_destroy((QOSGraphObject *)vdev);
|
||||
machine_stop(qts);
|
||||
}
|
||||
|
||||
static void test_off_migrate_in(gconstpointer opaque)
|
||||
{
|
||||
QTestState *qts;
|
||||
QDict *resp, *args, *ret;
|
||||
g_autofree gchar *uri = g_strdup_printf("exec: cat %s", (gchar *)opaque);
|
||||
|
||||
qts = machine_start(BASE_MACHINE
|
||||
"-netdev user,id=hs0 "
|
||||
"-netdev user,id=hs1 "
|
||||
"-incoming defer ",
|
||||
2);
|
||||
|
||||
check_one_card(qts, false, "standby0", MAC_STANDBY0);
|
||||
check_one_card(qts, false, "primary0", MAC_PRIMARY0);
|
||||
|
||||
qtest_qmp_device_add(qts, "virtio-net", "standby0",
|
||||
"{'bus': 'root0',"
|
||||
"'failover': 'off',"
|
||||
"'netdev': 'hs0',"
|
||||
"'mac': '"MAC_STANDBY0"'}");
|
||||
|
||||
check_one_card(qts, true, "standby0", MAC_STANDBY0);
|
||||
check_one_card(qts, false, "primary0", MAC_PRIMARY0);
|
||||
|
||||
qtest_qmp_device_add(qts, "virtio-net", "primary0",
|
||||
"{'bus': 'root1',"
|
||||
"'failover_pair_id': 'standby0',"
|
||||
"'netdev': 'hs1',"
|
||||
"'rombar': 0,"
|
||||
"'romfile': '',"
|
||||
"'mac': '"MAC_PRIMARY0"'}");
|
||||
|
||||
check_one_card(qts, true, "standby0", MAC_STANDBY0);
|
||||
check_one_card(qts, true, "primary0", MAC_PRIMARY0);
|
||||
|
||||
args = qdict_from_jsonf_nofail("{}");
|
||||
g_assert_nonnull(args);
|
||||
qdict_put_str(args, "uri", uri);
|
||||
|
||||
resp = qtest_qmp(qts, "{ 'execute': 'migrate-incoming', 'arguments': %p}",
|
||||
args);
|
||||
g_assert(qdict_haskey(resp, "return"));
|
||||
qobject_unref(resp);
|
||||
|
||||
resp = get_migration_event(qts);
|
||||
g_assert_cmpstr(qdict_get_str(resp, "status"), ==, "setup");
|
||||
qobject_unref(resp);
|
||||
|
||||
check_one_card(qts, true, "standby0", MAC_STANDBY0);
|
||||
check_one_card(qts, true, "primary0", MAC_PRIMARY0);
|
||||
|
||||
qtest_qmp_eventwait(qts, "RESUME");
|
||||
|
||||
ret = migrate_status(qts);
|
||||
g_assert_cmpstr(qdict_get_str(ret, "status"), ==, "completed");
|
||||
qobject_unref(ret);
|
||||
|
||||
machine_stop(qts);
|
||||
}
|
||||
|
||||
static void test_migrate_abort_wait_unplug(gconstpointer opaque)
|
||||
{
|
||||
QTestState *qts;
|
||||
@ -1398,6 +1527,10 @@ int main(int argc, char **argv)
|
||||
test_migrate_out);
|
||||
qtest_add_data_func("failover-virtio-net/migrate/on/in", tmpfile,
|
||||
test_migrate_in);
|
||||
qtest_add_data_func("failover-virtio-net/migrate/off/out", tmpfile,
|
||||
test_off_migrate_out);
|
||||
qtest_add_data_func("failover-virtio-net/migrate/off/in", tmpfile,
|
||||
test_off_migrate_in);
|
||||
qtest_add_data_func("failover-virtio-net/migrate/abort/wait-unplug",
|
||||
tmpfile, test_migrate_abort_wait_unplug);
|
||||
qtest_add_data_func("failover-virtio-net/migrate/abort/active", tmpfile,
|
||||
|
Loading…
x
Reference in New Issue
Block a user