Skip to content
Snippets Groups Projects
Commit fd9fce2a authored by Marek Vavruša's avatar Marek Vavruša
Browse files

Merge branch 'cover_minimization' into 'master'

Cover query minimization

See merge request !11
parents a15ed5a2 a0647c0c
Branches
Tags
No related merge requests found
......@@ -13,7 +13,7 @@ before_script:
- pip install --user travis -r tests/pydnstest/requirements.txt
- pip install --user travis cpp-coveralls
script:
- autoreconf -i
- ./bootstrap
- ./configure --enable-integration-tests --enable-code-coverage
- make
- make check
......@@ -25,3 +25,4 @@ cache:
directories:
- ${HOME}/fakeroot
- ${HOME}/.pip-cache
- .autom4te.cache
#!/bin/sh
set -e
aclocal -I m4 --install
libtoolize --copy
autoheader
automake --copy --add-missing
autoconf
......@@ -38,6 +38,11 @@ static PyObject *mock_server = NULL; /* Mocked endpoint for recursive queries
static PyObject* init(PyObject* self, PyObject* args)
{
const char *config= NULL;
if (!PyArg_ParseTuple(args, "s", &config)) {
return NULL;
}
/* Initialize mock variables */
memset(&_mock_time, 0, sizeof(struct timeval));
mock_server = NULL;
......@@ -52,7 +57,12 @@ static PyObject* init(PyObject* self, PyObject* args)
assert(global_context.cache);
/* Test context options. */
global_context.options = QUERY_TCP | QUERY_NO_MINIMIZE;
global_context.options = QUERY_TCP;
/* No configuration parsing support yet. */
if (strstr(config, "query-minimization: on") == NULL) {
global_context.options |= QUERY_NO_MINIMIZE;
}
return Py_BuildValue("s", PACKAGE_STRING " (integration tests)");
}
......
......@@ -91,9 +91,17 @@ def parse_scenario(op, args, file_in):
def parse_file(file_in):
""" Parse scenario from a file. """
try:
config = ''
line = file_in.readline()
while len(line):
if line.startswith('CONFIG_END'):
break
if not line.startswith(';'):
config += line
line = file_in.readline()
for op, args in iter(lambda: get_next(file_in), False):
if op == 'SCENARIO_BEGIN':
return parse_scenario(op, args, file_in)
return parse_scenario(op, args, file_in), config
raise Exception("IGNORE (missing scenario)")
except Exception as e:
raise Exception('line %d: %s' % (file_in.lineno(), str(e)))
......@@ -117,15 +125,16 @@ def play_object(path):
# Parse scenario
file_in = fileinput.input(path)
scenario = None
config = None
try:
scenario = parse_file(file_in)
scenario, config = parse_file(file_in)
finally:
file_in.close()
# Play scenario
server = testserver.TestServer(scenario)
server.start()
mock_ctx.init()
mock_ctx.init(config)
try:
mock_ctx.set_server(server)
if TEST_DEBUG > 0:
......
; config options
server:
target-fetch-policy: "0 0 0 0 0"
query-minimization: on
stub-zone:
name: "."
stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
CONFIG_END
SCENARIO_BEGIN Test basic query minimization 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
com. IN NS
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
example.com. IN NS
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
ENTRY_END
SCENARIO_END
; config options
server:
target-fetch-policy: "0 0 0 0 0"
query-minimization: on
stub-zone:
name: "."
stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
CONFIG_END
SCENARIO_BEGIN Test query minimization with empty-nonterminal in path.
; 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
com. IN NS
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
example.com. IN NS
SECTION AUTHORITY
com. IN NS a.gtld-servers.net.
ENTRY_END
ENTRY_BEGIN
MATCH opcode qtype qname
ADJUST copy_id
REPLY QR NOERROR
SECTION QUESTION
www.example.com. IN NS
SECTION ANSWER
www.example.com. IN NS blackhole.
SECTION AUTHORITY
com. IN NS a.gtld-servers.net.
ENTRY_END
RANGE_END
STEP 1 QUERY
ENTRY_BEGIN
REPLY RD
SECTION QUESTION
www.example.com. IN NS
ENTRY_END
; recursion happens here.
STEP 10 CHECK_ANSWER
ENTRY_BEGIN
MATCH all
REPLY QR RD RA NOERROR
SECTION QUESTION
www.example.com. IN NS
SECTION ANSWER
www.example.com. IN NS blackhole.
ENTRY_END
SCENARIO_END
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment