From a0072e6df352eb070076a8f6ea11c518136f137c Mon Sep 17 00:00:00 2001 From: Aki Tuomi Date: Wed, 18 Feb 2015 21:39:19 +0200 Subject: [PATCH] Regression test for TKEY support --- regression-tests/tests/tkey-awareness/command | 3 ++ .../tests/tkey-awareness/description | 1 + .../tests/tkey-awareness/expected_result | 2 + regression-tests/tkey.py | 45 +++++++++++++++++++ 4 files changed, 51 insertions(+) create mode 100755 regression-tests/tests/tkey-awareness/command create mode 100644 regression-tests/tests/tkey-awareness/description create mode 100644 regression-tests/tests/tkey-awareness/expected_result create mode 100755 regression-tests/tkey.py diff --git a/regression-tests/tests/tkey-awareness/command b/regression-tests/tests/tkey-awareness/command new file mode 100755 index 000000000..9784f83e9 --- /dev/null +++ b/regression-tests/tests/tkey-awareness/command @@ -0,0 +1,3 @@ +#!/bin/sh + +tkey.py $nameserver $port diff --git a/regression-tests/tests/tkey-awareness/description b/regression-tests/tests/tkey-awareness/description new file mode 100644 index 000000000..2a2d221e6 --- /dev/null +++ b/regression-tests/tests/tkey-awareness/description @@ -0,0 +1 @@ +Make sure TKEY query is understood and rejected properly diff --git a/regression-tests/tests/tkey-awareness/expected_result b/regression-tests/tests/tkey-awareness/expected_result new file mode 100644 index 000000000..8f2ed2614 --- /dev/null +++ b/regression-tests/tests/tkey-awareness/expected_result @@ -0,0 +1,2 @@ +Got expected TKEY response + diff --git a/regression-tests/tkey.py b/regression-tests/tkey.py new file mode 100755 index 000000000..04c700b08 --- /dev/null +++ b/regression-tests/tkey.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python + +import socket; +import select; +import sys; + +def ensure(data, offset, value): + if (data[offset:offset+len(value)] != value): + raise Exception("Mismatch at packet offset {0!s} {1!r} != {2!r}".format(offset,data[offset:offset+len(value)], value)) + +def main(host, port): + s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + + msg = "\xaa\x77\x00\x00\x00\x01\x00\x00\x00\x00\x00\x01\x04tkey\x04unit\x04test\x00\x00\xf9\x00\xff\x04tkey\x04unit\x04test\x00\x00\xf9\x00\xff\x00\x00\x00\x00\x00\x22\x03bad\04algo\x00\x00\x00\x30\x39\x00\x00\x30\x39\x00\x03\x00\x00\x00\x04test\x00\x00" + + s.sendto(msg, (host, port)) + s.settimeout(2) + data, addr = s.recvfrom(512) + + # make sure the data validates + + # transaction id + ensure(data, 0, msg[0:2]) + + # has one question, one answer + ensure(data, 4, "\x00\x01") + ensure(data, 6, "\x00\x01") + + # question is tkey.unit.test ANY TKEY? + ensure(data, 12, "\x04tkey\x04unit\x04test\x00\x00\xf9\x00\xff") + # answer is called tkey.unit.test ANY TKEY (compressed it seems) + ensure(data, 32, "\xc0\x0c\x00\xf9\x00\xff") + + # and then ensure we get an BADALGO or error, at least. + if (data[64:66] == "\x00\x00"): + raise Exception("At packet offset {0!s}: expected {2!r}, got {1!r}".format(offset,data[offset:offset+len(value)], value)) + + print "Got expected TKEY response\n" + +if (len(sys.argv) < 3): + print "Usage: tkey.py host port" + sys.exit(1) + +if __name__ == '__main__': + main(sys.argv[1], int(sys.argv[2])) -- 2.40.0