Tests can handle multiple hosts. Tests for chaos and iterator.

git-svn-id: file:///svn/unbound/trunk@450 be551aaa-1e26-0410-a405-d3ace91eadb9
This commit is contained in:
Wouter Wijngaards 2007-07-25 12:31:04 +00:00
parent 84a1152109
commit 8b0bbc6691
9 changed files with 501 additions and 6 deletions

View File

@ -1,3 +1,8 @@
25 July 2007: Wouter
- testbound read ADDRESS and check it.
- test for version.bind and friends.
- test for iterator chaining through several referrals.
24 July 2007: Wouter 24 July 2007: Wouter
- Example section in config manual. - Example section in config manual.
- Addr stored for range and moment in replay. - Addr stored for range and moment in replay.

View File

@ -143,6 +143,10 @@ pending_matches_current(struct replay_runtime* runtime,
return 0; return 0;
/* see if any of the pending queries matches */ /* see if any of the pending queries matches */
for(p = runtime->pending_list; p; p = p->next) { for(p = runtime->pending_list; p; p = p->next) {
if(runtime->now->addrlen != 0 &&
sockaddr_cmp(&p->addr, p->addrlen, &runtime->now->addr,
runtime->now->addrlen) != 0)
continue;
if((e=find_match(runtime->now->match, p->pkt, p->transport))) { if((e=find_match(runtime->now->match, p->pkt, p->transport))) {
*entry = e; *entry = e;
*pend = p; *pend = p;
@ -167,10 +171,14 @@ pending_find_match(struct replay_runtime* runtime, struct entry** entry,
struct replay_range* p = runtime->scenario->range_list; struct replay_range* p = runtime->scenario->range_list;
while(p) { while(p) {
if(p->start_step <= timenow && timenow <= p->end_step && if(p->start_step <= timenow && timenow <= p->end_step &&
(p->addrlen == 0 || sockaddr_cmp(&p->addr, p->addrlen,
&pend->addr, pend->addrlen) == 0) &&
(*entry = find_match(p->match, pend->pkt, pend->transport))) { (*entry = find_match(p->match, pend->pkt, pend->transport))) {
log_info("matched query time %d in range [%d, %d] " log_info("matched query time %d in range [%d, %d] "
"with entry line %d", timenow, "with entry line %d", timenow,
p->start_step, p->end_step, (*entry)->lineno); p->start_step, p->end_step, (*entry)->lineno);
if(p->addrlen != 0)
log_addr("matched ip", &p->addr, p->addrlen);
return 1; return 1;
} }
p = p->next_range; p = p->next_range;
@ -192,6 +200,7 @@ pending_matches_range(struct replay_runtime* runtime,
struct fake_pending* p = runtime->pending_list; struct fake_pending* p = runtime->pending_list;
/* slow, O(N*N), but it works as advertised with weird matching */ /* slow, O(N*N), but it works as advertised with weird matching */
while(p) { while(p) {
log_info("check of pending");
if(pending_find_match(runtime, entry, p)) { if(pending_find_match(runtime, entry, p)) {
*pend = p; *pend = p;
return 1; return 1;
@ -266,6 +275,9 @@ answer_callback_from_entry(struct replay_runtime* runtime,
{ {
struct comm_point c; struct comm_point c;
struct comm_reply repinfo; struct comm_reply repinfo;
void* cb_arg = pend->cb_arg;
comm_point_callback_t* cb = pend->callback;
memset(&c, 0, sizeof(c)); memset(&c, 0, sizeof(c));
c.fd = -1; c.fd = -1;
c.buffer = ldns_buffer_new(runtime->bufsize); c.buffer = ldns_buffer_new(runtime->bufsize);
@ -276,11 +288,12 @@ answer_callback_from_entry(struct replay_runtime* runtime,
repinfo.c = &c; repinfo.c = &c;
repinfo.addrlen = pend->addrlen; repinfo.addrlen = pend->addrlen;
memcpy(&repinfo.addr, &pend->addr, pend->addrlen); memcpy(&repinfo.addr, &pend->addr, pend->addrlen);
if((*pend->callback)(&c, pend->cb_arg, NETEVENT_NOERROR, &repinfo)) { if(!pend->serviced)
pending_list_delete(runtime, pend);
if((*cb)(&c, cb_arg, NETEVENT_NOERROR, &repinfo)) {
fatal_exit("testbound: unexpected: callback returned 1"); fatal_exit("testbound: unexpected: callback returned 1");
} }
ldns_buffer_free(c.buffer); ldns_buffer_free(c.buffer);
pending_list_delete(runtime, pend);
} }
/** Check the now moment answer check event */ /** Check the now moment answer check event */
@ -295,7 +308,10 @@ answer_check_it(struct replay_runtime* runtime)
enum transport_type tr = transport_tcp; enum transport_type tr = transport_tcp;
if(ans->repinfo.c->type == comm_udp) if(ans->repinfo.c->type == comm_udp)
tr = transport_udp; tr = transport_udp;
if(find_match(runtime->now->match, ans->pkt, tr)) { if((runtime->now->addrlen == 0 || sockaddr_cmp(
&runtime->now->addr, runtime->now->addrlen,
&ans->repinfo.addr, ans->repinfo.addrlen) == 0) &&
find_match(runtime->now->match, ans->pkt, tr)) {
struct replay_answer *n = ans->next; struct replay_answer *n = ans->next;
log_info("testbound matched event entry from line %d", log_info("testbound matched event entry from line %d",
runtime->now->match->lineno); runtime->now->match->lineno);
@ -330,6 +346,10 @@ fake_front_query(struct replay_runtime* runtime, struct replay_moment *todo)
memset(&repinfo, 0, sizeof(repinfo)); memset(&repinfo, 0, sizeof(repinfo));
repinfo.c = (struct comm_point*)calloc(1, sizeof(struct comm_point)); repinfo.c = (struct comm_point*)calloc(1, sizeof(struct comm_point));
repinfo.addrlen = (socklen_t)sizeof(struct sockaddr_in); repinfo.addrlen = (socklen_t)sizeof(struct sockaddr_in);
if(todo->addrlen != 0) {
repinfo.addrlen = todo->addrlen;
memcpy(&repinfo.addr, &todo->addr, todo->addrlen);
}
repinfo.c->fd = -1; repinfo.c->fd = -1;
repinfo.c->ev = (struct internal_event*)runtime; repinfo.c->ev = (struct internal_event*)runtime;
repinfo.c->buffer = ldns_buffer_new(runtime->bufsize); repinfo.c->buffer = ldns_buffer_new(runtime->bufsize);
@ -484,6 +504,10 @@ run_scenario(struct replay_runtime* runtime)
} while(runtime->now); } while(runtime->now);
if(runtime->pending_list) { if(runtime->pending_list) {
struct fake_pending* p;
log_err("testbound: there are still messages pending.");
for(p = runtime->pending_list; p; p=p->next)
log_pkt("pending msg", p->pkt);
fatal_exit("testbound: there are still messages pending."); fatal_exit("testbound: there are still messages pending.");
} }
if(runtime->answer_list) { if(runtime->answer_list) {
@ -698,6 +722,7 @@ pending_udp_query(struct outside_network* outnet, ldns_buffer* packet,
pend->timeout = timeout/1000; pend->timeout = timeout/1000;
pend->transport = transport_udp; pend->transport = transport_udp;
pend->pkt = NULL; pend->pkt = NULL;
pend->serviced = 0;
pend->runtime = runtime; pend->runtime = runtime;
status = ldns_buffer2pkt_wire(&pend->pkt, packet); status = ldns_buffer2pkt_wire(&pend->pkt, packet);
if(status != LDNS_STATUS_OK) { if(status != LDNS_STATUS_OK) {
@ -709,6 +734,9 @@ pending_udp_query(struct outside_network* outnet, ldns_buffer* packet,
/* see if it matches the current moment */ /* see if it matches the current moment */
if(runtime->now && runtime->now->evt_type == repevt_back_query && if(runtime->now && runtime->now->evt_type == repevt_back_query &&
(runtime->now->addrlen == 0 || sockaddr_cmp(
&runtime->now->addr, runtime->now->addrlen,
&pend->addr, pend->addrlen) == 0) &&
find_match(runtime->now->match, pend->pkt, pend->transport)) { find_match(runtime->now->match, pend->pkt, pend->transport)) {
log_info("testbound: matched pending to event. " log_info("testbound: matched pending to event. "
"advance time between events."); "advance time between events.");
@ -748,6 +776,7 @@ pending_tcp_query(struct outside_network* outnet, ldns_buffer* packet,
pend->transport = transport_tcp; pend->transport = transport_tcp;
pend->pkt = NULL; pend->pkt = NULL;
pend->runtime = runtime; pend->runtime = runtime;
pend->serviced = 0;
status = ldns_buffer2pkt_wire(&pend->pkt, packet); status = ldns_buffer2pkt_wire(&pend->pkt, packet);
if(status != LDNS_STATUS_OK) { if(status != LDNS_STATUS_OK) {
log_err("ldns error parsing tcp output packet: %s", log_err("ldns error parsing tcp output packet: %s",
@ -758,6 +787,9 @@ pending_tcp_query(struct outside_network* outnet, ldns_buffer* packet,
/* see if it matches the current moment */ /* see if it matches the current moment */
if(runtime->now && runtime->now->evt_type == repevt_back_query && if(runtime->now && runtime->now->evt_type == repevt_back_query &&
(runtime->now->addrlen == 0 || sockaddr_cmp(
&runtime->now->addr, runtime->now->addrlen,
&pend->addr, pend->addrlen) == 0) &&
find_match(runtime->now->match, pend->pkt, pend->transport)) { find_match(runtime->now->match, pend->pkt, pend->transport)) {
log_info("testbound: matched pending to event. " log_info("testbound: matched pending to event. "
"advance time between events."); "advance time between events.");
@ -820,6 +852,7 @@ struct serviced_query* outnet_serviced_query(struct outside_network* outnet,
pend->transport = transport_udp; /* pretend UDP */ pend->transport = transport_udp; /* pretend UDP */
pend->pkt = NULL; pend->pkt = NULL;
pend->runtime = runtime; pend->runtime = runtime;
pend->serviced = 1;
status = ldns_buffer2pkt_wire(&pend->pkt, pend->buffer); status = ldns_buffer2pkt_wire(&pend->pkt, pend->buffer);
if(status != LDNS_STATUS_OK) { if(status != LDNS_STATUS_OK) {
log_err("ldns error parsing serviced output packet: %s", log_err("ldns error parsing serviced output packet: %s",
@ -830,6 +863,9 @@ struct serviced_query* outnet_serviced_query(struct outside_network* outnet,
/* see if it matches the current moment */ /* see if it matches the current moment */
if(runtime->now && runtime->now->evt_type == repevt_back_query && if(runtime->now && runtime->now->evt_type == repevt_back_query &&
(runtime->now->addrlen == 0 || sockaddr_cmp(
&runtime->now->addr, runtime->now->addrlen,
&pend->addr, pend->addrlen) == 0) &&
find_match(runtime->now->match, pend->pkt, pend->transport)) { find_match(runtime->now->match, pend->pkt, pend->transport)) {
log_info("testbound: matched pending to event. " log_info("testbound: matched pending to event. "
"advance time between events."); "advance time between events.");
@ -854,10 +890,10 @@ void outnet_serviced_query_stop(struct serviced_query* sq, void* cb_arg)
while(p) { while(p) {
if(p == pend) { if(p == pend) {
log_assert(p->cb_arg == cb_arg); log_assert(p->cb_arg == cb_arg);
log_info("serviced pending delete");
if(prev) if(prev)
prev->next = p->next; prev->next = p->next;
else runtime->pending_list = p->next; else runtime->pending_list = p->next;
log_pkt("deleted pending serviced query.", p->pkt);
ldns_buffer_free(p->buffer); ldns_buffer_free(p->buffer);
ldns_pkt_free(p->pkt); ldns_pkt_free(p->pkt);
free(p); free(p);
@ -866,7 +902,7 @@ void outnet_serviced_query_stop(struct serviced_query* sq, void* cb_arg)
prev = p; prev = p;
p = p->next; p = p->next;
} }
log_pkt("double delet of pending serviced query", p->pkt); log_info("double delete of pending serviced query");
} }
struct listen_port* listening_ports_open(struct config_file* ATTR_UNUSED(cfg)) struct listen_port* listening_ports_open(struct config_file* ATTR_UNUSED(cfg))

View File

@ -157,6 +157,8 @@ static void replyline(const char* line, ldns_pkt *reply)
ldns_pkt_set_rcode(reply, LDNS_RCODE_NXDOMAIN); ldns_pkt_set_rcode(reply, LDNS_RCODE_NXDOMAIN);
} else if(str_keyword(&parse, "NOTIMPL")) { } else if(str_keyword(&parse, "NOTIMPL")) {
ldns_pkt_set_rcode(reply, LDNS_RCODE_NOTIMPL); ldns_pkt_set_rcode(reply, LDNS_RCODE_NOTIMPL);
} else if(str_keyword(&parse, "REFUSED")) {
ldns_pkt_set_rcode(reply, LDNS_RCODE_REFUSED);
} else if(str_keyword(&parse, "YXDOMAIN")) { } else if(str_keyword(&parse, "YXDOMAIN")) {
ldns_pkt_set_rcode(reply, LDNS_RCODE_YXDOMAIN); ldns_pkt_set_rcode(reply, LDNS_RCODE_YXDOMAIN);
} else if(str_keyword(&parse, "YXRRSET")) { } else if(str_keyword(&parse, "YXRRSET")) {

View File

@ -41,6 +41,7 @@
#include "config.h" #include "config.h"
#include "util/log.h" #include "util/log.h"
#include "util/net_help.h"
#include "testcode/replay.h" #include "testcode/replay.h"
#include "testcode/ldns-testpkts.h" #include "testcode/ldns-testpkts.h"
@ -85,6 +86,18 @@ replay_range_delete(struct replay_range* rng)
free(rng); free(rng);
} }
/** strip whitespace from end of string */
static void
strip_end_white(char* p)
{
size_t i;
for(i = strlen(p); i > 0; i--) {
if(isspace(p[i-1]))
p[i-1] = 0;
else return;
}
}
/** /**
* Read a range from file. * Read a range from file.
* @param remain: Rest of line (after RANGE keyword). * @param remain: Rest of line (after RANGE keyword).
@ -124,6 +137,19 @@ replay_range_read(char* remain, FILE* in, const char* name, int* lineno,
parse++; parse++;
if(!*parse || *parse == ';') if(!*parse || *parse == ';')
continue; continue;
if(parse_keyword(&parse, "ADDRESS")) {
while(isspace(*parse))
parse++;
strip_end_white(parse);
if(!extstrtoaddr(parse, &rng->addr, &rng->addrlen)) {
log_err("Line %d: could not read ADDRESS: %s",
*lineno, parse);
free(rng);
return NULL;
}
pos = ftello(in);
continue;
}
if(parse_keyword(&parse, "RANGE_END")) { if(parse_keyword(&parse, "RANGE_END")) {
return rng; return rng;
} }
@ -198,6 +224,16 @@ replay_moment_read(char* remain, FILE* in, const char* name, int* lineno,
free(mom); free(mom);
return NULL; return NULL;
} }
while(isspace(*remain))
remain++;
if(parse_keyword(&remain, "ADDRESS")) {
if(!extstrtoaddr(remain, &mom->addr, &mom->addrlen)) {
log_err("line %d: could not parse ADDRESS: %s",
*lineno, remain);
free(mom);
return NULL;
}
}
if(readentry) { if(readentry) {
mom->match = read_entry(in, name, lineno, ttl, or, prev); mom->match = read_entry(in, name, lineno, ttl, or, prev);

View File

@ -44,11 +44,13 @@
* ; comment line. * ; comment line.
* SCENARIO_BEGIN name_of_scenario * SCENARIO_BEGIN name_of_scenario
* RANGE_BEGIN start_time end_time * RANGE_BEGIN start_time end_time
* ; give ip of the virtual server, it matches any ip if not present.
* ADDRESS ip_address
* match_entries * match_entries
* RANGE_END * RANGE_END
* ; more RANGE items. * ; more RANGE items.
* ; go to the next moment * ; go to the next moment
* STEP time_step event_type * STEP time_step event_type [ADDRESS ip_address]
* ; event_type can be: * ; event_type can be:
* o NOTHING - nothing * o NOTHING - nothing
* o QUERY - followed by entry * o QUERY - followed by entry
@ -254,6 +256,8 @@ struct fake_pending {
ldns_pkt* pkt; ldns_pkt* pkt;
/** by what transport was the query sent out */ /** by what transport was the query sent out */
enum transport_type transport; enum transport_type transport;
/** if this is a serviced query */
int serviced;
/** the runtime structure this is part of */ /** the runtime structure this is part of */
struct replay_runtime* runtime; struct replay_runtime* runtime;
}; };

178
testdata/iter_recurse.rpl vendored Normal file
View File

@ -0,0 +1,178 @@
; config options
stub-zone:
name: "."
stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
CONFIG_END
SCENARIO_BEGIN Test resolution with recursion for NS target.
; K.ROOT-SERVERS.NET.
RANGE_BEGIN 0 100
ADDRESS 193.0.14.129
ENTRY_BEGIN
MATCH opcode qtype qname
ADJUST copy_id
REPLY QR NOERROR
SECTION QUESTION
. IN NS
SECTION ANSWER
. IN NS K.ROOT-SERVERS.NET.
SECTION ADDITIONAL
K.ROOT-SERVERS.NET. IN A 193.0.14.129
ENTRY_END
ENTRY_BEGIN
MATCH opcode qtype qname
ADJUST copy_id
REPLY QR NOERROR
SECTION QUESTION
www.example.com. IN A
SECTION AUTHORITY
com. IN NS a.gtld-servers.net.
SECTION ADDITIONAL
a.gtld-servers.net. IN A 192.5.6.30
ENTRY_END
ENTRY_BEGIN
MATCH opcode qtype qname
ADJUST copy_id
REPLY QR NOERROR
SECTION QUESTION
ns.example.net. IN A
SECTION AUTHORITY
net. IN NS e.gtld-servers.net.
SECTION ADDITIONAL
e.gtld-servers.net. IN A 192.12.94.30
ENTRY_END
ENTRY_BEGIN
MATCH opcode qtype qname
ADJUST copy_id
REPLY QR NOERROR
SECTION QUESTION
ns.example.net. IN AAAA
SECTION AUTHORITY
net. IN NS e.gtld-servers.net.
SECTION ADDITIONAL
e.gtld-servers.net. IN A 192.12.94.30
ENTRY_END
RANGE_END
; a.gtld-servers.net.
RANGE_BEGIN 0 100
ADDRESS 192.5.6.30
ENTRY_BEGIN
MATCH opcode qtype qname
ADJUST copy_id
REPLY QR NOERROR
SECTION QUESTION
www.example.com. IN A
SECTION AUTHORITY
example.com. IN NS ns.example.net.
ENTRY_END
RANGE_END
; e.gtld-servers.net.
RANGE_BEGIN 0 100
ADDRESS 192.12.94.30
ENTRY_BEGIN
MATCH opcode qtype qname
ADJUST copy_id
REPLY QR NOERROR
SECTION QUESTION
ns.example.net. IN A
SECTION AUTHORITY
example.net. IN NS ns.example.net.
SECTION ADDITIONAL
ns.example.net. IN A 1.2.3.44
ENTRY_END
ENTRY_BEGIN
MATCH opcode qtype qname
ADJUST copy_id
REPLY QR NOERROR
SECTION QUESTION
ns.example.net. IN AAAA
SECTION AUTHORITY
example.net. IN NS ns.example.net.
SECTION ADDITIONAL
ns.example.net. IN A 1.2.3.44
ENTRY_END
RANGE_END
; ns.example.net.
RANGE_BEGIN 0 100
ADDRESS 1.2.3.44
ENTRY_BEGIN
MATCH opcode qtype qname
ADJUST copy_id
REPLY QR NOERROR
SECTION QUESTION
ns.example.net. IN A
SECTION ANSWER
ns.example.net. IN A 1.2.3.44
SECTION AUTHORITY
example.net. IN NS ns.example.net.
ENTRY_END
ENTRY_BEGIN
MATCH opcode qtype qname
ADJUST copy_id
REPLY QR NOERROR
SECTION QUESTION
ns.example.net. IN AAAA
SECTION AUTHORITY
example.net. IN NS ns.example.net.
SECTION ADDITIONAL
www.example.net. IN A 1.2.3.44
ENTRY_END
ENTRY_BEGIN
MATCH opcode qtype qname
ADJUST copy_id
REPLY QR NOERROR
SECTION QUESTION
www.example.com. IN A
SECTION ANSWER
www.example.com. IN A 10.20.30.40
SECTION AUTHORITY
example.com. IN NS ns.example.net.
SECTION ADDITIONAL
ns.example.net IN A 1.2.3.44
ENTRY_END
RANGE_END
STEP 1 QUERY
ENTRY_BEGIN
REPLY RD
SECTION QUESTION
www.example.com. IN A
ENTRY_END
; recursion happens here.
STEP 20 CHECK_ANSWER
ENTRY_BEGIN
MATCH all
REPLY QR RD RA NOERROR
SECTION QUESTION
www.example.com. IN A
SECTION ANSWER
www.example.com. IN A 10.20.30.40
SECTION AUTHORITY
example.com. IN NS ns.example.net.
; scrubbed off
;SECTION ADDITIONAL
;ns.example.net IN A 1.2.3.44
ENTRY_END
; due to ordering of answer packets, this is still outstanding, remove it
STEP 21 CHECK_OUT_QUERY
ENTRY_BEGIN
ADJUST copy_id
MATCH qname qtype
REPLY QR
SECTION QUESTION
ns.example.net IN AAAA
ENTRY_END
SCENARIO_END

93
testdata/iter_resolve.rpl vendored Normal file
View File

@ -0,0 +1,93 @@
; config options
stub-zone:
name: "."
stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
CONFIG_END
SCENARIO_BEGIN Test basic iterative resolve of www.example.com.
; K.ROOT-SERVERS.NET.
RANGE_BEGIN 0 100
ADDRESS 193.0.14.129
ENTRY_BEGIN
MATCH opcode qtype qname
ADJUST copy_id
REPLY QR NOERROR
SECTION QUESTION
. IN NS
SECTION ANSWER
. IN NS K.ROOT-SERVERS.NET.
SECTION ADDITIONAL
K.ROOT-SERVERS.NET. IN A 193.0.14.129
ENTRY_END
ENTRY_BEGIN
MATCH opcode qtype qname
ADJUST copy_id
REPLY QR NOERROR
SECTION QUESTION
www.example.com. IN A
SECTION AUTHORITY
com. IN NS a.gtld-servers.net.
SECTION ADDITIONAL
a.gtld-servers.net. IN A 192.5.6.30
ENTRY_END
RANGE_END
; a.gtld-servers.net.
RANGE_BEGIN 0 100
ADDRESS 192.5.6.30
ENTRY_BEGIN
MATCH opcode qtype qname
ADJUST copy_id
REPLY QR NOERROR
SECTION QUESTION
www.example.com. IN A
SECTION AUTHORITY
example.com. IN NS ns.example.com.
SECTION ADDITIONAL
ns.example.com. IN A 1.2.3.4
ENTRY_END
RANGE_END
; ns.example.com.
RANGE_BEGIN 0 100
ADDRESS 1.2.3.4
ENTRY_BEGIN
MATCH opcode qtype qname
ADJUST copy_id
REPLY QR NOERROR
SECTION QUESTION
www.example.com. IN A
SECTION ANSWER
www.example.com. IN A 10.20.30.40
SECTION AUTHORITY
example.com. IN NS ns.example.com.
SECTION ADDITIONAL
ns.example.com. IN A 1.2.3.4
ENTRY_END
RANGE_END
STEP 1 QUERY
ENTRY_BEGIN
REPLY RD
SECTION QUESTION
www.example.com. IN A
ENTRY_END
; recursion happens here.
STEP 10 CHECK_ANSWER
ENTRY_BEGIN
MATCH all
REPLY QR RD RA NOERROR
SECTION QUESTION
www.example.com. IN A
SECTION ANSWER
www.example.com. IN A 10.20.30.40
SECTION AUTHORITY
example.com. IN NS ns.example.com.
SECTION ADDITIONAL
ns.example.com. IN A 1.2.3.4
ENTRY_END
SCENARIO_END

74
testdata/version_bind.rpl vendored Normal file
View File

@ -0,0 +1,74 @@
; config options
server:
hide-identity: no
hide-version: no
identity: "test-identity"
version: "test-version"
CONFIG_END
SCENARIO_BEGIN Test version.bind identity and version queries
; version.bind.
STEP 1 QUERY
ENTRY_BEGIN
SECTION QUESTION
version.bind. CH TXT
ENTRY_END
STEP 2 CHECK_ANSWER
ENTRY_BEGIN
MATCH all
REPLY QR RA
SECTION QUESTION
version.bind. CH TXT
SECTION ANSWER
version.bind. 0 CH TXT "test-version"
ENTRY_END
; version.server.
STEP 3 QUERY
ENTRY_BEGIN
SECTION QUESTION
version.server. CH TXT
ENTRY_END
STEP 4 CHECK_ANSWER
ENTRY_BEGIN
MATCH all
REPLY QR RA
SECTION QUESTION
version.server. CH TXT
SECTION ANSWER
version.server. 0 CH TXT "test-version"
ENTRY_END
; hostname.bind.
STEP 5 QUERY
ENTRY_BEGIN
SECTION QUESTION
hostname.bind. CH TXT
ENTRY_END
STEP 6 CHECK_ANSWER
ENTRY_BEGIN
MATCH all
REPLY QR RA
SECTION QUESTION
hostname.bind. CH TXT
SECTION ANSWER
hostname.bind. 0 CH TXT "test-identity"
ENTRY_END
; id.server.
STEP 7 QUERY
ENTRY_BEGIN
SECTION QUESTION
id.server. CH TXT
ENTRY_END
STEP 8 CHECK_ANSWER
ENTRY_BEGIN
MATCH all
REPLY QR RA
SECTION QUESTION
id.server. CH TXT
SECTION ANSWER
id.server. 0 CH TXT "test-identity"
ENTRY_END
SCENARIO_END

67
testdata/version_bind_hide.rpl vendored Normal file
View File

@ -0,0 +1,67 @@
; config options
server:
hide-identity: yes
hide-version: yes
identity: "test-identity"
version: "test-version"
; we rely on the fact that there are no builtin stubs for class CH.
CONFIG_END
SCENARIO_BEGIN Test config hide options for identity and version queries
; version.bind.
STEP 1 QUERY
ENTRY_BEGIN
SECTION QUESTION
version.bind. CH TXT
ENTRY_END
STEP 2 CHECK_ANSWER
ENTRY_BEGIN
MATCH all
REPLY QR RA REFUSED
SECTION QUESTION
version.bind. CH TXT
ENTRY_END
; version.server.
STEP 3 QUERY
ENTRY_BEGIN
SECTION QUESTION
version.server. CH TXT
ENTRY_END
STEP 4 CHECK_ANSWER
ENTRY_BEGIN
MATCH all
REPLY QR RA REFUSED
SECTION QUESTION
version.server. CH TXT
ENTRY_END
; hostname.bind.
STEP 5 QUERY
ENTRY_BEGIN
SECTION QUESTION
hostname.bind. CH TXT
ENTRY_END
STEP 6 CHECK_ANSWER
ENTRY_BEGIN
MATCH all
REPLY QR RA REFUSED
SECTION QUESTION
hostname.bind. CH TXT
ENTRY_END
; id.server.
STEP 7 QUERY
ENTRY_BEGIN
SECTION QUESTION
id.server. CH TXT
ENTRY_END
STEP 8 CHECK_ANSWER
ENTRY_BEGIN
MATCH all
REPLY QR RA REFUSED
SECTION QUESTION
id.server. CH TXT
ENTRY_END
SCENARIO_END