mirror of
https://github.com/isc-projects/bind9.git
synced 2026-06-11 05:30:00 -04:00
update hooks tests to use NS_QUERY_RESET
Update hooks-related unit tests since the removal of NS_QUERY_QCTX_DESTROY and the introduction of NS_QUERY_RESET hook. This also simplifies (a bit) the plugin usage as NS_QUERY_RESET is _always_ called when the client plugin is about to be freed from memory.
This commit is contained in:
parent
95c71c2739
commit
125e3832bc
4 changed files with 24 additions and 66 deletions
|
|
@ -115,7 +115,7 @@ filter_prep_response_begin(void *arg, void *cbdata, isc_result_t *resp);
|
|||
static ns_hookresult_t
|
||||
filter_query_done_send(void *arg, void *cbdata, isc_result_t *resp);
|
||||
static ns_hookresult_t
|
||||
filter_qctx_destroy(void *arg, void *cbdata, isc_result_t *resp);
|
||||
filter_freeclientstate(void *arg, void *cbdata, isc_result_t *resp);
|
||||
|
||||
/*%
|
||||
* Register the functions to be called at each hook point in 'hooktable', using
|
||||
|
|
@ -151,12 +151,12 @@ install_hooks(ns_hooktable_t *hooktable, isc_mem_t *mctx,
|
|||
.action_data = inst,
|
||||
};
|
||||
|
||||
const ns_hook_t filter_destroy = {
|
||||
.action = filter_qctx_destroy,
|
||||
const ns_hook_t filter_reset = {
|
||||
.action = filter_freeclientstate,
|
||||
.action_data = inst,
|
||||
};
|
||||
|
||||
ns_hook_add(hooktable, mctx, NS_QUERY_QCTX_INITIALIZED, &filter_init);
|
||||
ns_hook_add(hooktable, mctx, NS_QUERY_SETUP, &filter_init);
|
||||
ns_hook_add(hooktable, mctx, NS_QUERY_AUTHZONE_ATTACHED, &filter_init);
|
||||
ns_hook_add(hooktable, mctx, NS_QUERY_RESPOND_BEGIN, &filter_respbegin);
|
||||
ns_hook_add(hooktable, mctx, NS_QUERY_RESPOND_ANY_FOUND,
|
||||
|
|
@ -164,7 +164,7 @@ install_hooks(ns_hooktable_t *hooktable, isc_mem_t *mctx,
|
|||
ns_hook_add(hooktable, mctx, NS_QUERY_PREP_RESPONSE_BEGIN,
|
||||
&filter_prepresp);
|
||||
ns_hook_add(hooktable, mctx, NS_QUERY_DONE_SEND, &filter_donesend);
|
||||
ns_hook_add(hooktable, mctx, NS_QUERY_QCTX_DESTROYED, &filter_destroy);
|
||||
ns_hook_add(hooktable, mctx, NS_QUERY_RESET, &filter_reset);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -862,16 +862,11 @@ filter_query_done_send(void *arg, void *cbdata, isc_result_t *resp) {
|
|||
* from hash table and return it to the memory pool.
|
||||
*/
|
||||
static ns_hookresult_t
|
||||
filter_qctx_destroy(void *arg, void *cbdata, isc_result_t *resp) {
|
||||
filter_freeclientstate(void *arg, void *cbdata, isc_result_t *resp) {
|
||||
query_ctx_t *qctx = (query_ctx_t *)arg;
|
||||
filter_instance_t *inst = (filter_instance_t *)cbdata;
|
||||
|
||||
*resp = ISC_R_UNSET;
|
||||
|
||||
if (!qctx->detach_client) {
|
||||
return NS_HOOK_CONTINUE;
|
||||
}
|
||||
|
||||
client_state_destroy(qctx, inst);
|
||||
|
||||
return NS_HOOK_CONTINUE;
|
||||
|
|
|
|||
|
|
@ -115,7 +115,7 @@ filter_prep_response_begin(void *arg, void *cbdata, isc_result_t *resp);
|
|||
static ns_hookresult_t
|
||||
filter_query_done_send(void *arg, void *cbdata, isc_result_t *resp);
|
||||
static ns_hookresult_t
|
||||
filter_qctx_destroy(void *arg, void *cbdata, isc_result_t *resp);
|
||||
filter_freeclientstate(void *arg, void *cbdata, isc_result_t *resp);
|
||||
|
||||
/*%
|
||||
* Register the functions to be called at each hook point in 'hooktable', using
|
||||
|
|
@ -151,12 +151,12 @@ install_hooks(ns_hooktable_t *hooktable, isc_mem_t *mctx,
|
|||
.action_data = inst,
|
||||
};
|
||||
|
||||
const ns_hook_t filter_destroy = {
|
||||
.action = filter_qctx_destroy,
|
||||
const ns_hook_t filter_reset = {
|
||||
.action = filter_freeclientstate,
|
||||
.action_data = inst,
|
||||
};
|
||||
|
||||
ns_hook_add(hooktable, mctx, NS_QUERY_QCTX_INITIALIZED, &filter_init);
|
||||
ns_hook_add(hooktable, mctx, NS_QUERY_SETUP, &filter_init);
|
||||
ns_hook_add(hooktable, mctx, NS_QUERY_AUTHZONE_ATTACHED, &filter_init);
|
||||
ns_hook_add(hooktable, mctx, NS_QUERY_RESPOND_BEGIN, &filter_respbegin);
|
||||
ns_hook_add(hooktable, mctx, NS_QUERY_RESPOND_ANY_FOUND,
|
||||
|
|
@ -164,7 +164,7 @@ install_hooks(ns_hooktable_t *hooktable, isc_mem_t *mctx,
|
|||
ns_hook_add(hooktable, mctx, NS_QUERY_PREP_RESPONSE_BEGIN,
|
||||
&filter_prepresp);
|
||||
ns_hook_add(hooktable, mctx, NS_QUERY_DONE_SEND, &filter_donesend);
|
||||
ns_hook_add(hooktable, mctx, NS_QUERY_QCTX_DESTROYED, &filter_destroy);
|
||||
ns_hook_add(hooktable, mctx, NS_QUERY_RESET, &filter_reset);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -865,16 +865,11 @@ filter_query_done_send(void *arg, void *cbdata, isc_result_t *resp) {
|
|||
* from hash table and return it to the memory pool.
|
||||
*/
|
||||
static ns_hookresult_t
|
||||
filter_qctx_destroy(void *arg, void *cbdata, isc_result_t *resp) {
|
||||
filter_freeclientstate(void *arg, void *cbdata, isc_result_t *resp) {
|
||||
query_ctx_t *qctx = (query_ctx_t *)arg;
|
||||
filter_instance_t *inst = (filter_instance_t *)cbdata;
|
||||
|
||||
*resp = ISC_R_UNSET;
|
||||
|
||||
if (!qctx->detach_client) {
|
||||
return NS_HOOK_CONTINUE;
|
||||
}
|
||||
|
||||
client_state_destroy(qctx, inst);
|
||||
|
||||
return NS_HOOK_CONTINUE;
|
||||
|
|
|
|||
|
|
@ -66,11 +66,11 @@ typedef struct state {
|
|||
* Forward declarations of functions referenced in install_hooks().
|
||||
*/
|
||||
static ns_hookresult_t
|
||||
async_qctx_initialize(void *arg, void *cbdata, isc_result_t *resp);
|
||||
async_query_setup(void *arg, void *cbdata, isc_result_t *resp);
|
||||
static ns_hookresult_t
|
||||
async_query_done_begin(void *arg, void *cbdata, isc_result_t *resp);
|
||||
static ns_hookresult_t
|
||||
async_qctx_destroy(void *arg, void *cbdata, isc_result_t *resp);
|
||||
async_query_reset(void *arg, void *cbdata, isc_result_t *resp);
|
||||
|
||||
/*%
|
||||
* Register the functions to be called at each hook point in 'hooktable', using
|
||||
|
|
@ -81,22 +81,22 @@ async_qctx_destroy(void *arg, void *cbdata, isc_result_t *resp);
|
|||
static void
|
||||
install_hooks(ns_hooktable_t *hooktable, isc_mem_t *mctx,
|
||||
async_instance_t *inst) {
|
||||
const ns_hook_t async_init = {
|
||||
.action = async_qctx_initialize,
|
||||
const ns_hook_t async_setup = {
|
||||
.action = async_query_setup,
|
||||
.action_data = inst,
|
||||
};
|
||||
const ns_hook_t async_donebegin = {
|
||||
.action = async_query_done_begin,
|
||||
.action_data = inst,
|
||||
};
|
||||
const ns_hook_t async_destroy = {
|
||||
.action = async_qctx_destroy,
|
||||
const ns_hook_t async_reset = {
|
||||
.action = async_query_reset,
|
||||
.action_data = inst,
|
||||
};
|
||||
|
||||
ns_hook_add(hooktable, mctx, NS_QUERY_QCTX_INITIALIZED, &async_init);
|
||||
ns_hook_add(hooktable, mctx, NS_QUERY_SETUP, &async_setup);
|
||||
ns_hook_add(hooktable, mctx, NS_QUERY_DONE_BEGIN, &async_donebegin);
|
||||
ns_hook_add(hooktable, mctx, NS_QUERY_QCTX_DESTROYED, &async_destroy);
|
||||
ns_hook_add(hooktable, mctx, NS_QUERY_RESET, &async_reset);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
@ -242,12 +242,12 @@ client_state_destroy(const query_ctx_t *qctx, async_instance_t *inst) {
|
|||
}
|
||||
|
||||
static ns_hookresult_t
|
||||
async_qctx_initialize(void *arg, void *cbdata, isc_result_t *resp) {
|
||||
async_query_setup(void *arg, void *cbdata, isc_result_t *resp) {
|
||||
query_ctx_t *qctx = (query_ctx_t *)arg;
|
||||
async_instance_t *inst = (async_instance_t *)cbdata;
|
||||
state_t *state = NULL;
|
||||
|
||||
logmsg("qctx init hook");
|
||||
logmsg("query setup hook");
|
||||
*resp = ISC_R_UNSET;
|
||||
|
||||
state = client_state_get(qctx, inst);
|
||||
|
|
@ -330,17 +330,12 @@ async_query_done_begin(void *arg, void *cbdata, isc_result_t *resp) {
|
|||
}
|
||||
|
||||
static ns_hookresult_t
|
||||
async_qctx_destroy(void *arg, void *cbdata, isc_result_t *resp) {
|
||||
async_query_reset(void *arg, void *cbdata, isc_result_t *resp) {
|
||||
query_ctx_t *qctx = (query_ctx_t *)arg;
|
||||
async_instance_t *inst = (async_instance_t *)cbdata;
|
||||
|
||||
logmsg("qctx destroy hook");
|
||||
logmsg("query reset hook");
|
||||
*resp = ISC_R_UNSET;
|
||||
|
||||
if (!qctx->detach_client) {
|
||||
return NS_HOOK_CONTINUE;
|
||||
}
|
||||
|
||||
client_state_destroy(qctx, inst);
|
||||
|
||||
return NS_HOOK_CONTINUE;
|
||||
|
|
|
|||
|
|
@ -828,20 +828,6 @@ hook_async_query_done_begin(void *arg, void *data, isc_result_t *resultp) {
|
|||
return hook_async_common(arg, data, resultp, NS_QUERY_DONE_BEGIN);
|
||||
}
|
||||
|
||||
/*
|
||||
* hook on destroying actx. Can't be used for async event, but we use this
|
||||
* to remember the qctx at that point.
|
||||
*/
|
||||
static ns_hookresult_t
|
||||
ns_test_qctx_destroy_hook(void *arg, void *data, isc_result_t *resultp) {
|
||||
query_ctx_t *qctx = arg;
|
||||
hookasync_data_t *asdata = data;
|
||||
|
||||
asdata->qctx = *qctx; /* remember passed ctx for inspection */
|
||||
*resultp = ISC_R_UNSET;
|
||||
return NS_HOOK_CONTINUE;
|
||||
}
|
||||
|
||||
static void
|
||||
run_hookasync_test(const ns__query_hookasync_test_params_t *test) {
|
||||
query_ctx_t *qctx = NULL;
|
||||
|
|
@ -856,10 +842,6 @@ run_hookasync_test(const ns__query_hookasync_test_params_t *test) {
|
|||
.action = test->action,
|
||||
.action_data = &asdata,
|
||||
};
|
||||
const ns_hook_t destroyhook = {
|
||||
.action = ns_test_qctx_destroy_hook,
|
||||
.action_data = &asdata,
|
||||
};
|
||||
isc_statscounter_t srvfail_cnt;
|
||||
bool expect_servfail = false;
|
||||
|
||||
|
|
@ -880,8 +862,6 @@ run_hookasync_test(const ns__query_hookasync_test_params_t *test) {
|
|||
ns_hook_add(ns__hook_table, isc_g_mctx, test->hookpoint2,
|
||||
&testhook);
|
||||
}
|
||||
ns_hook_add(ns__hook_table, isc_g_mctx, NS_QUERY_QCTX_DESTROYED,
|
||||
&destroyhook);
|
||||
|
||||
{
|
||||
const ns_test_qctx_create_params_t qctx_params = {
|
||||
|
|
@ -972,18 +952,11 @@ run_hookasync_test(const ns__query_hookasync_test_params_t *test) {
|
|||
|
||||
/*
|
||||
* Confirm SERVFAIL has been sent if it was expected.
|
||||
* Also, the last-generated qctx should have detach_client being true.
|
||||
*/
|
||||
if (expect_servfail) {
|
||||
INSIST(ns_stats_get_counter(
|
||||
qctx->client->manager->sctx->nsstats,
|
||||
ns_statscounter_servfail) == srvfail_cnt + 1);
|
||||
if (test->do_cancel) {
|
||||
/* qctx was created on resume and copied in hook */
|
||||
INSIST(asdata.qctx.detach_client);
|
||||
} else {
|
||||
INSIST(qctx->detach_client);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
|||
Loading…
Reference in a new issue