Skip to content

Commit

Permalink
tests: introduce migrate_query*() helpers
Browse files Browse the repository at this point in the history
Introduce helpers to query migration states and use it.

Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Reviewed-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: Balamuruhan S <bala24@linux.vnet.ibm.com>
Signed-off-by: Peter Xu <peterx@redhat.com>
Message-Id: <20180710091902.28780-8-peterx@redhat.com>
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
  • Loading branch information
xzpeter authored and dagrh committed Jul 10, 2018
1 parent 7e1d742 commit 2f7074c
Showing 1 changed file with 43 additions and 21 deletions.
64 changes: 43 additions & 21 deletions tests/migration-test.c
Expand Up @@ -168,6 +168,37 @@ static QDict *wait_command(QTestState *who, const char *command)
return response;
}

/*
* Note: caller is responsible to free the returned object via
* qobject_unref() after use
*/
static QDict *migrate_query(QTestState *who)
{
QDict *rsp, *rsp_return;

rsp = wait_command(who, "{ 'execute': 'query-migrate' }");
rsp_return = qdict_get_qdict(rsp, "return");
g_assert(rsp_return);
qobject_ref(rsp_return);
qobject_unref(rsp);

return rsp_return;
}

/*
* Note: caller is responsible to free the returned object via
* g_free() after use
*/
static gchar *migrate_query_status(QTestState *who)
{
QDict *rsp_return = migrate_query(who);
gchar *status = g_strdup(qdict_get_str(rsp_return, "status"));

g_assert(status);
qobject_unref(rsp_return);

return status;
}

/*
* It's tricky to use qemu's migration event capability with qtest,
Expand All @@ -176,45 +207,40 @@ static QDict *wait_command(QTestState *who, const char *command)

static uint64_t get_migration_pass(QTestState *who)
{
QDict *rsp, *rsp_return, *rsp_ram;
QDict *rsp_return, *rsp_ram;
uint64_t result;

rsp = wait_command(who, "{ 'execute': 'query-migrate' }");
rsp_return = qdict_get_qdict(rsp, "return");
rsp_return = migrate_query(who);
if (!qdict_haskey(rsp_return, "ram")) {
/* Still in setup */
result = 0;
} else {
rsp_ram = qdict_get_qdict(rsp_return, "ram");
result = qdict_get_try_int(rsp_ram, "dirty-sync-count", 0);
}
qobject_unref(rsp);
qobject_unref(rsp_return);
return result;
}

static void read_blocktime(QTestState *who)
{
QDict *rsp, *rsp_return;
QDict *rsp_return;

rsp = wait_command(who, "{ 'execute': 'query-migrate' }");
rsp_return = qdict_get_qdict(rsp, "return");
rsp_return = migrate_query(who);
g_assert(qdict_haskey(rsp_return, "postcopy-blocktime"));
qobject_unref(rsp);
qobject_unref(rsp_return);
}

static void wait_for_migration_complete(QTestState *who)
{
while (true) {
QDict *rsp, *rsp_return;
bool completed;
const char *status;
char *status;

rsp = wait_command(who, "{ 'execute': 'query-migrate' }");
rsp_return = qdict_get_qdict(rsp, "return");
status = qdict_get_str(rsp_return, "status");
status = migrate_query_status(who);
completed = strcmp(status, "completed") == 0;
g_assert_cmpstr(status, !=, "failed");
qobject_unref(rsp);
g_free(status);
if (completed) {
return;
}
Expand Down Expand Up @@ -580,22 +606,18 @@ static void test_baddest(void)
{
QTestState *from, *to;
QDict *rsp, *rsp_return;
const char *status;
char *status;
bool failed;

if (test_migrate_start(&from, &to, "tcp:0:0", true)) {
return;
}
migrate(from, "tcp:0:0", NULL);
do {
rsp = wait_command(from, "{ 'execute': 'query-migrate' }");
rsp_return = qdict_get_qdict(rsp, "return");

status = qdict_get_str(rsp_return, "status");

status = migrate_query_status(from);
g_assert(!strcmp(status, "setup") || !(strcmp(status, "failed")));
failed = !strcmp(status, "failed");
qobject_unref(rsp);
g_free(status);
} while (!failed);

/* Is the machine currently running? */
Expand Down

0 comments on commit 2f7074c

Please sign in to comment.