tests/qtest: failover: migration abort test with failover off
Test abort during active migration when failover is disabled from QEMU or from guest side. Signed-off-by: Laurent Vivier <lvivier@redhat.com> Message-Id: <20220203141537.972317-8-lvivier@redhat.com> Signed-off-by: Thomas Huth <thuth@redhat.com>
This commit is contained in:
parent
d9872c00f7
commit
e20977b797
@ -1082,6 +1082,97 @@ static void test_guest_off_migrate_in(gconstpointer opaque)
|
||||
machine_stop(qts);
|
||||
}
|
||||
|
||||
static void test_migrate_guest_off_abort(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;
|
||||
uint64_t features;
|
||||
|
||||
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': 'on',"
|
||||
"'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, false, "primary0", MAC_PRIMARY0);
|
||||
|
||||
features = ~(QVIRTIO_F_BAD_FEATURE |
|
||||
(1ull << VIRTIO_RING_F_INDIRECT_DESC) |
|
||||
(1ull << VIRTIO_RING_F_EVENT_IDX) |
|
||||
(1ull << VIRTIO_NET_F_STANDBY));
|
||||
|
||||
vdev = start_virtio_net_internal(qts, 1, 0, &features);
|
||||
|
||||
check_one_card(qts, true, "standby0", MAC_STANDBY0);
|
||||
check_one_card(qts, false, "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, "active") == 0) {
|
||||
qobject_unref(ret);
|
||||
break;
|
||||
}
|
||||
g_assert_cmpstr(status, !=, "failed");
|
||||
qobject_unref(ret);
|
||||
}
|
||||
|
||||
resp = qtest_qmp(qts, "{ 'execute': 'migrate_cancel' }");
|
||||
g_assert(qdict_haskey(resp, "return"));
|
||||
qobject_unref(resp);
|
||||
|
||||
while (true) {
|
||||
ret = migrate_status(qts);
|
||||
|
||||
status = qdict_get_str(ret, "status");
|
||||
if (strcmp(status, "cancelled") == 0) {
|
||||
qobject_unref(ret);
|
||||
break;
|
||||
}
|
||||
g_assert_cmpstr(status, !=, "failed");
|
||||
g_assert_cmpstr(status, !=, "active");
|
||||
qobject_unref(ret);
|
||||
}
|
||||
|
||||
check_one_card(qts, true, "standby0", MAC_STANDBY0);
|
||||
check_one_card(qts, false, "primary0", MAC_PRIMARY0);
|
||||
|
||||
qos_object_destroy((QOSGraphObject *)vdev);
|
||||
machine_stop(qts);
|
||||
}
|
||||
|
||||
static void test_migrate_abort_wait_unplug(gconstpointer opaque)
|
||||
{
|
||||
QTestState *qts;
|
||||
@ -1265,6 +1356,91 @@ static void test_migrate_abort_active(gconstpointer opaque)
|
||||
machine_stop(qts);
|
||||
}
|
||||
|
||||
static void test_migrate_off_abort(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);
|
||||
|
||||
vdev = start_virtio_net(qts, 1, 0, "standby0", false);
|
||||
|
||||
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', '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, "active") == 0) {
|
||||
qobject_unref(ret);
|
||||
break;
|
||||
}
|
||||
g_assert_cmpstr(status, !=, "failed");
|
||||
qobject_unref(ret);
|
||||
}
|
||||
|
||||
resp = qtest_qmp(qts, "{ 'execute': 'migrate_cancel' }");
|
||||
g_assert(qdict_haskey(resp, "return"));
|
||||
qobject_unref(resp);
|
||||
|
||||
while (true) {
|
||||
ret = migrate_status(qts);
|
||||
|
||||
status = qdict_get_str(ret, "status");
|
||||
if (strcmp(status, "cancelled") == 0) {
|
||||
qobject_unref(ret);
|
||||
break;
|
||||
}
|
||||
g_assert_cmpstr(status, !=, "failed");
|
||||
g_assert_cmpstr(status, !=, "active");
|
||||
qobject_unref(ret);
|
||||
}
|
||||
|
||||
check_one_card(qts, true, "standby0", MAC_STANDBY0);
|
||||
check_one_card(qts, true, "primary0", MAC_PRIMARY0);
|
||||
|
||||
qos_object_destroy((QOSGraphObject *)vdev);
|
||||
machine_stop(qts);
|
||||
}
|
||||
|
||||
static void test_migrate_abort_timeout(gconstpointer opaque)
|
||||
{
|
||||
QTestState *qts;
|
||||
@ -1669,10 +1845,14 @@ int main(int argc, char **argv)
|
||||
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/off/abort", tmpfile,
|
||||
test_migrate_off_abort);
|
||||
qtest_add_data_func("failover-virtio-net/migrate/guest_off/out", tmpfile,
|
||||
test_guest_off_migrate_out);
|
||||
qtest_add_data_func("failover-virtio-net/migrate/guest_off/in", tmpfile,
|
||||
test_guest_off_migrate_in);
|
||||
qtest_add_data_func("failover-virtio-net/migrate/guest_off/abort", tmpfile,
|
||||
test_migrate_guest_off_abort);
|
||||
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…
Reference in New Issue
Block a user