xref: /qemu/tests/unit/test-qapi-util.c (revision f7abe0ecd4973dfe36944b916c5b9cf8ec199b8a)
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 "test-qapi-types.h"
166c873d11SMarkus Armbruster 
176c873d11SMarkus Armbruster static void test_qapi_enum_parse(void)
186c873d11SMarkus Armbruster {
196c873d11SMarkus Armbruster     Error *err = NULL;
206c873d11SMarkus Armbruster     int ret;
216c873d11SMarkus Armbruster 
22*f7abe0ecSMarc-André Lureau     ret = qapi_enum_parse(&QType_lookup, NULL, QTYPE_NONE, &error_abort);
236c873d11SMarkus Armbruster     g_assert_cmpint(ret, ==, QTYPE_NONE);
246c873d11SMarkus Armbruster 
25*f7abe0ecSMarc-André Lureau     ret = qapi_enum_parse(&QType_lookup, "junk", -1, NULL);
266c873d11SMarkus Armbruster     g_assert_cmpint(ret, ==, -1);
276c873d11SMarkus Armbruster 
28*f7abe0ecSMarc-André Lureau     ret = qapi_enum_parse(&QType_lookup, "junk", -1, &err);
296c873d11SMarkus Armbruster     error_free_or_abort(&err);
306c873d11SMarkus Armbruster 
31*f7abe0ecSMarc-André Lureau     ret = qapi_enum_parse(&QType_lookup, "none", -1, &error_abort);
326c873d11SMarkus Armbruster     g_assert_cmpint(ret, ==, QTYPE_NONE);
336c873d11SMarkus Armbruster 
34*f7abe0ecSMarc-André Lureau     ret = qapi_enum_parse(&QType_lookup, QType_str(QTYPE__MAX - 1),
3506c60b6cSMarkus Armbruster                           QTYPE__MAX - 1, &error_abort);
366c873d11SMarkus Armbruster     g_assert_cmpint(ret, ==, QTYPE__MAX - 1);
376c873d11SMarkus Armbruster }
386c873d11SMarkus Armbruster 
39069b64e3SMarkus Armbruster static void test_parse_qapi_name(void)
40069b64e3SMarkus Armbruster {
41069b64e3SMarkus Armbruster     int ret;
42069b64e3SMarkus Armbruster 
43069b64e3SMarkus Armbruster     /* Must start with a letter */
44069b64e3SMarkus Armbruster     ret = parse_qapi_name("a", true);
45069b64e3SMarkus Armbruster     g_assert(ret == 1);
46069b64e3SMarkus Armbruster     ret = parse_qapi_name("a$", false);
47069b64e3SMarkus Armbruster     g_assert(ret == 1);
48069b64e3SMarkus Armbruster     ret = parse_qapi_name("", false);
49069b64e3SMarkus Armbruster     g_assert(ret == -1);
50069b64e3SMarkus Armbruster     ret = parse_qapi_name("1", false);
51069b64e3SMarkus Armbruster     g_assert(ret == -1);
52069b64e3SMarkus Armbruster 
53069b64e3SMarkus Armbruster     /* Only letters, digits, hyphen, underscore */
54069b64e3SMarkus Armbruster     ret = parse_qapi_name("A-Za-z0-9_", true);
55069b64e3SMarkus Armbruster     g_assert(ret == 10);
56069b64e3SMarkus Armbruster     ret = parse_qapi_name("A-Za-z0-9_$", false);
57069b64e3SMarkus Armbruster     g_assert(ret == 10);
58069b64e3SMarkus Armbruster     ret = parse_qapi_name("A-Za-z0-9_$", true);
59069b64e3SMarkus Armbruster     g_assert(ret == -1);
60069b64e3SMarkus Armbruster 
61069b64e3SMarkus Armbruster     /* __RFQDN_ */
62069b64e3SMarkus Armbruster     ret = parse_qapi_name("__com.redhat_supports", true);
63069b64e3SMarkus Armbruster     g_assert(ret == 21);
64069b64e3SMarkus Armbruster     ret = parse_qapi_name("_com.example_", false);
65069b64e3SMarkus Armbruster     g_assert(ret == -1);
66069b64e3SMarkus Armbruster     ret = parse_qapi_name("__com.example", false);
67069b64e3SMarkus Armbruster     g_assert(ret == -1);
68069b64e3SMarkus Armbruster     ret = parse_qapi_name("__com.example_", false);
69069b64e3SMarkus Armbruster     g_assert(ret == -1);
70069b64e3SMarkus Armbruster }
71069b64e3SMarkus Armbruster 
726c873d11SMarkus Armbruster int main(int argc, char *argv[])
736c873d11SMarkus Armbruster {
746c873d11SMarkus Armbruster     g_test_init(&argc, &argv, NULL);
756c873d11SMarkus Armbruster     g_test_add_func("/qapi/util/qapi_enum_parse", test_qapi_enum_parse);
76069b64e3SMarkus Armbruster     g_test_add_func("/qapi/util/parse_qapi_name", test_parse_qapi_name);
776c873d11SMarkus Armbruster     g_test_run();
786c873d11SMarkus Armbruster     return 0;
796c873d11SMarkus Armbruster }
80