summaryrefslogtreecommitdiffstats
path: root/tests/qtest/qom-test.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/qtest/qom-test.c')
-rw-r--r--tests/qtest/qom-test.c22
1 files changed, 19 insertions, 3 deletions
diff --git a/tests/qtest/qom-test.c b/tests/qtest/qom-test.c
index 7b871b2a31..13510bc349 100644
--- a/tests/qtest/qom-test.c
+++ b/tests/qtest/qom-test.c
@@ -20,6 +20,7 @@ static void test_properties(QTestState *qts, const char *path, bool recurse)
QDict *response, *tuple, *tmp;
QList *list;
QListEntry *entry;
+ GSList *children = NULL, *links = NULL;
g_test_message("Obtaining properties of %s", path);
response = qtest_qmp(qts, "{ 'execute': 'qom-list',"
@@ -41,11 +42,14 @@ static void test_properties(QTestState *qts, const char *path, bool recurse)
if (is_child || is_link) {
child_path = g_strdup_printf("%s/%s",
path, qdict_get_str(tuple, "name"));
- test_properties(qts, child_path, is_child);
- g_free(child_path);
+ if (is_child) {
+ children = g_slist_prepend(children, child_path);
+ } else {
+ links = g_slist_prepend(links, child_path);
+ }
} else {
const char *prop = qdict_get_str(tuple, "name");
- g_test_message("Testing property %s.%s", path, prop);
+ g_test_message("-> %s", prop);
tmp = qtest_qmp(qts,
"{ 'execute': 'qom-get',"
" 'arguments': { 'path': %s, 'property': %s } }",
@@ -55,6 +59,18 @@ static void test_properties(QTestState *qts, const char *path, bool recurse)
qobject_unref(tmp);
}
}
+
+ while (links) {
+ test_properties(qts, links->data, false);
+ g_free(links->data);
+ links = g_slist_delete_link(links, links);
+ }
+ while (children) {
+ test_properties(qts, children->data, true);
+ g_free(children->data);
+ children = g_slist_delete_link(children, children);
+ }
+
qobject_unref(response);
}