]>
git.ipfire.org Git - thirdparty/pdns.git/blob - regression-tests.dnsdist/test_TCPLimits.py
5 from dnsdisttests
import DNSDistTest
, range
7 class TestTCPLimits(DNSDistTest
):
9 # this test suite uses a different responder port
10 # because it uses a different health check configuration
11 _testServerPort
= 5395
12 _answerUnexpected
= True
15 _maxTCPQueriesPerConn
= 5
16 _maxTCPConnsPerClient
= 3
17 _maxTCPConnDuration
= 5
18 _config_template
= """
19 newServer{address="127.0.0.1:%s"}
21 setMaxTCPQueriesPerConnection(%s)
22 setMaxTCPConnectionsPerClient(%s)
23 setMaxTCPConnectionDuration(%s)
25 _config_params
= ['_testServerPort', '_tcpIdleTimeout', '_maxTCPQueriesPerConn', '_maxTCPConnsPerClient', '_maxTCPConnDuration']
27 def testTCPQueriesPerConn(self
):
29 TCP Limits: Maximum number of queries
31 name
= 'maxqueriesperconn.tcp.tests.powerdns.com.'
32 query
= dns
.message
.make_query(name
, 'A', 'IN')
33 conn
= self
.openTCPConnection()
36 for idx
in range(self
._maxTCPQueriesPerConn
):
38 self
.sendTCPQueryOverConnection(conn
, query
)
39 response
= self
.recvTCPResponseOverConnection(conn
)
40 self
.assertTrue(response
)
45 # this one should fail
48 self
.sendTCPQueryOverConnection(conn
, query
)
49 response
= self
.recvTCPResponseOverConnection(conn
)
50 self
.assertFalse(response
)
59 self
.assertTrue(failed
)
60 self
.assertEqual(count
, self
._maxTCPQueriesPerConn
)
62 def testTCPConnsPerClient(self
):
64 TCP Limits: Maximum number of conns per client
66 name
= 'maxconnsperclient.tcp.tests.powerdns.com.'
67 query
= dns
.message
.make_query(name
, 'A', 'IN')
70 for idx
in range(self
._maxTCPConnsPerClient
+ 1):
71 conns
.append(self
.openTCPConnection())
77 self
.sendTCPQueryOverConnection(conn
, query
)
78 response
= self
.recvTCPResponseOverConnection(conn
)
89 self
.assertEqual(count
, self
._maxTCPConnsPerClient
)
90 self
.assertEqual(failed
, 1)
92 def testTCPDuration(self
):
94 TCP Limits: Maximum duration
96 name
= 'duration.tcp.tests.powerdns.com.'
99 conn
= self
.openTCPConnection()
100 # immediately send the maximum size
101 conn
.send(struct
.pack("!H", 65535))
104 while count
< (self
._maxTCPConnDuration
* 2):
106 # sleeping for only one second keeps us below the
107 # idle timeout (setTCPRecvTimeout())
116 self
.assertAlmostEquals(count
, self
._maxTCPConnDuration
, delta
=2)
117 self
.assertAlmostEquals(end
- start
, self
._maxTCPConnDuration
, delta
=2)