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