sort.example. 3600 IN A 17.238.240.5
sort.example. 3600 IN MX 25 mx
-delay.example. 3600 IN NS ns1.delay.example.
-ns1.delay.example. 3600 IN A {prefix}.16
+delay1.example. 3600 IN NS ns1.delay1.example.
+ns1.delay1.example. 3600 IN A {prefix}.16
+delay2.example. 3600 IN NS ns1.delay2.example.
+ns1.delay2.example. 3600 IN A {prefix}.17
""",
'secure.example': """
secure.example. 3600 IN SOA {soa}
node1.undelegated.insecure.example. 3600 IN A 192.0.2.22
""",
- 'delay.example': """
-delay.example. 3600 IN SOA {soa}
-delay.example. 3600 IN NS n1.delay.example.
-ns1.delay.example. 3600 IN A {prefix}.16
-*.delay.example. 0 LUA TXT ";" "local socket=require('socket')" "socket.sleep(tonumber(qname:getRawLabels()[1])/10)" "return 'a'"
+ 'delay1.example': """
+delay1.example. 3600 IN SOA {soa}
+delay1.example. 3600 IN NS n1.delay1.example.
+ns1.delay1.example. 3600 IN A {prefix}.16
+*.delay1.example. 0 LUA TXT ";" "local socket=require('socket')" "socket.sleep(tonumber(qname:getRawLabels()[1])/10)" "return 'a'"
+ """,
+
+ 'delay2.example': """
+delay2.example. 3600 IN SOA {soa}
+delay2.example. 3600 IN NS n1.delay2.example.
+ns1.delay2.example. 3600 IN A {prefix}.17
+*.delay2.example. 0 LUA TXT ";" "local socket=require('socket')" "socket.sleep(tonumber(qname:getRawLabels()[1])/10)" "return 'a'"
"""
}
'zones': ['optout.example']},
'15': {'threads': 1,
'zones': ['insecure.optout.example', 'secure.optout.example', 'cname-secure.example']},
- # This zone need more threads so that the lua delay code does not cause serialization
- '16': {'threads': 4,
- 'zones': ['delay.example']}
+ '16': {'threads': 2,
+ 'zones': ['delay1.example']},
+ '17': {'threads': 2,
+ 'zones': ['delay2.example']}
}
_auth_cmd = ['authbind',
def generateRecursorConfig(cls, confdir):
super(testOOOTCP, cls).generateRecursorConfig(confdir)
- def primeNS(self):
- query = dns.message.make_query('delay.example.', 'NS', want_dnssec=False)
- self.sendUDPQuery(query)
-
def testOOOVeryBasic(self):
- self.primeNS()
expected = {}
queries = []
- for zone in ['5.delay.example.', '0.delay.example.']:
+ for zone in ['5.delay1.example.', '0.delay2.example.']:
expected[zone] = dns.rrset.from_text(zone, 0, dns.rdataclass.IN, 'TXT', 'a')
query = dns.message.make_query(zone, 'TXT', want_dnssec=False)
query.flags |= dns.flags.AD
self.assertEqual(len(ress), len(expected))
i = 0
- for exp in [expected['0.delay.example.'], expected['5.delay.example.']]:
+ for exp in [expected['0.delay2.example.'], expected['5.delay1.example.']]:
print('ress0')
print(ress[i].answer[0].to_text())
print('exp')
i = i + 1
def testOOOTimeout(self):
- self.primeNS()
expected = {}
queries = []
- for zone in ['25.delay.example.', '1.delay.example.']:
+ for zone in ['25.delay1.example.', '1.delay2.example.']:
query = dns.message.make_query(zone, 'TXT', want_dnssec=False)
query.flags |= dns.flags.AD
queries.append(query)
ress = self.sendTCPQueries(queries)
-
+
self.assertEqual(len(ress), 2)
- exp = dns.rrset.from_text(zone, 0, dns.rdataclass.IN, 'TXT', 'a')
+ exp = dns.rrset.from_text('1.delay2.example.', 0, dns.rdataclass.IN, 'TXT', 'a')
self.assertRRsetInAnswer(ress[0], exp)
self.assertRcodeEqual(ress[1], dns.rcode.SERVFAIL)