aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaurent Vivier <lvivier@redhat.com>2022-03-29 14:42:59 +0200
committerPeter Maydell <peter.maydell@linaro.org>2022-03-29 16:40:05 +0100
commit6ae6a30ca579be81d5a4a0e2cbfe714d375e0560 (patch)
tree03c72cfe81a997415c3505f8ce9451d9161dbfdd
parent44064550d98a680e2ff55fdd783ac19d850ac8ca (diff)
downloadqemu-6ae6a30ca579be81d5a4a0e2cbfe714d375e0560.zip
qemu-6ae6a30ca579be81d5a4a0e2cbfe714d375e0560.tar.gz
qemu-6ae6a30ca579be81d5a4a0e2cbfe714d375e0560.tar.bz2
tests/qtest: failover: fix infinite loop
If the migration is over before we cancel it, we are waiting in a loop a state that never comes because the state is already "completed". To avoid an infinite loop, skip the test if the migration is "completed" before we were able to cancel it. Signed-off-by: Laurent Vivier <lvivier@redhat.com> Acked-by: Thomas Huth <thuth@redhat.com> Message-id: 20220329124259.355995-1-lvivier@redhat.com Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
-rw-r--r--tests/qtest/virtio-net-failover.c29
1 files changed, 25 insertions, 4 deletions
diff --git a/tests/qtest/virtio-net-failover.c b/tests/qtest/virtio-net-failover.c
index 80292ee..78811f1 100644
--- a/tests/qtest/virtio-net-failover.c
+++ b/tests/qtest/virtio-net-failover.c
@@ -1141,6 +1141,11 @@ static void test_migrate_guest_off_abort(gconstpointer opaque)
ret = migrate_status(qts);
status = qdict_get_str(ret, "status");
+ if (strcmp(status, "completed") == 0) {
+ g_test_skip("Failed to cancel the migration");
+ qobject_unref(ret);
+ goto out;
+ }
if (strcmp(status, "active") == 0) {
qobject_unref(ret);
break;
@@ -1155,8 +1160,12 @@ static void test_migrate_guest_off_abort(gconstpointer opaque)
while (true) {
ret = migrate_status(qts);
-
status = qdict_get_str(ret, "status");
+ if (strcmp(status, "completed") == 0) {
+ g_test_skip("Failed to cancel the migration");
+ qobject_unref(ret);
+ goto out;
+ }
if (strcmp(status, "cancelled") == 0) {
qobject_unref(ret);
break;
@@ -1169,6 +1178,7 @@ static void test_migrate_guest_off_abort(gconstpointer opaque)
check_one_card(qts, true, "standby0", MAC_STANDBY0);
check_one_card(qts, false, "primary0", MAC_PRIMARY0);
+out:
qos_object_destroy((QOSGraphObject *)vdev);
machine_stop(qts);
}
@@ -1251,8 +1261,7 @@ static void test_migrate_abort_wait_unplug(gconstpointer opaque)
qobject_unref(ret);
break;
}
- g_assert_cmpstr(status, !=, "failed");
- g_assert_cmpstr(status, !=, "active");
+ g_assert_cmpstr(status, ==, "cancelling");
qobject_unref(ret);
}
@@ -1324,11 +1333,11 @@ static void test_migrate_abort_active(gconstpointer opaque)
ret = migrate_status(qts);
status = qdict_get_str(ret, "status");
+ g_assert_cmpstr(status, !=, "failed");
if (strcmp(status, "wait-unplug") != 0) {
qobject_unref(ret);
break;
}
- g_assert_cmpstr(status, !=, "failed");
qobject_unref(ret);
}
@@ -1340,6 +1349,11 @@ static void test_migrate_abort_active(gconstpointer opaque)
ret = migrate_status(qts);
status = qdict_get_str(ret, "status");
+ if (strcmp(status, "completed") == 0) {
+ g_test_skip("Failed to cancel the migration");
+ qobject_unref(ret);
+ goto out;
+ }
if (strcmp(status, "cancelled") == 0) {
qobject_unref(ret);
break;
@@ -1352,6 +1366,7 @@ static void test_migrate_abort_active(gconstpointer opaque)
check_one_card(qts, true, "standby0", MAC_STANDBY0);
check_one_card(qts, true, "primary0", MAC_PRIMARY0);
+out:
qos_object_destroy((QOSGraphObject *)vdev);
machine_stop(qts);
}
@@ -1425,6 +1440,11 @@ static void test_migrate_off_abort(gconstpointer opaque)
ret = migrate_status(qts);
status = qdict_get_str(ret, "status");
+ if (strcmp(status, "completed") == 0) {
+ g_test_skip("Failed to cancel the migration");
+ qobject_unref(ret);
+ goto out;
+ }
if (strcmp(status, "cancelled") == 0) {
qobject_unref(ret);
break;
@@ -1437,6 +1457,7 @@ static void test_migrate_off_abort(gconstpointer opaque)
check_one_card(qts, true, "standby0", MAC_STANDBY0);
check_one_card(qts, true, "primary0", MAC_PRIMARY0);
+out:
qos_object_destroy((QOSGraphObject *)vdev);
machine_stop(qts);
}