test-qapi-util.c 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  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. #include "qemu/osdep.h"
  13. #include "qapi/error.h"
  14. static void test_qapi_enum_parse(void)
  15. {
  16. Error *err = NULL;
  17. int ret;
  18. ret = qapi_enum_parse(&QType_lookup, NULL, QTYPE_NONE, &error_abort);
  19. g_assert_cmpint(ret, ==, QTYPE_NONE);
  20. ret = qapi_enum_parse(&QType_lookup, "junk", -1, NULL);
  21. g_assert_cmpint(ret, ==, -1);
  22. ret = qapi_enum_parse(&QType_lookup, "junk", -1, &err);
  23. error_free_or_abort(&err);
  24. ret = qapi_enum_parse(&QType_lookup, "none", -1, &error_abort);
  25. g_assert_cmpint(ret, ==, QTYPE_NONE);
  26. ret = qapi_enum_parse(&QType_lookup, QType_str(QTYPE__MAX - 1),
  27. QTYPE__MAX - 1, &error_abort);
  28. g_assert_cmpint(ret, ==, QTYPE__MAX - 1);
  29. }
  30. static void test_parse_qapi_name(void)
  31. {
  32. int ret;
  33. /* Must start with a letter */
  34. ret = parse_qapi_name("a", true);
  35. g_assert(ret == 1);
  36. ret = parse_qapi_name("a$", false);
  37. g_assert(ret == 1);
  38. ret = parse_qapi_name("", false);
  39. g_assert(ret == -1);
  40. ret = parse_qapi_name("1", false);
  41. g_assert(ret == -1);
  42. /* Only letters, digits, hyphen, underscore */
  43. ret = parse_qapi_name("A-Za-z0-9_", true);
  44. g_assert(ret == 10);
  45. ret = parse_qapi_name("A-Za-z0-9_$", false);
  46. g_assert(ret == 10);
  47. ret = parse_qapi_name("A-Za-z0-9_$", true);
  48. g_assert(ret == -1);
  49. /* __RFQDN_ */
  50. ret = parse_qapi_name("__com.redhat_supports", true);
  51. g_assert(ret == 21);
  52. ret = parse_qapi_name("_com.example_", false);
  53. g_assert(ret == -1);
  54. ret = parse_qapi_name("__com.example", false);
  55. g_assert(ret == -1);
  56. ret = parse_qapi_name("__com.example_", false);
  57. g_assert(ret == -1);
  58. }
  59. int main(int argc, char *argv[])
  60. {
  61. g_test_init(&argc, &argv, NULL);
  62. g_test_add_func("/qapi/util/qapi_enum_parse", test_qapi_enum_parse);
  63. g_test_add_func("/qapi/util/parse_qapi_name", test_parse_qapi_name);
  64. g_test_run();
  65. return 0;
  66. }