self.assertRcodeEqual(res, dns.rcode.NOERROR)
self.assertRRsetInAnswer(res, expected)
-class testTooLargeToAddZeroScope(RecursorTest):
-
- _confdir = 'TooLargeToAddZeroScope'
- _config_template_default = """
-use-incoming-edns-subnet=yes
-dnssec=validate
-daemon=no
-trace=yes
-packetcache-ttl=0
-packetcache-servfail-ttl=0
-max-cache-ttl=15
-threads=1
-loglevel=9
-disable-syslog=yes
-log-common-errors=yes
-"""
- _config_template = """
- """
- _lua_dns_script_file = """
- function preresolve(dq)
- if dq.qname == newDN('toolarge.ecs.') then
- dq:addRecord(pdns.TXT, '%s', pdns.place.ANSWER)
- return true
- end
- return false
- end
- """ % ('A'*447)
-
- _roothints = None
-
- @classmethod
- def setUpClass(cls):
-
- # we don't need all the auth stuff
- cls.setUpSockets()
- cls.startResponders()
-
- confdir = os.path.join('configs', cls._confdir)
- cls.createConfigDir(confdir)
-
- cls.generateRecursorConfig(confdir)
- cls.startRecursor(confdir, cls._recursorPort)
-
- @classmethod
- def tearDownClass(cls):
- cls.tearDownRecursor()
-
- @classmethod
- def generateRecursorConfig(cls, confdir):
- super(testTooLargeToAddZeroScope, cls).generateRecursorConfig(confdir)
-
- def testTooLarge(self):
- qname = 'toolarge.ecs.'
- ecso = clientsubnetoption.ClientSubnetOption('192.0.2.1', 24)
- query = dns.message.make_query(qname, 'TXT', 'IN', use_edns=True, options=[ecso], payload=512)
-
- # should not have an ECS Option since the packet is too large already
- res = self.sendUDPQuery(query, timeout=5.0)
- self.assertRcodeEqual(res, dns.rcode.NOERROR)
- self.assertEqual(len(res.answer), 1)
- self.assertEqual(res.edns, 0)
- self.assertEqual(len(res.options), 0)
-
- res = self.sendTCPQuery(query, timeout=5.0)
- self.assertRcodeEqual(res, dns.rcode.NOERROR)
- self.assertEqual(len(res.answer), 1)
- self.assertEqual(res.edns, 0)
- self.assertEqual(len(res.options), 1)
- self.assertEqual(res.options[0].otype, 8)
- self.assertEqual(res.options[0].scope, 0)
-
class UDPECSResponder(DatagramProtocol):
@staticmethod
def ipToStr(option):