/* Resolve query and check answer for sanity (2 TAP tests). */ static void exec_query(knot_process_t *query_ctx, const char *name, const uint8_t *query, uint16_t query_len, uint8_t expected_rcode) { uint16_t answer_len = KNOT_WIRE_MAX_PKTSIZE; uint8_t answer[KNOT_WIRE_MAX_PKTSIZE]; /* Input packet. */ int state = knot_process_in(query, query_len, query_ctx); ok(state & (NS_PROC_FULL|NS_PROC_FAIL), "ns: process %s query", name); /* Create answer. */ state = knot_process_out(answer, &answer_len, query_ctx); if (state & NS_PROC_FAIL) { /* Allow 1 generic error response. */ answer_len = KNOT_WIRE_MAX_PKTSIZE; state = knot_process_out(answer, &answer_len, query_ctx); } ok(state == NS_PROC_DONE, "ns: answer %s query", name); /* Check answer. */ answer_sanity_check(query, answer, answer_len, expected_rcode, name); }
/* Resolve query and check answer for sanity (2 TAP tests). */ static void exec_query(knot_layer_t *query_ctx, const char *name, knot_pkt_t *query, uint8_t expected_rcode) { knot_pkt_t *answer = knot_pkt_new(NULL, KNOT_WIRE_MAX_PKTSIZE, NULL); assert(answer); /* Input packet. */ knot_pkt_parse(query, 0); int state = knot_layer_consume(query_ctx, query); ok(state & (KNOT_STATE_PRODUCE|KNOT_STATE_FAIL), "ns: process %s query", name); /* Create answer. */ state = knot_layer_produce(query_ctx, answer); if (state & KNOT_STATE_FAIL) { /* Allow 1 generic error response. */ state = knot_layer_produce(query_ctx, answer); } ok(state == KNOT_STATE_DONE, "ns: answer %s query", name); /* Check answer. */ answer_sanity_check(query->wire, answer->wire, answer->size, expected_rcode, name); knot_pkt_free(&answer); }