#include #include #include #include "ucore/dbuf.h" START_TEST (test_dbuf) { DBuf buf; int rc; rc = uc_dbuf_init(&buf, 10); fail_if(rc != 0); fail_if(uc_dbuf_buflen(&buf) != 10); fail_if(uc_dbuf_remaining(&buf) != 10); strcpy((char *)buf.end, "12345679"); uc_dbuf_added(&buf, 10); fail_if(uc_dbuf_len(&buf) != 10); fail_if(uc_dbuf_remaining(&buf) != 0); rc = uc_dbuf_ensure(&buf, 110); fail_if(rc != 0); fail_if(uc_dbuf_remaining(&buf) != 110); fail_if(uc_dbuf_buflen(&buf) != 120); rc = uc_dbuf_ensure(&buf, 5); fail_if(rc != 0); strcpy((char *)buf.end, "ABCD"); uc_dbuf_added(&buf, 5); uc_dbuf_take(&buf, 10); fail_if(uc_dbuf_remaining(&buf) != 105); fail_if(uc_dbuf_len(&buf) != 5); ck_assert_str_eq((char *)buf.start, "ABCD"); uc_dbuf_take(&buf, 5); fail_if(uc_dbuf_remaining(&buf) != 120); fail_if(uc_dbuf_buflen(&buf) != 120); fail_if(uc_dbuf_len(&buf) != 0); strcpy((char *)buf.end, "EFGH"); uc_dbuf_added(&buf, 5); uc_dbuf_trim(&buf); fail_if(uc_dbuf_buflen(&buf) != 5); fail_if(uc_dbuf_len(&buf) != 5); uc_dbuf_take(&buf, 1); rc = uc_dbuf_ensure(&buf, 10); fail_if(rc != 0); ck_assert_str_eq((char *)buf.start, "FGH"); uc_dbuf_take(&buf, 1); uc_dbuf_trim(&buf); ck_assert_str_eq((char *)buf.start, "GH"); fail_if(uc_dbuf_buflen(&buf) != 3); fail_if(uc_dbuf_len(&buf) != 3); uc_dbuf_free(&buf); } END_TEST START_TEST (test_dbuf_take_fail) { DBuf buf; int rc; rc = uc_dbuf_init(&buf, 10); fail_if(rc != 0); fail_if(uc_dbuf_buflen(&buf) != 10); fail_if(uc_dbuf_remaining(&buf) != 10); strcpy((char *)buf.end, "12345679"); uc_dbuf_added(&buf, 10); fail_if(uc_dbuf_len(&buf) != 10); fail_if(uc_dbuf_remaining(&buf) != 0); rc = uc_dbuf_take(&buf, 11); fail_if(rc == 0); uc_dbuf_free(&buf); } END_TEST START_TEST (test_dbuf_take_all) { DBuf buf; int rc; rc = uc_dbuf_init(&buf, 10); fail_if(rc != 0); fail_if(uc_dbuf_buflen(&buf) != 10); fail_if(uc_dbuf_remaining(&buf) != 10); strcpy((char *)buf.end, "12345679"); uc_dbuf_added(&buf, 10); fail_if(uc_dbuf_len(&buf) != 10); fail_if(uc_dbuf_remaining(&buf) != 0); rc = uc_dbuf_take(&buf, 10); fail_if(rc != 0); fail_if(uc_dbuf_len(&buf) != 0); fail_if(uc_dbuf_remaining(&buf) != 10); uc_dbuf_free(&buf); } END_TEST START_TEST (test_dbuf_add_ensure_take) { DBuf *buf; int rc; int i; buf = malloc(sizeof *buf); fail_if(buf == NULL); rc = uc_dbuf_init(buf, 10); fail_if(rc != 0); fail_if(uc_dbuf_buflen(buf) != 10); fail_if(uc_dbuf_remaining(buf) != 10); for (i = 0; i < 10; i++) { rc = uc_dbuf_ensure(buf,10); fail_if(rc != 0); uc_dbuf_added(buf, 2); fail_if(uc_dbuf_len(buf) != 2); fail_if(uc_dbuf_remaining(buf) != 8); uc_dbuf_added(buf, 8); fail_if(uc_dbuf_len(buf) != 10); fail_if(uc_dbuf_remaining(buf) != 0); rc = uc_dbuf_take(buf, 5); fail_if(rc != 0); fail_if(uc_dbuf_len(buf) != 5); rc = uc_dbuf_take(buf, 5); fail_if(rc != 0); fail_if(uc_dbuf_len(buf) != 0); fail_if(uc_dbuf_remaining(buf) != 10); } rc = uc_dbuf_ensure(buf,90); fail_if(rc != 0); //ok, dbuf adds the ensured capacity to the existing buflen //so it becomes 100, not 90 even though the buffer is already empty fail_if(uc_dbuf_remaining(buf) != 100, "remaining %zu", (uc_dbuf_remaining(buf))); fail_if(uc_dbuf_buflen(buf) != 100); memset(buf->end, 0xDE, 90); uc_dbuf_added(buf, 90); fail_if(uc_dbuf_remaining(buf) != 10); uc_dbuf_free(buf); free(buf); } END_TEST Suite *dbuf_suite(void) { Suite *s = suite_create("dbuf"); TCase *tc = tcase_create("dbuf tests"); tcase_add_test(tc, test_dbuf); tcase_add_test(tc, test_dbuf_take_all); tcase_add_test(tc, test_dbuf_add_ensure_take); #ifndef NDEBUG tcase_add_test_raise_signal(tc, test_dbuf_take_fail, SIGABRT); #else tcase_add_test(tc, test_dbuf_take_fail); #endif suite_add_tcase(s, tc); return s; }