Change evbuffer callbacks to use tinytest natively and never assert.

svn:r1088
This commit is contained in:
Nick Mathewson 2009-02-01 01:07:22 +00:00
parent a30c9eb1ac
commit ca37fef951

View File

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