X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fdaemon%2Fcommon_test.c;h=61435959bc4fe82e7faf7ebf34362e2859cc17b9;hb=2ece265d5c296b56ab760d10c92054eef094e1bd;hp=68958f3f15271db5b66c64dd189e12e2f1c50073;hpb=aef15b632b9f415e5ebfadd4e41fa8a3c19407ee;p=collectd.git diff --git a/src/daemon/common_test.c b/src/daemon/common_test.c index 68958f3f..61435959 100644 --- a/src/daemon/common_test.c +++ b/src/daemon/common_test.c @@ -148,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); } @@ -203,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)); @@ -230,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)); @@ -301,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", @@ -361,18 +366,21 @@ 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++) { - value_to_rate_state_t state = { cases[i].v0, TIME_T_TO_CDTIME_T (cases[i].t0) }; + for (size_t i = 0; i < STATIC_ARRAY_SIZE (cases); i++) { + 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); }