From: Michał Kępień Date: Tue, 30 Oct 2018 12:33:25 +0000 (+0100) Subject: Add unit tests for isc_buffer_copyregion() X-Git-Tag: v9.13.4~70^2~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=15440d8027cdbc5557e6c71a389e1aa69d2b6f50;p=thirdparty%2Fbind9.git Add unit tests for isc_buffer_copyregion() Add some basic checks for isc_buffer_copyregion() to ensure it behaves as expected for both fixed-size buffers and buffers which can be automatically reallocated. Adjust the list of headers included by lib/isc/tests/buffer_test.c so that it matches what that test program really uses. --- diff --git a/lib/isc/tests/buffer_test.c b/lib/isc/tests/buffer_test.c index 34145d7bccf..89009e0a9d1 100644 --- a/lib/isc/tests/buffer_test.c +++ b/lib/isc/tests/buffer_test.c @@ -10,17 +10,20 @@ */ #include + +#include +#include #include -#include -#include +#include #include #include "isctest.h" #include -#include +#include #include +#include ATF_TC(isc_buffer_reserve); ATF_TC_HEAD(isc_buffer_reserve, tc) { @@ -158,6 +161,51 @@ ATF_TC_BODY(isc_buffer_dynamic, tc) { isc_test_end(); } +ATF_TC(isc_buffer_copyregion); +ATF_TC_HEAD(isc_buffer_copyregion, tc) { + atf_tc_set_md_var(tc, "descr", "copy a region into a buffer"); +} + +ATF_TC_BODY(isc_buffer_copyregion, tc) { + unsigned char data[] = { 0x11, 0x22, 0x33, 0x44 }; + isc_buffer_t *b = NULL; + isc_result_t result; + + isc_region_t r = { + .base = data, + .length = sizeof(data), + }; + + result = isc_test_begin(NULL, true, 0); + ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + + result = isc_buffer_allocate(mctx, &b, sizeof(data)); + ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + + /* + * Fill originally allocated buffer space. + */ + result = isc_buffer_copyregion(b, &r); + ATF_CHECK_EQ(result, ISC_R_SUCCESS); + + /* + * Appending more data to the buffer should fail. + */ + result = isc_buffer_copyregion(b, &r); + ATF_CHECK_EQ(result, ISC_R_NOSPACE); + + /* + * Enable auto reallocation and retry. Appending should now succeed. + */ + isc_buffer_setautorealloc(b, true); + result = isc_buffer_copyregion(b, &r); + ATF_CHECK_EQ(result, ISC_R_SUCCESS); + + isc_buffer_free(&b); + + isc_test_end(); +} + ATF_TC(isc_buffer_printf); ATF_TC_HEAD(isc_buffer_printf, tc) { atf_tc_set_md_var(tc, "descr", "printf() into a buffer"); @@ -278,6 +326,7 @@ ATF_TC_BODY(isc_buffer_printf, tc) { ATF_TP_ADD_TCS(tp) { ATF_TP_ADD_TC(tp, isc_buffer_reserve); ATF_TP_ADD_TC(tp, isc_buffer_dynamic); + ATF_TP_ADD_TC(tp, isc_buffer_copyregion); ATF_TP_ADD_TC(tp, isc_buffer_printf); return (atf_no_error()); }