X-Git-Url: http://git.ipfire.org/?a=blobdiff_plain;f=regression-tests.dnsdist%2Ftest_TCPKeepAlive.py;h=c0c8ebb675882aadf4dc1636092ab76f484344fc;hb=5cdbe0af873d0ffaa82452312611c70ed94bb6ea;hp=a1672e494128142454619d6676942316fdaa91a6;hpb=b9f929ea25c994c8dd1361c61371b32bb5bf1371;p=thirdparty%2Fpdns.git diff --git a/regression-tests.dnsdist/test_TCPKeepAlive.py b/regression-tests.dnsdist/test_TCPKeepAlive.py index a1672e4941..c0c8ebb675 100644 --- a/regression-tests.dnsdist/test_TCPKeepAlive.py +++ b/regression-tests.dnsdist/test_TCPKeepAlive.py @@ -2,7 +2,12 @@ import struct import time import dns -from dnsdisttests import DNSDistTest, range +from dnsdisttests import DNSDistTest + +try: + range = xrange +except NameError: + pass class TestTCPKeepAlive(DNSDistTest): """ @@ -13,7 +18,7 @@ class TestTCPKeepAlive(DNSDistTest): _tcpIdleTimeout = 20 _maxTCPQueriesPerConn = 99 - _maxTCPConnsPerClient = 3 + _maxTCPConnsPerClient = 100 _maxTCPConnDuration = 99 _config_template = """ newServer{address="127.0.0.1:%s"} @@ -21,9 +26,10 @@ class TestTCPKeepAlive(DNSDistTest): setMaxTCPQueriesPerConnection(%s) setMaxTCPConnectionsPerClient(%s) setMaxTCPConnectionDuration(%s) - pc = newPacketCache(100, 86400, 1) + pc = newPacketCache(100, {maxTTL=86400, minTTL=1}) getPool(""):setCache(pc) - addAction("refused.tcpka.tests.powerdns.com.", RCodeAction(dnsdist.REFUSED)) + addAction("largernumberofconnections.tcpka.tests.powerdns.com.", SkipCacheAction()) + addAction("refused.tcpka.tests.powerdns.com.", RCodeAction(DNSRCode.REFUSED)) addAction("dropped.tcpka.tests.powerdns.com.", DropAction()) addResponseAction("dropped-response.tcpka.tests.powerdns.com.", DropResponseAction()) -- create the pool named "nosuchpool" @@ -39,6 +45,7 @@ class TestTCPKeepAlive(DNSDistTest): """ name = 'refused.tcpka.tests.powerdns.com.' query = dns.message.make_query(name, 'A', 'IN') + query.flags &= ~dns.flags.RD expectedResponse = dns.message.make_response(query) expectedResponse.set_rcode(dns.rcode.REFUSED) @@ -199,6 +206,49 @@ class TestTCPKeepAlive(DNSDistTest): conn.close() self.assertEqual(count, 0) + def testTCPKaLargeNumberOfConnections(self): + """ + TCP KeepAlive: Large number of connections + """ + name = 'largernumberofconnections.tcpka.tests.powerdns.com.' + query = dns.message.make_query(name, 'A', 'IN') + expectedResponse = dns.message.make_response(query) + #expectedResponse.set_rcode(dns.rcode.SERVFAIL) + rrset = dns.rrset.from_text(name, + 3600, + dns.rdataclass.IN, + dns.rdatatype.A, + '192.0.2.1') + expectedResponse.answer.append(rrset) + + # number of connections + numConns = 50 + # number of queries per connections + numQueriesPerConn = 4 + + conns = [] + start = time.time() + for idx in range(numConns): + conns.append(self.openTCPConnection()) + + count = 0 + for idx in range(numConns * numQueriesPerConn): + try: + conn = conns[idx % numConns] + self.sendTCPQueryOverConnection(conn, query, response=expectedResponse) + response = self.recvTCPResponseOverConnection(conn) + if response is None: + break + self.assertEquals(expectedResponse, response) + count = count + 1 + except: + pass + + for con in conns: + conn.close() + + self.assertEqual(count, numConns * numQueriesPerConn) + class TestTCPKeepAliveNoDownstreamDrop(DNSDistTest): """ This test makes sure that dnsdist drops the TCP connection