From ca37fef95164de326df95a626a398f13b3ca41c7 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Sun, 1 Feb 2009 01:07:22 +0000 Subject: [PATCH] Change evbuffer callbacks to use tinytest natively and never assert. svn:r1088 --- test/regress_buffer.c | 229 ++++++++++++++++++------------------------ 1 file changed, 97 insertions(+), 132 deletions(-) diff --git a/test/regress_buffer.c b/test/regress_buffer.c index 376bec7a..d2321fd2 100644 --- a/test/regress_buffer.c +++ b/test/regress_buffer.c @@ -63,40 +63,47 @@ #include "regress.h" -/* Validates that an evbuffer is good. */ -static void -evbuffer_validate(struct evbuffer *buf) +/* Validates that an evbuffer is good. Returns false if it isn't, true if it + * is*/ +static int +_evbuffer_validate(struct evbuffer *buf) { struct evbuffer_chain *chain, *previous = NULL; size_t sum = 0; if (buf->first == NULL) { - assert(buf->last == NULL); - assert(buf->previous_to_last == NULL); - assert(buf->total_len == 0); + tt_assert(buf->last == NULL); + tt_assert(buf->previous_to_last == NULL); + tt_assert(buf->total_len == 0); } if (buf->previous_to_last == NULL) { - assert(buf->first == buf->last); + tt_assert(buf->first == buf->last); } chain = buf->first; while (chain != NULL) { sum += chain->off; if (chain->next == NULL) { - assert(buf->previous_to_last == previous); - assert(buf->last == chain); + tt_assert(buf->previous_to_last == previous); + tt_assert(buf->last == chain); } - assert(chain->buffer_len >= chain->misalign + chain->off); + tt_assert(chain->buffer_len >= chain->misalign + chain->off); previous = chain; chain = chain->next; } - assert(sum == buf->total_len); + tt_assert(sum == buf->total_len); + return 1; + end: + return 0; } +#define evbuffer_validate(buf) \ + TT_STMT_BEGIN if (!_evbuffer_validate(buf)) goto end; TT_STMT_END + static void -test_evbuffer(void) +test_evbuffer(void *ptr) { static char buffer[512], *tmp; struct evbuffer *evb = evbuffer_new(); @@ -108,42 +115,35 @@ test_evbuffer(void) evbuffer_add_printf(evb, "%s/%d", "hello", 1); evbuffer_validate(evb); - if (EVBUFFER_LENGTH(evb) != 7 || - memcmp((char*)EVBUFFER_DATA(evb), "hello/1", 1) != 0) - goto out; + tt_assert(EVBUFFER_LENGTH(evb) == 7); + tt_assert(!memcmp((char*)EVBUFFER_DATA(evb), "hello/1", 1)); evbuffer_add_buffer(evb, evb_two); evbuffer_validate(evb); evbuffer_drain(evb, strlen("hello/")); evbuffer_validate(evb); - if (EVBUFFER_LENGTH(evb) != 1 || - memcmp((char*)EVBUFFER_DATA(evb), "1", 1) != 0) - goto out; + tt_assert(EVBUFFER_LENGTH(evb) == 1); + tt_assert(!memcmp((char*)EVBUFFER_DATA(evb), "1", 1)); evbuffer_add_printf(evb_two, "%s", "/hello"); evbuffer_validate(evb); evbuffer_add_buffer(evb, evb_two); evbuffer_validate(evb); - if (EVBUFFER_LENGTH(evb_two) != 0 || - EVBUFFER_LENGTH(evb) != 7 || - memcmp((char*)EVBUFFER_DATA(evb), "1/hello", 7) != 0) - goto out; + tt_assert(EVBUFFER_LENGTH(evb_two) == 0); + tt_assert(EVBUFFER_LENGTH(evb) == 7); + tt_assert(!memcmp((char*)EVBUFFER_DATA(evb), "1/hello", 7) != 0); memset(buffer, 0, sizeof(buffer)); evbuffer_add(evb, buffer, sizeof(buffer)); evbuffer_validate(evb); - if (EVBUFFER_LENGTH(evb) != 7 + 512) - goto out; + tt_assert(EVBUFFER_LENGTH(evb) == 7 + 512); tmp = (char *)evbuffer_pullup(evb, 7 + 512); - if (tmp == NULL) - goto out; - if (strncmp(tmp, "1/hello", 7) != 0) - goto out; - if (memcmp(tmp + 7, buffer, sizeof(buffer)) != 0) - goto out; + tt_assert(tmp); + tt_assert(!strncmp(tmp, "1/hello", 7)); + tt_assert(!memcmp(tmp + 7, buffer, sizeof(buffer))); evbuffer_validate(evb); evbuffer_prepend(evb, "something", 9); @@ -152,8 +152,7 @@ test_evbuffer(void) evbuffer_validate(evb); tmp = (char *)evbuffer_pullup(evb, 4 + 9 + 7); - if (strncmp(tmp, "elsesomething1/hello", 4 + 9 + 7) != 0) - goto out; + tt_assert(!strncmp(tmp, "elsesomething1/hello", 4 + 9 + 7)); evbuffer_validate(evb); evbuffer_drain(evb, -1); @@ -169,23 +168,22 @@ test_evbuffer(void) evbuffer_validate(evb_two); } - if (EVBUFFER_LENGTH(evb_two) != 0 || - EVBUFFER_LENGTH(evb) != i * sizeof(buffer)) - goto out; + tt_assert(EVBUFFER_LENGTH(evb_two) == 0); + tt_assert(EVBUFFER_LENGTH(evb) == i * sizeof(buffer)); /* test remove buffer */ sz_tmp = sizeof(buffer)*2.5; evbuffer_remove_buffer(evb, evb_two, sz_tmp); - if (EVBUFFER_LENGTH(evb_two) != sz_tmp || - EVBUFFER_LENGTH(evb) != sizeof(buffer) / 2) - goto out; + tt_assert(EVBUFFER_LENGTH(evb_two) == sz_tmp); + tt_assert(EVBUFFER_LENGTH(evb) == sizeof(buffer) / 2); evbuffer_validate(evb); if (memcmp(evbuffer_pullup( evb, -1), buffer, sizeof(buffer) / 2) != 0 || memcmp(evbuffer_pullup( evb_two, -1), buffer, sizeof(buffer) != 0)) - goto out; + tt_abort_msg("Pullup did not preserve content"); + evbuffer_validate(evb); @@ -196,57 +194,50 @@ test_evbuffer(void) for (i = 0; i < 3; ++i) { buf = evbuffer_reserve_space(evb, 10000); - assert(buf != NULL); + tt_assert(buf != NULL); evbuffer_validate(evb); for (j = 0; j < 10000; ++j) { buf[j] = j; } evbuffer_validate(evb); - assert(evbuffer_commit_space(evb, 10000) == 0); + tt_assert(evbuffer_commit_space(evb, 10000) == 0); evbuffer_validate(evb); - assert(evbuffer_get_length(evb) >= 10000); + tt_assert(evbuffer_get_length(evb) >= 10000); evbuffer_drain(evb, j * 5000); evbuffer_validate(evb); } } - test_ok = 1; - -out: + end: evbuffer_free(evb); evbuffer_free(evb_two); - } +static int reference_cb_called; static void reference_cb(void *extra) { - assert(extra = (void *)0xdeadaffe); - test_ok = 1; + tt_want(extra == (void *)0xdeadaffe); + ++reference_cb_called; } static void -test_evbuffer_reference(void) +test_evbuffer_reference(void *ptr) { struct evbuffer *src = evbuffer_new(); struct evbuffer *dst = evbuffer_new(); unsigned char *tmp; const char *data = "this is what we add as read-only memory."; + reference_cb_called = 0; - if (evbuffer_add_reference(src, data, strlen(data), - reference_cb, (void *)0xdeadaffe) == -1) { - fprintf(stdout, "FAILED\n"); - exit(1); - } + tt_assert(evbuffer_add_reference(src, data, strlen(data), + reference_cb, (void *)0xdeadaffe) != -1); tmp = evbuffer_reserve_space(dst, strlen(data)); - if (evbuffer_remove(src, tmp, 10) == -1) { - fprintf(stdout, "FAILED\n"); - exit(1); - } + tt_assert(evbuffer_remove(src, tmp, 10) != -1); evbuffer_validate(src); evbuffer_validate(dst); @@ -256,27 +247,24 @@ test_evbuffer_reference(void) evbuffer_validate(src); evbuffer_drain(src, 5); - if (evbuffer_remove(src, tmp + 10, strlen(data) - 10) == -1) { - fprintf(stdout, "FAILED\n"); - exit(1); - } + tt_assert(evbuffer_remove(src, tmp + 10, strlen(data) - 10) != -1); evbuffer_commit_space(dst, strlen(data)); evbuffer_validate(src); evbuffer_validate(dst); - if (memcmp(evbuffer_pullup(dst, strlen(data)), - data, strlen(data)) != 0) { - fprintf(stdout, "FAILED\n"); - exit(1); - } + tt_int_op(reference_cb_called); + tt_assert(!memcmp(evbuffer_pullup(dst, strlen(data)), + data, strlen(data))); + + end: evbuffer_free(dst); evbuffer_free(src); } static void -test_evbuffer_readln(void) +test_evbuffer_readln(void *ptr) { struct evbuffer *evb = evbuffer_new(); struct evbuffer *evb_tmp = evbuffer_new(); @@ -284,37 +272,39 @@ test_evbuffer_readln(void) char *cp = NULL; size_t sz; +#define tt_line_eq(content) \ + TT_STMT_BEGIN \ + if (!cp || sz != strlen(content) || strcmp(cp, content)) { \ + TT_DIE(("Wanted %s; got %s [%d]", content, cp, (int)sz)); \ + } \ + TT_STMT_END + /* Test EOL_ANY. */ s = "complex silly newline\r\n\n\r\n\n\rmore\0\n"; evbuffer_add(evb, s, strlen(s)+2); evbuffer_validate(evb); cp = evbuffer_readln(evb, &sz, EVBUFFER_EOL_ANY); - if (!cp || sz != strlen(cp) || strcmp(cp, "complex silly newline")) - goto done; + tt_line_eq("complex silly newline"); free(cp); evbuffer_validate(evb); cp = evbuffer_readln(evb, &sz, EVBUFFER_EOL_ANY); if (!cp || sz != 5 || memcmp(cp, "more\0\0", 6)) - goto done; - if (EVBUFFER_LENGTH(evb) != 0) - goto done; + tt_abort_msg("Not as expected"); + tt_uint_op(EVBUFFER_LENGTH(evb), ==, 0); evbuffer_validate(evb); s = "\nno newline"; evbuffer_add(evb, s, strlen(s)); free(cp); evbuffer_validate(evb); cp = evbuffer_readln(evb, &sz, EVBUFFER_EOL_ANY); - if (!cp || sz || strcmp(cp, "")) - goto done; + tt_line_eq(""); free(cp); evbuffer_validate(evb); cp = evbuffer_readln(evb, &sz, EVBUFFER_EOL_ANY); - if (cp) - goto done; + tt_assert(!cp); evbuffer_validate(evb); evbuffer_drain(evb, EVBUFFER_LENGTH(evb)); - if (EVBUFFER_LENGTH(evb) != 0) - goto done; + tt_assert(EVBUFFER_LENGTH(evb) == 0); evbuffer_validate(evb); /* Test EOL_CRLF */ @@ -322,34 +312,29 @@ test_evbuffer_readln(void) evbuffer_add(evb, s, strlen(s)); evbuffer_validate(evb); cp = evbuffer_readln(evb, &sz, EVBUFFER_EOL_CRLF); - if (!cp || sz != strlen(cp) || strcmp(cp, "Line with\rin the middle")) - goto done; + tt_line_eq("Line with\rin the middle"); free(cp); evbuffer_validate(evb); cp = evbuffer_readln(evb, &sz, EVBUFFER_EOL_CRLF); - if (!cp || sz != strlen(cp) || strcmp(cp, "Line with good crlf")) - goto done; + tt_line_eq("Line with good crlf"); free(cp); evbuffer_validate(evb); cp = evbuffer_readln(evb, &sz, EVBUFFER_EOL_CRLF); - if (!cp || sz != strlen(cp) || strcmp(cp, "")) - goto done; + tt_line_eq(""); free(cp); evbuffer_validate(evb); cp = evbuffer_readln(evb, &sz, EVBUFFER_EOL_CRLF); - if (!cp || sz != strlen(cp) || strcmp(cp, "final")) - goto done; + tt_line_eq("final"); s = "x"; evbuffer_validate(evb); evbuffer_add(evb, s, 1); evbuffer_validate(evb); free(cp); cp = evbuffer_readln(evb, &sz, EVBUFFER_EOL_CRLF); - if (cp) - goto done; + tt_assert(!cp); evbuffer_validate(evb); /* Test CRLF_STRICT */ @@ -357,32 +342,26 @@ test_evbuffer_readln(void) evbuffer_add(evb, s, strlen(s)); evbuffer_validate(evb); cp = evbuffer_readln(evb, &sz, EVBUFFER_EOL_CRLF_STRICT); - if (!cp || sz != strlen(cp) || - strcmp(cp, "x and a bad crlf\nand a good one")) - goto done; + tt_line_eq("x and a bad crlf\nand a good one"); free(cp); evbuffer_validate(evb); cp = evbuffer_readln(evb, &sz, EVBUFFER_EOL_CRLF_STRICT); - if (!cp || sz != strlen(cp) || strcmp(cp, "")) - goto done; + tt_line_eq(""); free(cp); evbuffer_validate(evb); cp = evbuffer_readln(evb, &sz, EVBUFFER_EOL_CRLF_STRICT); - if (cp) - goto done; + tt_assert(!cp); free(cp); evbuffer_validate(evb); evbuffer_add(evb, "\n", 1); evbuffer_validate(evb); cp = evbuffer_readln(evb, &sz, EVBUFFER_EOL_CRLF_STRICT); - if (!cp || sz != strlen(cp) || strcmp(cp, "More")) - goto done; + tt_line_eq("More"); free(cp); - if (EVBUFFER_LENGTH(evb) != 0) - goto done; + tt_assert(EVBUFFER_LENGTH(evb) == 0); evbuffer_validate(evb); /* Test LF */ @@ -391,26 +370,22 @@ test_evbuffer_readln(void) evbuffer_validate(evb); cp = evbuffer_readln(evb, &sz, EVBUFFER_EOL_LF); - if (!cp || sz != strlen(cp) || strcmp(cp, "An\rand a nl")) - goto done; + tt_line_eq("An\rand a nl"); free(cp); evbuffer_validate(evb); cp = evbuffer_readln(evb, &sz, EVBUFFER_EOL_LF); - if (!cp || sz != strlen(cp) || strcmp(cp, "")) - goto done; + tt_line_eq(""); free(cp); evbuffer_validate(evb); cp = evbuffer_readln(evb, &sz, EVBUFFER_EOL_LF); - if (cp) - goto done; + tt_assert(!cp); free(cp); evbuffer_add(evb, "\n", 1); evbuffer_validate(evb); cp = evbuffer_readln(evb, &sz, EVBUFFER_EOL_LF); - if (!cp || sz != strlen(cp) || strcmp(cp, "Text")) - goto done; + tt_line_eq("Text"); free(cp); evbuffer_validate(evb); @@ -432,43 +407,36 @@ test_evbuffer_readln(void) evbuffer_validate(evb); cp = evbuffer_readln(evb, &sz, EVBUFFER_EOL_CRLF_STRICT); - if (!cp || sz != strlen(cp) || - strcmp(cp, " and a bad crlf\nand a good one")) - goto done; + tt_line_eq(" and a bad crlf\nand a good one"); free(cp); evbuffer_validate(evb); cp = evbuffer_readln(evb, &sz, EVBUFFER_EOL_CRLF_STRICT); - if (!cp || sz != strlen(cp) || strcmp(cp, "")) - goto done; + tt_line_eq(""); free(cp); evbuffer_validate(evb); cp = evbuffer_readln(evb, &sz, EVBUFFER_EOL_CRLF_STRICT); - if (cp) - goto done; + tt_assert(!cp); free(cp); evbuffer_validate(evb); evbuffer_add(evb, "\n", 1); evbuffer_validate(evb); cp = evbuffer_readln(evb, &sz, EVBUFFER_EOL_CRLF_STRICT); - if (!cp || sz != strlen(cp) || strcmp(cp, "More")) - goto done; + tt_line_eq("More"); free(cp); cp = NULL; evbuffer_validate(evb); - if (EVBUFFER_LENGTH(evb) != 0) - goto done; - + tt_assert(EVBUFFER_LENGTH(evb) == 0); test_ok = 1; - done: + end: evbuffer_free(evb); evbuffer_free(evb_tmp); if (cp) free(cp); } static void -test_evbuffer_iterative(void) +test_evbuffer_iterative(void *ptr) { struct evbuffer *buf = evbuffer_new(); const char *abc = "abcdefghijklmnopqrstvuwxyzabcdefghijklmnopqrstvuwxyzabcdefghijklmnopqrstvuwxyzabcdefghijklmnopqrstvuwxyz"; @@ -487,9 +455,9 @@ test_evbuffer_iterative(void) } } - if (sum == EVBUFFER_LENGTH(buf)) - test_ok = 1; + tt_uint_op(sum, ==, EVBUFFER_LENGTH(buf)); + end: evbuffer_free(buf); } @@ -540,14 +508,11 @@ end: } struct testcase_t evbuffer_testcases[] = { - /* These need to fork because of evbuffer_validate. Otherwise - * they'd be fine in the main process, since they don't mess - * with global state. */ - LEGACY(evbuffer, TT_FORK), - LEGACY(evbuffer_reference, TT_FORK), - LEGACY(evbuffer_iterative, TT_FORK), - LEGACY(evbuffer_readln, TT_FORK), - { "evbuffer_find", test_evbuffer_find, TT_FORK, NULL, NULL }, + { "evbuffer", test_evbuffer, 0, NULL, NULL }, + { "reference", test_evbuffer_reference, 0, NULL, NULL }, + { "iterative", test_evbuffer_iterative, 0, NULL, NULL }, + { "readln", test_evbuffer_readln, 0, NULL, NULL }, + { "find", test_evbuffer_find, 0, NULL, NULL }, END_OF_TESTCASES };