X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fdaemon%2Fcommon_test.c;h=68958f3f15271db5b66c64dd189e12e2f1c50073;hb=2ce1db8202b1eba6da45b347c0c81a508f8c088a;hp=f40b2b1a50defda7e9e859a4bd74e8c7f08afa6b;hpb=233ef890d210e7f231ebbc474894e90032ba49b1;p=collectd.git diff --git a/src/daemon/common_test.c b/src/daemon/common_test.c index f40b2b1a..68958f3f 100644 --- a/src/daemon/common_test.c +++ b/src/daemon/common_test.c @@ -24,8 +24,12 @@ * Florian octo Forster */ -#include "testing.h" #include "common.h" +#include "testing.h" + +#if HAVE_LIBKSTAT +kstat_ctl_t *kc; +#endif /* HAVE_LIBKSTAT */ DEF_TEST(sstrncpy) { @@ -38,18 +42,18 @@ DEF_TEST(sstrncpy) ret = sstrncpy (ptr, "foobar", 8); OK(ret == ptr); - STREQ ("foobar", ptr); + EXPECT_EQ_STR ("foobar", ptr); OK(buffer[3] == buffer[12]); ret = sstrncpy (ptr, "abc", 8); OK(ret == ptr); - STREQ ("abc", ptr); + EXPECT_EQ_STR ("abc", ptr); OK(buffer[3] == buffer[12]); ret = sstrncpy (ptr, "collectd", 8); OK(ret == ptr); OK(ptr[7] == 0); - STREQ ("collect", ptr); + EXPECT_EQ_STR ("collect", ptr); OK(buffer[3] == buffer[12]); return (0); @@ -66,12 +70,12 @@ DEF_TEST(ssnprintf) status = ssnprintf (ptr, 8, "%i", 1337); OK(status == 4); - STREQ ("1337", ptr); + EXPECT_EQ_STR ("1337", ptr); status = ssnprintf (ptr, 8, "%s", "collectd"); OK(status == 8); OK(ptr[7] == 0); - STREQ ("collect", ptr); + EXPECT_EQ_STR ("collect", ptr); OK(buffer[3] == buffer[12]); return (0); @@ -83,10 +87,9 @@ DEF_TEST(sstrdup) ptr = sstrdup ("collectd"); OK(ptr != NULL); - STREQ ("collectd", ptr); + EXPECT_EQ_STR ("collectd", ptr); sfree(ptr); - OK(ptr == NULL); ptr = sstrdup (NULL); OK(ptr == NULL); @@ -103,40 +106,40 @@ DEF_TEST(strsplit) strncpy (buffer, "foo bar", sizeof (buffer)); status = strsplit (buffer, fields, 8); OK(status == 2); - STREQ ("foo", fields[0]); - STREQ ("bar", fields[1]); + EXPECT_EQ_STR ("foo", fields[0]); + EXPECT_EQ_STR ("bar", fields[1]); strncpy (buffer, "foo \t bar", sizeof (buffer)); status = strsplit (buffer, fields, 8); OK(status == 2); - STREQ ("foo", fields[0]); - STREQ ("bar", fields[1]); + EXPECT_EQ_STR ("foo", fields[0]); + EXPECT_EQ_STR ("bar", fields[1]); strncpy (buffer, "one two\tthree\rfour\nfive", sizeof (buffer)); status = strsplit (buffer, fields, 8); OK(status == 5); - STREQ ("one", fields[0]); - STREQ ("two", fields[1]); - STREQ ("three", fields[2]); - STREQ ("four", fields[3]); - STREQ ("five", fields[4]); + EXPECT_EQ_STR ("one", fields[0]); + EXPECT_EQ_STR ("two", fields[1]); + EXPECT_EQ_STR ("three", fields[2]); + EXPECT_EQ_STR ("four", fields[3]); + EXPECT_EQ_STR ("five", fields[4]); strncpy (buffer, "\twith trailing\n", sizeof (buffer)); status = strsplit (buffer, fields, 8); OK(status == 2); - STREQ ("with", fields[0]); - STREQ ("trailing", fields[1]); + EXPECT_EQ_STR ("with", fields[0]); + EXPECT_EQ_STR ("trailing", fields[1]); strncpy (buffer, "1 2 3 4 5 6 7 8 9 10 11 12 13", sizeof (buffer)); status = strsplit (buffer, fields, 8); OK(status == 8); - STREQ ("7", fields[6]); - STREQ ("8", fields[7]); + EXPECT_EQ_STR ("7", fields[6]); + EXPECT_EQ_STR ("8", fields[7]); strncpy (buffer, "single", sizeof (buffer)); status = strsplit (buffer, fields, 8); OK(status == 1); - STREQ ("single", fields[0]); + EXPECT_EQ_STR ("single", fields[0]); strncpy (buffer, "", sizeof (buffer)); status = strsplit (buffer, fields, 8); @@ -158,26 +161,26 @@ DEF_TEST(strjoin) status = strjoin (buffer, sizeof (buffer), fields, 2, "!"); OK(status == 7); - STREQ ("foo!bar", buffer); + EXPECT_EQ_STR ("foo!bar", buffer); status = strjoin (buffer, sizeof (buffer), fields, 1, "!"); OK(status == 3); - STREQ ("foo", buffer); + 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); - STREQ ("foorchtbar", buffer); + EXPECT_EQ_STR ("foorchtbar", buffer); status = strjoin (buffer, sizeof (buffer), fields, 4, ""); OK(status == 12); - STREQ ("foobarbazqux", buffer); + EXPECT_EQ_STR ("foobarbazqux", buffer); status = strjoin (buffer, sizeof (buffer), fields, 4, "!"); OK(status == 15); - STREQ ("foo!bar!baz!qux", buffer); + EXPECT_EQ_STR ("foo!bar!baz!qux", buffer); fields[0] = "0123"; fields[1] = "4567"; @@ -207,7 +210,7 @@ DEF_TEST(escape_slashes) strncpy (buffer, cases[i].str, sizeof (buffer)); OK(escape_slashes (buffer, sizeof (buffer)) == 0); - STREQ(cases[i].want, buffer); + EXPECT_EQ_STR(cases[i].want, buffer); } return 0; @@ -234,7 +237,7 @@ DEF_TEST(escape_string) strncpy (buffer, cases[i].str, sizeof (buffer)); OK(escape_string (buffer, sizeof (buffer)) == 0); - STREQ(cases[i].want, buffer); + EXPECT_EQ_STR(cases[i].want, buffer); } return 0; @@ -248,23 +251,23 @@ DEF_TEST(strunescape) strncpy (buffer, "foo\\tbar", sizeof (buffer)); status = strunescape (buffer, sizeof (buffer)); OK(status == 0); - STREQ ("foo\tbar", buffer); + EXPECT_EQ_STR ("foo\tbar", buffer); strncpy (buffer, "\\tfoo\\r\\n", sizeof (buffer)); status = strunescape (buffer, sizeof (buffer)); OK(status == 0); - STREQ ("\tfoo\r\n", buffer); + EXPECT_EQ_STR ("\tfoo\r\n", buffer); strncpy (buffer, "With \\\"quotes\\\"", sizeof (buffer)); status = strunescape (buffer, sizeof (buffer)); OK(status == 0); - STREQ ("With \"quotes\"", buffer); + EXPECT_EQ_STR ("With \"quotes\"", buffer); /* Backslash before null byte */ strncpy (buffer, "\\tbackslash end\\", sizeof (buffer)); status = strunescape (buffer, sizeof (buffer)); OK(status != 0); - STREQ ("\tbackslash end", buffer); + EXPECT_EQ_STR ("\tbackslash end", buffer); return (0); /* Backslash at buffer end */ @@ -328,16 +331,54 @@ DEF_TEST(parse_values) }; int status = parse_values (cases[i].buffer, &vl, &ds); - OK(status == cases[i].status); + EXPECT_EQ_INT (cases[i].status, status); if (status != 0) continue; - OK(cases[i].value == vl.values[0].gauge); + EXPECT_EQ_DOUBLE (cases[i].value, vl.values[0].gauge); } return (0); } +DEF_TEST(value_to_rate) +{ + struct { + time_t t0; + time_t t1; + int ds_type; + value_t v0; + value_t v1; + gauge_t want; + } cases[] = { + { 0, 10, DS_TYPE_DERIVE, {.derive = 0}, {.derive = 1000}, NAN}, + {10, 20, DS_TYPE_DERIVE, {.derive = 1000}, {.derive = 2000}, 100.0}, + {20, 30, DS_TYPE_DERIVE, {.derive = 2000}, {.derive = 1800}, -20.0}, + { 0, 10, DS_TYPE_COUNTER, {.counter = 0}, {.counter = 1000}, NAN}, + {10, 20, DS_TYPE_COUNTER, {.counter = 1000}, {.counter = 5000}, 400.0}, + /* 32bit wrap-around. */ + {20, 30, DS_TYPE_COUNTER, {.counter = 4294967238ULL}, {.counter = 42}, 10.0}, + /* 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) }; + 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); + 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_DOUBLE(cases[i].want, got); + } + + return 0; +} + int main (void) { RUN_TEST(sstrncpy); @@ -349,6 +390,7 @@ int main (void) RUN_TEST(escape_string); RUN_TEST(strunescape); RUN_TEST(parse_values); + RUN_TEST(value_to_rate); END_TEST; }