test-qapi-util.c 2.4 KB

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