Merge branch 'collectd-5.7' into collectd-5.8
[collectd.git] / src / daemon / common_test.c
index 9ad6a2a..4d2ccaa 100644 (file)
@@ -55,28 +55,7 @@ DEF_TEST(sstrncpy) {
   EXPECT_EQ_STR("collect", ptr);
   OK(buffer[3] == buffer[12]);
 
-  return (0);
-}
-
-DEF_TEST(ssnprintf) {
-  char buffer[16] = "";
-  char *ptr = &buffer[4];
-  int status;
-
-  buffer[0] = buffer[1] = buffer[2] = buffer[3] = 0xff;
-  buffer[12] = buffer[13] = buffer[14] = buffer[15] = 0xff;
-
-  status = ssnprintf(ptr, 8, "%i", 1337);
-  OK(status == 4);
-  EXPECT_EQ_STR("1337", ptr);
-
-  status = ssnprintf(ptr, 8, "%s", "collectd");
-  OK(status == 8);
-  OK(ptr[7] == 0);
-  EXPECT_EQ_STR("collect", ptr);
-  OK(buffer[3] == buffer[12]);
-
-  return (0);
+  return 0;
 }
 
 DEF_TEST(sstrdup) {
@@ -91,7 +70,7 @@ DEF_TEST(sstrdup) {
   ptr = sstrdup(NULL);
   OK(ptr == NULL);
 
-  return (0);
+  return 0;
 }
 
 DEF_TEST(strsplit) {
@@ -141,50 +120,56 @@ DEF_TEST(strsplit) {
   status = strsplit(buffer, fields, 8);
   OK(status == 0);
 
-  return (0);
+  return 0;
 }
 
 DEF_TEST(strjoin) {
-  char buffer[16];
-  char *fields[4];
-  int status;
-
-  fields[0] = "foo";
-  fields[1] = "bar";
-  fields[2] = "baz";
-  fields[3] = "qux";
-
-  status = strjoin(buffer, sizeof(buffer), fields, 2, "!");
-  OK(status == 7);
-  EXPECT_EQ_STR("foo!bar", buffer);
-
-  status = strjoin(buffer, sizeof(buffer), fields, 1, "!");
-  OK(status == 3);
-  EXPECT_EQ_STR("foo", buffer);
-
-  status = strjoin(buffer, sizeof(buffer), fields, 0, "!");
-  OK(status < 0);
+  struct {
+    char **fields;
+    size_t fields_num;
+    char *separator;
 
-  status = strjoin(buffer, sizeof(buffer), fields, 2, "rcht");
-  OK(status == 10);
-  EXPECT_EQ_STR("foorchtbar", buffer);
+    int want_return;
+    char *want_buffer;
+  } cases[] = {
+      /* Normal case. */
+      {(char *[]){"foo", "bar"}, 2, "!", 7, "foo!bar"},
+      /* One field only. */
+      {(char *[]){"foo"}, 1, "!", 3, "foo"},
+      /* No fields at all. */
+      {NULL, 0, "!", 0, ""},
+      /* Longer separator. */
+      {(char *[]){"foo", "bar"}, 2, "rcht", 10, "foorchtbar"},
+      /* Empty separator. */
+      {(char *[]){"foo", "bar"}, 2, "", 6, "foobar"},
+      /* NULL separator. */
+      {(char *[]){"foo", "bar"}, 2, NULL, 6, "foobar"},
+      /* buffer not large enough -> string is truncated. */
+      {(char *[]){"aaaaaa", "bbbbbb", "c!"}, 3, "-", 16, "aaaaaa-bbbbbb-c"},
+      /* buffer not large enough -> last field fills buffer completely. */
+      {(char *[]){"aaaaaaa", "bbbbbbb", "!"}, 3, "-", 17, "aaaaaaa-bbbbbbb"},
+      /* buffer not large enough -> string does *not* end in separator. */
+      {(char *[]){"aaaa", "bbbb", "cccc", "!"}, 4, "-", 16, "aaaa-bbbb-cccc"},
+      /* buffer not large enough -> string does not end with partial
+         separator. */
+      {(char *[]){"aaaaaa", "bbbbbb", "!"}, 3, "+-", 17, "aaaaaa+-bbbbbb"},
+  };
 
-  status = strjoin(buffer, sizeof(buffer), fields, 4, "");
-  OK(status == 12);
-  EXPECT_EQ_STR("foobarbazqux", buffer);
+  for (size_t i = 0; i < STATIC_ARRAY_SIZE(cases); i++) {
+    char buffer[16];
+    int status;
 
-  status = strjoin(buffer, sizeof(buffer), fields, 4, "!");
-  OK(status == 15);
-  EXPECT_EQ_STR("foo!bar!baz!qux", buffer);
+    memset(buffer, 0xFF, sizeof(buffer));
+    status = strjoin(buffer, sizeof(buffer), cases[i].fields,
+                     cases[i].fields_num, cases[i].separator);
+    EXPECT_EQ_INT(cases[i].want_return, status);
+    EXPECT_EQ_STR(cases[i].want_buffer, buffer);
+  }
 
-  fields[0] = "0123";
-  fields[1] = "4567";
-  fields[2] = "8901";
-  fields[3] = "2345";
-  status = strjoin(buffer, sizeof(buffer), fields, 4, "-");
-  OK(status < 0);
+  /* use (NULL, 0) to determine required buffer size. */
+  EXPECT_EQ_INT(3, strjoin(NULL, 0, (char *[]){"a", "b"}, 2, "-"));
 
-  return (0);
+  return 0;
 }
 
 DEF_TEST(escape_slashes) {
@@ -258,7 +243,7 @@ DEF_TEST(strunescape) {
   status = strunescape(buffer, sizeof(buffer));
   OK(status != 0);
   EXPECT_EQ_STR("\tbackslash end", buffer);
-  return (0);
+  return 0;
 
   /* Backslash at buffer end */
   strncpy(buffer, "\\t3\\56", sizeof(buffer));
@@ -272,7 +257,7 @@ DEF_TEST(strunescape) {
   OK(buffer[5] == '6');
   OK(buffer[6] == '7');
 
-  return (0);
+  return 0;
 }
 
 DEF_TEST(parse_values) {
@@ -317,7 +302,7 @@ DEF_TEST(parse_values) {
     EXPECT_EQ_DOUBLE(cases[i].value, vl.values[0].gauge);
   }
 
-  return (0);
+  return 0;
 }
 
 DEF_TEST(value_to_rate) {
@@ -351,18 +336,21 @@ DEF_TEST(value_to_rate) {
   };
 
   for (size_t i = 0; i < STATIC_ARRAY_SIZE(cases); i++) {
-    value_to_rate_state_t state = {cases[i].v0,
-                                   TIME_T_TO_CDTIME_T(cases[i].t0)};
+    cdtime_t t0 = TIME_T_TO_CDTIME_T(cases[i].t0);
+    value_to_rate_state_t state = {
+        .last_value = cases[i].v0, .last_time = t0,
+    };
     gauge_t got;
 
     if (cases[i].t0 == 0) {
-      OK(value_to_rate(&got, cases[i].v1, cases[i].ds_type,
-                       TIME_T_TO_CDTIME_T(cases[i].t1), &state) == EAGAIN);
+      EXPECT_EQ_INT(EAGAIN,
+                    value_to_rate(&got, cases[i].v1, cases[i].ds_type,
+                                  TIME_T_TO_CDTIME_T(cases[i].t1), &state));
       continue;
     }
 
-    OK(value_to_rate(&got, cases[i].v1, cases[i].ds_type,
-                     TIME_T_TO_CDTIME_T(cases[i].t1), &state) == 0);
+    EXPECT_EQ_INT(0, value_to_rate(&got, cases[i].v1, cases[i].ds_type,
+                                   TIME_T_TO_CDTIME_T(cases[i].t1), &state));
     EXPECT_EQ_DOUBLE(cases[i].want, got);
   }
 
@@ -371,7 +359,6 @@ DEF_TEST(value_to_rate) {
 
 int main(void) {
   RUN_TEST(sstrncpy);
-  RUN_TEST(ssnprintf);
   RUN_TEST(sstrdup);
   RUN_TEST(strsplit);
   RUN_TEST(strjoin);
@@ -383,5 +370,3 @@ int main(void) {
 
   END_TEST;
 }
-
-/* vim: set sw=2 sts=2 et : */