test/buffer: evbuffer_remove_buffer() with empty chains (evbuffer_add_buffer())

Using:
- evbuffer_add()
- evbuffer_add_buffer() -- the one that has problem
- evbuffer_add_reference() -- the only one that allows empty chains to be added
- evbuffer_remove_buffer()
This commit is contained in:
Azat Khuzhin 2016-06-07 14:56:32 +03:00
parent 2a4bf29470
commit 2880ce6a03

View File

@ -323,6 +323,47 @@ end:
evbuffer_free(dst);
}
static void
test_evbuffer_remove_buffer_with_empty2(void *ptr)
{
struct evbuffer *src = evbuffer_new();
struct evbuffer *dst = evbuffer_new();
struct evbuffer *buf = evbuffer_new();
evbuffer_add(buf, "foo", 3);
evbuffer_add_reference(buf, "foo", 3, NULL, NULL);
evbuffer_add_reference(src, "foo", 3, NULL, NULL);
evbuffer_add_reference(src, NULL, 0, NULL, NULL);
evbuffer_add_buffer(src, buf);
evbuffer_add(buf, "foo", 3);
evbuffer_add_reference(buf, "foo", 3, NULL, NULL);
evbuffer_add_reference(dst, "foo", 3, NULL, NULL);
evbuffer_add_reference(dst, NULL, 0, NULL, NULL);
evbuffer_add_buffer(dst, buf);
tt_int_op(evbuffer_get_length(src), ==, 9);
tt_int_op(evbuffer_get_length(dst), ==, 9);
evbuffer_validate(src);
evbuffer_validate(dst);
evbuffer_remove_buffer(src, dst, 8);
evbuffer_validate(src);
evbuffer_validate(dst);
tt_int_op(evbuffer_get_length(src), ==, 1);
tt_int_op(evbuffer_get_length(dst), ==, 17);
end:
evbuffer_free(src);
evbuffer_free(dst);
evbuffer_free(buf);
}
static void
test_evbuffer_reserve2(void *ptr)
{
@ -2343,6 +2384,7 @@ static const struct testcase_setup_t nil_setup = {
struct testcase_t evbuffer_testcases[] = {
{ "evbuffer", test_evbuffer, 0, NULL, NULL },
{ "remove_buffer_with_empty", test_evbuffer_remove_buffer_with_empty, 0, NULL, NULL },
{ "remove_buffer_with_empty2", test_evbuffer_remove_buffer_with_empty2, 0, NULL, NULL },
{ "reserve2", test_evbuffer_reserve2, 0, NULL, NULL },
{ "reserve_many", test_evbuffer_reserve_many, 0, NULL, NULL },
{ "reserve_many2", test_evbuffer_reserve_many, 0, &nil_setup, (void*)"add" },