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