xref: /qemu/tests/unit/test-qapi-util.c (revision 06c60b6c468ca7cde004fe7c3ce35de312855f55)
1 /*
2  * Unit tests for QAPI utility functions
3  *
4  * Copyright (C) 2017 Red Hat Inc.
5  *
6  * Authors:
7  *  Markus Armbruster <armbru@redhat.com>,
8  *
9  * This work is licensed under the terms of the GNU GPL, version 2 or later.
10  * See the COPYING file in the top-level directory.
11  */
12 
13 #include "qemu/osdep.h"
14 #include "qapi/error.h"
15 #include "qapi/util.h"
16 #include "test-qapi-types.h"
17 
18 static void test_qapi_enum_parse(void)
19 {
20     Error *err = NULL;
21     int ret;
22 
23     ret = qapi_enum_parse(QType_lookup, NULL, QTYPE_NONE, &error_abort);
24     g_assert_cmpint(ret, ==, QTYPE_NONE);
25 
26     ret = qapi_enum_parse(QType_lookup, "junk", -1, NULL);
27     g_assert_cmpint(ret, ==, -1);
28 
29     ret = qapi_enum_parse(QType_lookup, "junk", -1, &err);
30     error_free_or_abort(&err);
31 
32     ret = qapi_enum_parse(QType_lookup, "none", -1, &error_abort);
33     g_assert_cmpint(ret, ==, QTYPE_NONE);
34 
35     ret = qapi_enum_parse(QType_lookup, QType_lookup[QTYPE__MAX - 1],
36                           QTYPE__MAX - 1, &error_abort);
37     g_assert_cmpint(ret, ==, QTYPE__MAX - 1);
38 }
39 
40 static void test_parse_qapi_name(void)
41 {
42     int ret;
43 
44     /* Must start with a letter */
45     ret = parse_qapi_name("a", true);
46     g_assert(ret == 1);
47     ret = parse_qapi_name("a$", false);
48     g_assert(ret == 1);
49     ret = parse_qapi_name("", false);
50     g_assert(ret == -1);
51     ret = parse_qapi_name("1", false);
52     g_assert(ret == -1);
53 
54     /* Only letters, digits, hyphen, underscore */
55     ret = parse_qapi_name("A-Za-z0-9_", true);
56     g_assert(ret == 10);
57     ret = parse_qapi_name("A-Za-z0-9_$", false);
58     g_assert(ret == 10);
59     ret = parse_qapi_name("A-Za-z0-9_$", true);
60     g_assert(ret == -1);
61 
62     /* __RFQDN_ */
63     ret = parse_qapi_name("__com.redhat_supports", true);
64     g_assert(ret == 21);
65     ret = parse_qapi_name("_com.example_", false);
66     g_assert(ret == -1);
67     ret = parse_qapi_name("__com.example", false);
68     g_assert(ret == -1);
69     ret = parse_qapi_name("__com.example_", false);
70     g_assert(ret == -1);
71 }
72 
73 int main(int argc, char *argv[])
74 {
75     g_test_init(&argc, &argv, NULL);
76     g_test_add_func("/qapi/util/qapi_enum_parse", test_qapi_enum_parse);
77     g_test_add_func("/qapi/util/parse_qapi_name", test_parse_qapi_name);
78     g_test_run();
79     return 0;
80 }
81