X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fdaemon%2Fcommon_test.c;h=af2840e5883147d474b8bb3b316515b86a6cd408;hb=d929cb64e9f243a080402769bf5e4626c9b5e9d3;hp=9ad6a2a9bfc68f4b0aebb69d115c9cbf62faefc6;hpb=2079ee1517e34de372f58e7e2267ad5c71a8a41f;p=collectd.git diff --git a/src/daemon/common_test.c b/src/daemon/common_test.c index 9ad6a2a9..af2840e5 100644 --- a/src/daemon/common_test.c +++ b/src/daemon/common_test.c @@ -27,6 +27,10 @@ #include "common.h" #include "testing.h" +#if HAVE_KSTAT_H +#include +#endif + #if HAVE_LIBKSTAT kstat_ctl_t *kc; #endif /* HAVE_LIBKSTAT */ @@ -55,28 +59,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 +74,7 @@ DEF_TEST(sstrdup) { ptr = sstrdup(NULL); OK(ptr == NULL); - return (0); + return 0; } DEF_TEST(strsplit) { @@ -141,50 +124,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 +247,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 +261,7 @@ DEF_TEST(strunescape) { OK(buffer[5] == '6'); OK(buffer[6] == '7'); - return (0); + return 0; } DEF_TEST(parse_values) { @@ -317,7 +306,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 +340,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 +363,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 +374,3 @@ int main(void) { END_TEST; } - -/* vim: set sw=2 sts=2 et : */