static void deprecated_set_speed(QTestState *who, const char *value) { QDict *rsp; gchar *cmd; cmd = g_strdup_printf("{ 'execute': 'migrate_set_speed'," "'arguments': { 'value': %s } }", value); rsp = qtest_qmp(who, cmd); g_free(cmd); g_assert(qdict_haskey(rsp, "return")); qobject_unref(rsp); migrate_check_parameter(who, "max-bandwidth", value); }
static void migrate(QTestState *who, const char *uri) { QDict *rsp; gchar *cmd; cmd = g_strdup_printf("{ 'execute': 'migrate'," "'arguments': { 'uri': '%s' } }", uri); rsp = qtest_qmp(who, cmd); g_free(cmd); g_assert(qdict_haskey(rsp, "return")); qobject_unref(rsp); }
void qpci_unplug_acpi_device_test(QTestState *qts, const char *id, uint8_t slot) { QDict *response; response = qtest_qmp(qts, "{'execute': 'device_del'," " 'arguments': {'id': %s}}", id); g_assert(response); g_assert(!qdict_haskey(response, "error")); qobject_unref(response); qtest_outb(qts, ACPI_PCIHP_ADDR + PCI_EJ_BASE, 1 << slot); qtest_qmp_eventwait(qts, "DEVICE_DELETED"); }
static void migrate_set_parameter(QTestState *who, const char *parameter, const char *value) { QDict *rsp; gchar *cmd; cmd = g_strdup_printf("{ 'execute': 'migrate-set-parameters'," "'arguments': { '%s': %s } }", parameter, value); rsp = qtest_qmp(who, cmd); g_free(cmd); g_assert(qdict_haskey(rsp, "return")); qobject_unref(rsp); migrate_check_parameter(who, parameter, value); }
static void migrate_set_capability(QTestState *who, const char *capability, const char *value) { QDict *rsp; gchar *cmd; cmd = g_strdup_printf("{ 'execute': 'migrate-set-capabilities'," "'arguments': { " "'capabilities': [ { " "'capability': '%s', 'state': %s } ] } }", capability, value); rsp = qtest_qmp(who, cmd); g_free(cmd); g_assert(qdict_haskey(rsp, "return")); qobject_unref(rsp); }
static void deprecated_set_downtime(QTestState *who, const double value) { QDict *rsp; gchar *cmd; char *expected; int64_t result_int; cmd = g_strdup_printf("{ 'execute': 'migrate_set_downtime'," "'arguments': { 'value': %g } }", value); rsp = qtest_qmp(who, cmd); g_free(cmd); g_assert(qdict_haskey(rsp, "return")); qobject_unref(rsp); result_int = value * 1000L; expected = g_strdup_printf("%" PRId64, result_int); migrate_check_parameter(who, "downtime-limit", expected); g_free(expected); }
/* * Events can get in the way of responses we are actually waiting for. */ static QDict *wait_command(QTestState *who, const char *command) { const char *event_string; QDict *response; response = qtest_qmp(who, command); while (qdict_haskey(response, "event")) { /* OK, it was an event */ event_string = qdict_get_str(response, "event"); if (!strcmp(event_string, "STOP")) { got_stop = true; } qobject_unref(response); response = qtest_qmp_receive(who); } return response; }
void migrate(QOSState *from, QOSState *to, const char *uri) { const char *st; QDict *rsp, *sub; bool running; set_context(from); /* Is the machine currently running? */ rsp = qmp_execute(from->qts, "query-status"); g_assert(qdict_haskey(rsp, "return")); sub = qdict_get_qdict(rsp, "return"); g_assert(qdict_haskey(sub, "running")); running = qdict_get_bool(sub, "running"); qobject_unref(rsp); /* Issue the migrate command. */ rsp = qtest_qmp(from->qts, "{ 'execute': 'migrate', 'arguments': { 'uri': %s }}", uri); g_assert(qdict_haskey(rsp, "return")); qobject_unref(rsp); /* Wait for STOP event, but only if we were running: */ if (running) { qtest_qmp_eventwait(from->qts, "STOP"); } /* If we were running, we can wait for an event. */ if (running) { migrate_allocator(from->alloc, to->alloc); set_context(to); qtest_qmp_eventwait(to->qts, "RESUME"); return; } /* Otherwise, we need to wait: poll until migration is completed. */ while (1) { rsp = qmp_execute(from->qts, "query-migrate"); g_assert(qdict_haskey(rsp, "return")); sub = qdict_get_qdict(rsp, "return"); g_assert(qdict_haskey(sub, "status")); st = qdict_get_str(sub, "status"); /* "setup", "active", "completed", "failed", "cancelled" */ if (strcmp(st, "completed") == 0) { qobject_unref(rsp); break; } if ((strcmp(st, "setup") == 0) || (strcmp(st, "active") == 0)) { qobject_unref(rsp); g_usleep(5000); continue; } fprintf(stderr, "Migration did not complete, status: %s\n", st); g_assert_not_reached(); } migrate_allocator(from->alloc, to->alloc); set_context(to); }
static QDict *qmp_execute(QTestState *qts, const char *command) { return qtest_qmp(qts, "{ 'execute': %s }", command); }