|
|
1.1 root 1: #include <glib.h>
2: #include "qemu-objects.h"
3: #include "test-qmp-commands.h"
4: #include "qapi/qmp-core.h"
5: #include "module.h"
6:
7: void qmp_user_def_cmd(Error **errp)
8: {
9: }
10:
11: void qmp_user_def_cmd1(UserDefOne * ud1, Error **errp)
12: {
13: }
14:
15: UserDefTwo * qmp_user_def_cmd2(UserDefOne * ud1a, UserDefOne * ud1b, Error **errp)
16: {
17: UserDefTwo *ret;
18: UserDefOne *ud1c = g_malloc0(sizeof(UserDefOne));
19: UserDefOne *ud1d = g_malloc0(sizeof(UserDefOne));
20:
21: ud1c->string = strdup(ud1a->string);
22: ud1c->integer = ud1a->integer;
23: ud1d->string = strdup(ud1b->string);
24: ud1d->integer = ud1b->integer;
25:
26: ret = g_malloc0(sizeof(UserDefTwo));
27: ret->string = strdup("blah1");
28: ret->dict.string = strdup("blah2");
29: ret->dict.dict.userdef = ud1c;
30: ret->dict.dict.string = strdup("blah3");
31: ret->dict.has_dict2 = true;
32: ret->dict.dict2.userdef = ud1d;
33: ret->dict.dict2.string = strdup("blah4");
34:
35: return ret;
36: }
37:
38: /* test commands with no input and no return value */
39: static void test_dispatch_cmd(void)
40: {
41: QDict *req = qdict_new();
42: QObject *resp;
43:
44: qdict_put_obj(req, "execute", QOBJECT(qstring_from_str("user_def_cmd")));
45:
46: resp = qmp_dispatch(QOBJECT(req));
47: assert(resp != NULL);
48: assert(!qdict_haskey(qobject_to_qdict(resp), "error"));
49:
50: qobject_decref(resp);
51: QDECREF(req);
52: }
53:
54: /* test commands that return an error due to invalid parameters */
55: static void test_dispatch_cmd_error(void)
56: {
57: QDict *req = qdict_new();
58: QObject *resp;
59:
60: qdict_put_obj(req, "execute", QOBJECT(qstring_from_str("user_def_cmd2")));
61:
62: resp = qmp_dispatch(QOBJECT(req));
63: assert(resp != NULL);
64: assert(qdict_haskey(qobject_to_qdict(resp), "error"));
65:
66: qobject_decref(resp);
67: QDECREF(req);
68: }
69:
70: /* test commands that involve both input parameters and return values */
71: static void test_dispatch_cmd_io(void)
72: {
73: QDict *req = qdict_new();
74: QDict *args = qdict_new();
75: QDict *ud1a = qdict_new();
76: QDict *ud1b = qdict_new();
77: QObject *resp;
78:
79: qdict_put_obj(ud1a, "integer", QOBJECT(qint_from_int(42)));
80: qdict_put_obj(ud1a, "string", QOBJECT(qstring_from_str("hello")));
81: qdict_put_obj(ud1b, "integer", QOBJECT(qint_from_int(422)));
82: qdict_put_obj(ud1b, "string", QOBJECT(qstring_from_str("hello2")));
83: qdict_put_obj(args, "ud1a", QOBJECT(ud1a));
84: qdict_put_obj(args, "ud1b", QOBJECT(ud1b));
85: qdict_put_obj(req, "arguments", QOBJECT(args));
86:
87: qdict_put_obj(req, "execute", QOBJECT(qstring_from_str("user_def_cmd2")));
88:
89: /* TODO: put in full payload and check for errors */
90: resp = qmp_dispatch(QOBJECT(req));
91: assert(resp != NULL);
92: assert(!qdict_haskey(qobject_to_qdict(resp), "error"));
93:
94: qobject_decref(resp);
95: QDECREF(req);
96: }
97:
98: /* test generated dealloc functions for generated types */
99: static void test_dealloc_types(void)
100: {
101: UserDefOne *ud1test, *ud1a, *ud1b;
102: UserDefOneList *ud1list;
103:
104: ud1test = g_malloc0(sizeof(UserDefOne));
105: ud1test->integer = 42;
106: ud1test->string = g_strdup("hi there 42");
107:
108: qapi_free_UserDefOne(ud1test);
109:
110: ud1a = g_malloc0(sizeof(UserDefOne));
111: ud1a->integer = 43;
112: ud1a->string = g_strdup("hi there 43");
113:
114: ud1b = g_malloc0(sizeof(UserDefOne));
115: ud1b->integer = 44;
116: ud1b->string = g_strdup("hi there 44");
117:
118: ud1list = g_malloc0(sizeof(UserDefOneList));
119: ud1list->value = ud1a;
120: ud1list->next = g_malloc0(sizeof(UserDefOneList));
121: ud1list->next->value = ud1b;
122:
123: qapi_free_UserDefOneList(ud1list);
124: }
125:
126: int main(int argc, char **argv)
127: {
128: g_test_init(&argc, &argv, NULL);
129:
130: g_test_add_func("/0.15/dispatch_cmd", test_dispatch_cmd);
131: g_test_add_func("/0.15/dispatch_cmd_error", test_dispatch_cmd_error);
132: g_test_add_func("/0.15/dispatch_cmd_io", test_dispatch_cmd_io);
133: g_test_add_func("/0.15/dealloc_types", test_dealloc_types);
134:
135: module_call_init(MODULE_INIT_QAPI);
136: g_test_run();
137:
138: return 0;
139: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.