xref: /qemu/tests/unit/test-qapi-util.c (revision 069b64e3fe75c81edef6685c9941a7937a48fec4)
16c873d11SMarkus Armbruster /*
26c873d11SMarkus Armbruster  * Unit tests for QAPI utility functions
36c873d11SMarkus Armbruster  *
46c873d11SMarkus Armbruster  * Copyright (C) 2017 Red Hat Inc.
56c873d11SMarkus Armbruster  *
66c873d11SMarkus Armbruster  * Authors:
76c873d11SMarkus Armbruster  *  Markus Armbruster <armbru@redhat.com>,
86c873d11SMarkus Armbruster  *
96c873d11SMarkus Armbruster  * This work is licensed under the terms of the GNU GPL, version 2 or later.
106c873d11SMarkus Armbruster  * See the COPYING file in the top-level directory.
116c873d11SMarkus Armbruster  */
126c873d11SMarkus Armbruster 
136c873d11SMarkus Armbruster #include "qemu/osdep.h"
146c873d11SMarkus Armbruster #include "qapi/error.h"
156c873d11SMarkus Armbruster #include "qapi/util.h"
166c873d11SMarkus Armbruster #include "test-qapi-types.h"
176c873d11SMarkus Armbruster 
186c873d11SMarkus Armbruster static void test_qapi_enum_parse(void)
196c873d11SMarkus Armbruster {
206c873d11SMarkus Armbruster     Error *err = NULL;
216c873d11SMarkus Armbruster     int ret;
226c873d11SMarkus Armbruster 
236c873d11SMarkus Armbruster     ret = qapi_enum_parse(QType_lookup, NULL, QTYPE__MAX, QTYPE_NONE,
246c873d11SMarkus Armbruster                           &error_abort);
256c873d11SMarkus Armbruster     g_assert_cmpint(ret, ==, QTYPE_NONE);
266c873d11SMarkus Armbruster 
276c873d11SMarkus Armbruster     ret = qapi_enum_parse(QType_lookup, "junk", QTYPE__MAX, -1,
286c873d11SMarkus Armbruster                           NULL);
296c873d11SMarkus Armbruster     g_assert_cmpint(ret, ==, -1);
306c873d11SMarkus Armbruster 
316c873d11SMarkus Armbruster     ret = qapi_enum_parse(QType_lookup, "junk", QTYPE__MAX, -1,
326c873d11SMarkus Armbruster                           &err);
336c873d11SMarkus Armbruster     error_free_or_abort(&err);
346c873d11SMarkus Armbruster 
356c873d11SMarkus Armbruster     ret = qapi_enum_parse(QType_lookup, "none", QTYPE__MAX, -1,
366c873d11SMarkus Armbruster                           &error_abort);
376c873d11SMarkus Armbruster     g_assert_cmpint(ret, ==, QTYPE_NONE);
386c873d11SMarkus Armbruster 
396c873d11SMarkus Armbruster     ret = qapi_enum_parse(QType_lookup, QType_lookup[QTYPE__MAX - 1],
406c873d11SMarkus Armbruster                           QTYPE__MAX, QTYPE__MAX - 1,
416c873d11SMarkus Armbruster                           &error_abort);
426c873d11SMarkus Armbruster     g_assert_cmpint(ret, ==, QTYPE__MAX - 1);
436c873d11SMarkus Armbruster }
446c873d11SMarkus Armbruster 
45*069b64e3SMarkus Armbruster static void test_parse_qapi_name(void)
46*069b64e3SMarkus Armbruster {
47*069b64e3SMarkus Armbruster     int ret;
48*069b64e3SMarkus Armbruster 
49*069b64e3SMarkus Armbruster     /* Must start with a letter */
50*069b64e3SMarkus Armbruster     ret = parse_qapi_name("a", true);
51*069b64e3SMarkus Armbruster     g_assert(ret == 1);
52*069b64e3SMarkus Armbruster     ret = parse_qapi_name("a$", false);
53*069b64e3SMarkus Armbruster     g_assert(ret == 1);
54*069b64e3SMarkus Armbruster     ret = parse_qapi_name("", false);
55*069b64e3SMarkus Armbruster     g_assert(ret == -1);
56*069b64e3SMarkus Armbruster     ret = parse_qapi_name("1", false);
57*069b64e3SMarkus Armbruster     g_assert(ret == -1);
58*069b64e3SMarkus Armbruster 
59*069b64e3SMarkus Armbruster     /* Only letters, digits, hyphen, underscore */
60*069b64e3SMarkus Armbruster     ret = parse_qapi_name("A-Za-z0-9_", true);
61*069b64e3SMarkus Armbruster     g_assert(ret == 10);
62*069b64e3SMarkus Armbruster     ret = parse_qapi_name("A-Za-z0-9_$", false);
63*069b64e3SMarkus Armbruster     g_assert(ret == 10);
64*069b64e3SMarkus Armbruster     ret = parse_qapi_name("A-Za-z0-9_$", true);
65*069b64e3SMarkus Armbruster     g_assert(ret == -1);
66*069b64e3SMarkus Armbruster 
67*069b64e3SMarkus Armbruster     /* __RFQDN_ */
68*069b64e3SMarkus Armbruster     ret = parse_qapi_name("__com.redhat_supports", true);
69*069b64e3SMarkus Armbruster     g_assert(ret == 21);
70*069b64e3SMarkus Armbruster     ret = parse_qapi_name("_com.example_", false);
71*069b64e3SMarkus Armbruster     g_assert(ret == -1);
72*069b64e3SMarkus Armbruster     ret = parse_qapi_name("__com.example", false);
73*069b64e3SMarkus Armbruster     g_assert(ret == -1);
74*069b64e3SMarkus Armbruster     ret = parse_qapi_name("__com.example_", false);
75*069b64e3SMarkus Armbruster     g_assert(ret == -1);
76*069b64e3SMarkus Armbruster }
77*069b64e3SMarkus Armbruster 
786c873d11SMarkus Armbruster int main(int argc, char *argv[])
796c873d11SMarkus Armbruster {
806c873d11SMarkus Armbruster     g_test_init(&argc, &argv, NULL);
816c873d11SMarkus Armbruster     g_test_add_func("/qapi/util/qapi_enum_parse", test_qapi_enum_parse);
82*069b64e3SMarkus Armbruster     g_test_add_func("/qapi/util/parse_qapi_name", test_parse_qapi_name);
836c873d11SMarkus Armbruster     g_test_run();
846c873d11SMarkus Armbruster     return 0;
856c873d11SMarkus Armbruster }
86