mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-08-30 14:07:59 +00:00
Mimic nzf_append from bin/named/server.c
nzf_append is conditionally compiled and this is intended to catch error introduced by changes to the called functions on all systems before the changes are run through the CI.
This commit is contained in:
@@ -27,6 +27,8 @@
|
||||
#include <isc/lex.h>
|
||||
#include <isc/log.h>
|
||||
#include <isc/mem.h>
|
||||
#include <isc/print.h>
|
||||
#include <isc/string.h>
|
||||
#include <isc/types.h>
|
||||
#include <isc/util.h>
|
||||
|
||||
@@ -56,6 +58,7 @@ static isc_logcategory_t categories[] = { { "", 0 },
|
||||
static void
|
||||
cleanup(void) {
|
||||
if (lctx != NULL) {
|
||||
isc_log_setcontext(NULL);
|
||||
isc_log_destroy(&lctx);
|
||||
}
|
||||
if (mctx != NULL) {
|
||||
@@ -92,6 +95,92 @@ cleanup:
|
||||
return (result);
|
||||
}
|
||||
|
||||
static int
|
||||
_setup(void **state) {
|
||||
isc_result_t result;
|
||||
|
||||
UNUSED(state);
|
||||
|
||||
result = setup();
|
||||
assert_int_equal(result, ISC_R_SUCCESS);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
static int
|
||||
_teardown(void **state) {
|
||||
UNUSED(state);
|
||||
|
||||
cleanup();
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
/* mimic calling nzf_append() */
|
||||
static void
|
||||
append(void *arg, const char *str, int len) {
|
||||
char *buf = arg;
|
||||
size_t l = strlen(buf);
|
||||
snprintf(buf + l, 1024 - l, "%.*s", len, str);
|
||||
}
|
||||
|
||||
static void
|
||||
addzoneconf(void **state) {
|
||||
isc_result_t result;
|
||||
isc_buffer_t b;
|
||||
cfg_parser_t *p = NULL;
|
||||
const char *tests[] = {
|
||||
"zone \"test4.baz\" { type master; file \"e.db\"; };",
|
||||
"zone \"test/.baz\" { type master; file \"e.db\"; };",
|
||||
"zone \"test\\\".baz\" { type master; file \"e.db\"; };",
|
||||
"zone \"test\\.baz\" { type master; file \"e.db\"; };",
|
||||
"zone \"test\\\\.baz\" { type master; file \"e.db\"; };",
|
||||
"zone \"test\\032.baz\" { type master; file \"e.db\"; };",
|
||||
"zone \"test\\010.baz\" { type master; file \"e.db\"; };"
|
||||
};
|
||||
char buf[1024];
|
||||
|
||||
UNUSED(state);
|
||||
|
||||
/* Parse with default line numbering */
|
||||
result = cfg_parser_create(mctx, lctx, &p);
|
||||
assert_int_equal(result, ISC_R_SUCCESS);
|
||||
|
||||
#define ARRAYSIZE(x) (sizeof(x) / sizeof(x[0]))
|
||||
|
||||
for (size_t i = 0; i < ARRAYSIZE(tests); i++) {
|
||||
cfg_obj_t *conf = NULL;
|
||||
const cfg_obj_t *obj = NULL, *zlist = NULL;
|
||||
|
||||
isc_buffer_constinit(&b, tests[i], strlen(tests[i]));
|
||||
isc_buffer_add(&b, strlen(tests[i]));
|
||||
|
||||
result = cfg_parse_buffer(p, &b, "text1", 0,
|
||||
&cfg_type_namedconf, 0, &conf);
|
||||
assert_int_equal(result, ISC_R_SUCCESS);
|
||||
|
||||
/*
|
||||
* Mimic calling nzf_append() from bin/named/server.c
|
||||
* and check that the output matches the input.
|
||||
*/
|
||||
result = cfg_map_get(conf, "zone", &zlist);
|
||||
assert_int_equal(result, ISC_R_SUCCESS);
|
||||
|
||||
obj = cfg_listelt_value(cfg_list_first(zlist));
|
||||
assert_ptr_not_equal(obj, NULL);
|
||||
|
||||
strlcpy(buf, "zone ", sizeof(buf));
|
||||
cfg_printx(obj, CFG_PRINTER_ONELINE, append, buf);
|
||||
strlcat(buf, ";", sizeof(buf));
|
||||
assert_string_equal(tests[i], buf);
|
||||
|
||||
cfg_obj_destroy(p, &conf);
|
||||
cfg_parser_reset(p);
|
||||
}
|
||||
|
||||
cfg_parser_destroy(&p);
|
||||
}
|
||||
|
||||
/* test cfg_parse_buffer() */
|
||||
static void
|
||||
parse_buffer_test(void **state) {
|
||||
@@ -103,8 +192,6 @@ parse_buffer_test(void **state) {
|
||||
|
||||
UNUSED(state);
|
||||
|
||||
setup();
|
||||
|
||||
isc_buffer_init(&buf1, &text[0], sizeof(text) - 1);
|
||||
isc_buffer_add(&buf1, sizeof(text) - 1);
|
||||
|
||||
@@ -134,8 +221,6 @@ parse_buffer_test(void **state) {
|
||||
|
||||
cfg_parser_destroy(&p1);
|
||||
cfg_parser_destroy(&p2);
|
||||
|
||||
cleanup();
|
||||
}
|
||||
|
||||
/* test cfg_map_firstclause() */
|
||||
@@ -181,12 +266,13 @@ cfg_map_nextclause_test(void **state) {
|
||||
int
|
||||
main(void) {
|
||||
const struct CMUnitTest tests[] = {
|
||||
cmocka_unit_test(addzoneconf),
|
||||
cmocka_unit_test(parse_buffer_test),
|
||||
cmocka_unit_test(cfg_map_firstclause_test),
|
||||
cmocka_unit_test(cfg_map_nextclause_test),
|
||||
};
|
||||
|
||||
return (cmocka_run_group_tests(tests, NULL, NULL));
|
||||
return (cmocka_run_group_tests(tests, _setup, _teardown));
|
||||
}
|
||||
|
||||
#else /* HAVE_CMOCKA */
|
||||
|
Reference in New Issue
Block a user