iscsi: add missing coroutine_fn annotations
[qemu.git] / tests / qtest / readconfig-test.c
blobc7a9b0c7dd6a805b5c0192f0bf872cd15a73c317
1 /*
2 * Validate -readconfig
4 * Copyright (c) 2022 Red Hat, Inc.
6 * This work is licensed under the terms of the GNU GPL, version 2 or later.
7 * See the COPYING file in the top-level directory.
8 */
10 #include "qemu/osdep.h"
11 #include "libqtest.h"
12 #include "qapi/error.h"
13 #include "qapi/qapi-visit-machine.h"
14 #include "qapi/qapi-visit-qom.h"
15 #include "qapi/qapi-visit-ui.h"
16 #include "qapi/qmp/qdict.h"
17 #include "qapi/qmp/qlist.h"
18 #include "qapi/qobject-input-visitor.h"
19 #include "qapi/qmp/qstring.h"
20 #include "qemu/units.h"
22 static QTestState *qtest_init_with_config(const char *cfgdata)
24 GError *error = NULL;
25 g_autofree char *args = NULL;
26 int cfgfd = -1;
27 g_autofree char *cfgpath = NULL;
28 QTestState *qts;
29 ssize_t ret;
31 cfgfd = g_file_open_tmp("readconfig-test-XXXXXX", &cfgpath, &error);
32 g_assert_no_error(error);
33 g_assert_cmpint(cfgfd, >=, 0);
35 ret = qemu_write_full(cfgfd, cfgdata, strlen(cfgdata));
36 close(cfgfd);
37 if (ret < 0) {
38 unlink(cfgpath);
40 g_assert_cmpint(ret, ==, strlen(cfgdata));
42 args = g_strdup_printf("-nodefaults -machine none -readconfig %s", cfgpath);
44 qts = qtest_init(args);
46 unlink(cfgpath);
48 return qts;
51 static void test_x86_memdev_resp(QObject *res)
53 Visitor *v;
54 g_autoptr(MemdevList) memdevs = NULL;
55 Memdev *memdev;
57 g_assert(res);
58 v = qobject_input_visitor_new(res);
59 visit_type_MemdevList(v, NULL, &memdevs, &error_abort);
61 g_assert(memdevs);
62 g_assert(memdevs->value);
63 g_assert(!memdevs->next);
65 memdev = memdevs->value;
66 g_assert_cmpstr(memdev->id, ==, "ram");
67 g_assert_cmpint(memdev->size, ==, 200 * MiB);
69 visit_free(v);
72 static void test_x86_memdev(void)
74 QDict *resp;
75 QTestState *qts;
76 const char *cfgdata =
77 "[memory]\n"
78 "size = \"200\"";
80 qts = qtest_init_with_config(cfgdata);
81 /* Test valid command */
82 resp = qtest_qmp(qts, "{ 'execute': 'query-memdev' }");
83 test_x86_memdev_resp(qdict_get(resp, "return"));
84 qobject_unref(resp);
86 qtest_quit(qts);
90 #ifdef CONFIG_SPICE
91 static void test_spice_resp(QObject *res)
93 Visitor *v;
94 g_autoptr(SpiceInfo) spice = NULL;
96 g_assert(res);
97 v = qobject_input_visitor_new(res);
98 visit_type_SpiceInfo(v, "spice", &spice, &error_abort);
100 g_assert(spice);
101 g_assert(spice->enabled);
103 visit_free(v);
106 static void test_spice(void)
108 QDict *resp;
109 QTestState *qts;
110 const char *cfgdata =
111 "[spice]\n"
112 "disable-ticketing = \"on\"\n"
113 "unix = \"on\"\n";
115 qts = qtest_init_with_config(cfgdata);
116 /* Test valid command */
117 resp = qtest_qmp(qts, "{ 'execute': 'query-spice' }");
118 test_spice_resp(qdict_get(resp, "return"));
119 qobject_unref(resp);
121 qtest_quit(qts);
123 #endif
125 static void test_object_rng_resp(QObject *res)
127 Visitor *v;
128 g_autoptr(ObjectPropertyInfoList) objs = NULL;
129 ObjectPropertyInfoList *tmp;
130 ObjectPropertyInfo *obj;
131 bool seen_rng = false;
133 g_assert(res);
134 v = qobject_input_visitor_new(res);
135 visit_type_ObjectPropertyInfoList(v, NULL, &objs, &error_abort);
137 g_assert(objs);
138 tmp = objs;
139 while (tmp) {
140 g_assert(tmp->value);
142 obj = tmp->value;
143 if (g_str_equal(obj->name, "rng0") &&
144 g_str_equal(obj->type, "child<rng-builtin>")) {
145 seen_rng = true;
146 break;
149 tmp = tmp->next;
152 g_assert(seen_rng);
154 visit_free(v);
157 static void test_object_rng(void)
159 QDict *resp;
160 QTestState *qts;
161 const char *cfgdata =
162 "[object]\n"
163 "qom-type = \"rng-builtin\"\n"
164 "id = \"rng0\"\n";
166 qts = qtest_init_with_config(cfgdata);
167 /* Test valid command */
168 resp = qtest_qmp(qts,
169 "{ 'execute': 'qom-list',"
170 " 'arguments': {'path': '/objects' }}");
171 test_object_rng_resp(qdict_get(resp, "return"));
172 qobject_unref(resp);
174 qtest_quit(qts);
177 int main(int argc, char *argv[])
179 const char *arch;
180 g_test_init(&argc, &argv, NULL);
182 arch = qtest_get_arch();
184 if (g_str_equal(arch, "i386") ||
185 g_str_equal(arch, "x86_64")) {
186 qtest_add_func("readconfig/x86/memdev", test_x86_memdev);
188 #ifdef CONFIG_SPICE
189 qtest_add_func("readconfig/spice", test_spice);
190 #endif
192 qtest_add_func("readconfig/object-rng", test_object_rng);
194 return g_test_run();