test_cgroups_plugin.c 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. // SPDX-License-Identifier: GPL-3.0-or-later
  2. #include "test_cgroups_plugin.h"
  3. #include "libnetdata/required_dummies.h"
  4. RRDHOST *localhost;
  5. int netdata_zero_metrics_enabled = 1;
  6. struct config netdata_config;
  7. char *netdata_configured_primary_plugins_dir = NULL;
  8. static void test_k8s_parse_resolved_name(void **state)
  9. {
  10. UNUSED(state);
  11. struct label *labels = (struct label *)0xff;
  12. struct k8s_test_data {
  13. char *data;
  14. char *name;
  15. char *key[3];
  16. char *value[3];
  17. };
  18. struct k8s_test_data test_data[] = {
  19. // One label
  20. { .data = "name label1=\"value1\"",
  21. .name = "name",
  22. .key[0] = "label1", .value[0] = "value1" },
  23. // Three labels
  24. { .data = "name label1=\"value1\",label2=\"value2\",label3=\"value3\"",
  25. .name = "name",
  26. .key[0] = "label1", .value[0] = "value1",
  27. .key[1] = "label2", .value[1] = "value2",
  28. .key[2] = "label3", .value[2] = "value3" },
  29. // Comma at the end of the data string
  30. { .data = "name label1=\"value1\",",
  31. .name = "name",
  32. .key[0] = "label1", .value[0] = "value1" },
  33. // Equals sign in the value
  34. { .data = "name label1=\"value=1\"",
  35. .name = "name",
  36. .key[0] = "label1", .value[0] = "value=1" },
  37. // Double quotation mark in the value
  38. { .data = "name label1=\"value\"1\"",
  39. .name = "name",
  40. .key[0] = "label1", .value[0] = "value" },
  41. // Escaped double quotation mark in the value
  42. { .data = "name label1=\"value\\\"1\"",
  43. .name = "name",
  44. .key[0] = "label1", .value[0] = "value\\\"1" },
  45. // Equals sign in the key
  46. { .data = "name label=1=\"value1\"",
  47. .name = "name",
  48. .key[0] = "label", .value[0] = "1=\"value1\"" },
  49. // Skipped value
  50. { .data = "name label1=,label2=\"value2\"",
  51. .name = "name",
  52. .key[0] = "label2", .value[0] = "value2" },
  53. // A pair of equals signs
  54. { .data = "name= =",
  55. .name = "name=" },
  56. // A pair of commas
  57. { .data = "name, ,",
  58. .name = "name," },
  59. { .data = NULL }
  60. };
  61. for (int i = 0; test_data[i].data != NULL; i++) {
  62. char *data = strdup(test_data[i].data);
  63. for (int l = 0; l < 3 && test_data[i].key[l] != NULL; l++) {
  64. char *key = test_data[i].key[l];
  65. char *value = test_data[i].value[l];
  66. expect_function_call(__wrap_add_label_to_list);
  67. expect_value(__wrap_add_label_to_list, l, 0xff);
  68. expect_string(__wrap_add_label_to_list, key, key);
  69. expect_string(__wrap_add_label_to_list, value, value);
  70. expect_value(__wrap_add_label_to_list, label_source, LABEL_SOURCE_KUBERNETES);
  71. }
  72. char *name = k8s_parse_resolved_name(&labels, data);
  73. assert_string_equal(name, test_data[i].name);
  74. assert_ptr_equal(labels, 0xff);
  75. free(data);
  76. }
  77. }
  78. int main(void)
  79. {
  80. const struct CMUnitTest tests[] = {
  81. cmocka_unit_test(test_k8s_parse_resolved_name),
  82. };
  83. int test_res = cmocka_run_group_tests_name("test_k8s_parse_resolved_name", tests, NULL, NULL);
  84. return test_res;
  85. }