|
|
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.