Make unit test for add_file able to tell "error" from "done"

Importantly, we don't actually want to call evbuffer_write() when
the buffer is empty.  This makes it an error to ever get a -1 return
value from evbuffer_add_file(), which makes it safe for us to test
the return value.
This commit is contained in:
Nick Mathewson 2010-05-08 19:09:09 -04:00
parent 384d124581
commit 88a543fc19

View File

@ -593,8 +593,10 @@ test_evbuffer_add_file(void *ptr)
const char *impl = ptr;
struct evbuffer *src = evbuffer_new();
const char *data = "this is what we add as file system data.";
size_t datalen;
const char *compare;
evutil_socket_t fd, pair[2];
int r=0, n_written=0;
/* Add a test for a big file. XXXX */
@ -618,24 +620,29 @@ test_evbuffer_add_file(void *ptr)
if (evutil_socketpair(AF_UNIX, SOCK_STREAM, 0, pair) == -1)
tt_abort_msg("socketpair failed");
fd = regress_make_tmpfile(data, strlen(data));
datalen = strlen(data);
fd = regress_make_tmpfile(data, datalen);
tt_assert(fd != -1);
tt_assert(evbuffer_add_file(src, fd, 0, strlen(data)) != -1);
tt_assert(evbuffer_add_file(src, fd, 0, datalen) != -1);
evbuffer_validate(src);
while (evbuffer_write(src, pair[0]) > 0) {
while (evbuffer_get_length(src) &&
(r = evbuffer_write(src, pair[0])) > 0) {
evbuffer_validate(src);
n_written += r;
}
tt_int_op(r, !=, -1);
tt_int_op(n_written, ==, datalen);
evbuffer_validate(src);
tt_assert(evbuffer_read(src, pair[1], strlen(data)) == strlen(data));
tt_assert(evbuffer_read(src, pair[1], strlen(data)) == datalen);
evbuffer_validate(src);
compare = (char *)evbuffer_pullup(src, strlen(data));
compare = (char *)evbuffer_pullup(src, datalen);
tt_assert(compare != NULL);
if (memcmp(compare, data, strlen(data)))
if (memcmp(compare, data, datalen))
tt_abort_msg("Data from add_file differs.");
evbuffer_validate(src);