]>
git.ipfire.org Git - thirdparty/pdns.git/blob - regression-tests.dnsdist/test_TCPLimits.py
5 from dnsdisttests
import DNSDistTest
12 class TestTCPLimits(DNSDistTest
):
14 # this test suite uses a different responder port
15 # because it uses a different health check configuration
16 _testServerPort
= 5395
17 _answerUnexpected
= True
20 _maxTCPQueriesPerConn
= 5
21 _maxTCPConnsPerClient
= 3
22 _maxTCPConnDuration
= 5
23 _config_template
= """
24 newServer{address="127.0.0.1:%s"}
26 setMaxTCPQueriesPerConnection(%s)
27 setMaxTCPConnectionsPerClient(%s)
28 setMaxTCPConnectionDuration(%s)
30 _config_params
= ['_testServerPort', '_tcpIdleTimeout', '_maxTCPQueriesPerConn', '_maxTCPConnsPerClient', '_maxTCPConnDuration']
32 def testTCPQueriesPerConn(self
):
34 TCP Limits: Maximum number of queries
36 name
= 'maxqueriesperconn.tcp.tests.powerdns.com.'
37 query
= dns
.message
.make_query(name
, 'A', 'IN')
38 conn
= self
.openTCPConnection()
41 for idx
in range(self
._maxTCPQueriesPerConn
):
43 self
.sendTCPQueryOverConnection(conn
, query
)
44 response
= self
.recvTCPResponseOverConnection(conn
)
45 self
.assertTrue(response
)
50 # this one should fail
53 self
.sendTCPQueryOverConnection(conn
, query
)
54 response
= self
.recvTCPResponseOverConnection(conn
)
55 self
.assertFalse(response
)
64 self
.assertTrue(failed
)
65 self
.assertEqual(count
, self
._maxTCPQueriesPerConn
)
67 def testTCPConnsPerClient(self
):
69 TCP Limits: Maximum number of conns per client
71 name
= 'maxconnsperclient.tcp.tests.powerdns.com.'
72 query
= dns
.message
.make_query(name
, 'A', 'IN')
75 for idx
in range(self
._maxTCPConnsPerClient
+ 1):
76 conns
.append(self
.openTCPConnection())
82 self
.sendTCPQueryOverConnection(conn
, query
)
83 response
= self
.recvTCPResponseOverConnection(conn
)
94 self
.assertEqual(count
, self
._maxTCPConnsPerClient
)
95 self
.assertEqual(failed
, 1)
97 def testTCPDuration(self
):
99 TCP Limits: Maximum duration
101 name
= 'duration.tcp.tests.powerdns.com.'
104 conn
= self
.openTCPConnection()
105 # immediately send the maximum size
106 conn
.send(struct
.pack("!H", 65535))
109 while count
< (self
._maxTCPConnDuration
* 20):
111 # sleeping for only one second keeps us below the
112 # idle timeout (setTCPRecvTimeout())
116 except Exception as e
:
117 print("Exception: %s!" % (e
))
122 self
.assertAlmostEquals(count
/ 10, self
._maxTCPConnDuration
, delta
=2)
123 self
.assertAlmostEquals(end
- start
, self
._maxTCPConnDuration
, delta
=2)