X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fdaemon%2Fcommon_test.c;h=44e198ddfafd97ccbcc0abf0b2cffa088b3cb9f8;hb=afb38f31abd27d5b4ce08023f8bbbaeeb353c55f;hp=ca8f15a35fd793d9799016ae594d2544ad5b67d7;hpb=82c9b0daf5ff90d01f4a4371f11727cd613e4b01;p=collectd.git diff --git a/src/daemon/common_test.c b/src/daemon/common_test.c index ca8f15a3..44e198dd 100644 --- a/src/daemon/common_test.c +++ b/src/daemon/common_test.c @@ -90,7 +90,6 @@ DEF_TEST(sstrdup) EXPECT_EQ_STR ("collectd", ptr); sfree(ptr); - OK(ptr == NULL); ptr = sstrdup (NULL); OK(ptr == NULL); @@ -149,46 +148,54 @@ DEF_TEST(strsplit) 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); - - status = strjoin (buffer, sizeof (buffer), fields, 2, "rcht"); - OK(status == 10); - EXPECT_EQ_STR ("foorchtbar", buffer); - - status = strjoin (buffer, sizeof (buffer), fields, 4, ""); - OK(status == 12); - EXPECT_EQ_STR ("foobarbazqux", buffer); +DEF_TEST(strjoin) { + struct { + char **fields; + size_t fields_num; + char *separator; + + 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"}, + }; + + 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); } @@ -204,9 +211,8 @@ DEF_TEST(escape_slashes) {"trailing/slash/", "trailing_slash_"}, {"foo//bar", "foo__bar"}, }; - size_t i; - for (i = 0; i < STATIC_ARRAY_SIZE (cases); i++) { + for (size_t i = 0; i < STATIC_ARRAY_SIZE (cases); i++) { char buffer[32]; strncpy (buffer, cases[i].str, sizeof (buffer)); @@ -231,9 +237,8 @@ DEF_TEST(escape_string) {"012345 78901234", "\"012345 789012\""}, {"012345 78901\"34", "\"012345 78901\""}, }; - size_t i; - for (i = 0; i < STATIC_ARRAY_SIZE (cases); i++) { + for (size_t i = 0; i < STATIC_ARRAY_SIZE (cases); i++) { char buffer[16]; strncpy (buffer, cases[i].str, sizeof (buffer)); @@ -302,8 +307,7 @@ DEF_TEST(parse_values) {"T:42.0", -1, NAN}, }; - size_t i; - for (i = 0; i < STATIC_ARRAY_SIZE (cases); i++) + for (size_t i = 0; i < STATIC_ARRAY_SIZE (cases); i++) { data_source_t dsrc = { .name = "value", @@ -362,9 +366,8 @@ DEF_TEST(value_to_rate) /* 64bit wrap-around. */ {30, 40, DS_TYPE_COUNTER, {.counter = 18446744073709551558ULL}, {.counter = 42}, 10.0}, }; - size_t i; - for (i = 0; i < STATIC_ARRAY_SIZE (cases); i++) { + 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) }; gauge_t got;