refusedResponse.id = receivedResponse.id
self.assertEquals(receivedResponse, refusedResponse)
+class TestAdvancedLuaActionReturnSyntax(DNSDistTest):
+
+ _config_template = """
+ function refuse(dq)
+ return DNSAction.Refused
+ end
+ addAction(AllRule(), LuaAction(refuse))
+ newServer{address="127.0.0.1:%s"}
+ """
+
+ def testRefusedWithEmptyRule(self):
+ """
+ Advanced: Short syntax for LuaAction return values
+ """
+ name = 'refused.advanced.tests.powerdns.com.'
+ query = dns.message.make_query(name, 'A', 'IN')
+ response = dns.message.make_response(query)
+ rrset = dns.rrset.from_text(name,
+ 3600,
+ dns.rdataclass.IN,
+ dns.rdatatype.AAAA,
+ '::1')
+ response.answer.append(rrset)
+ refusedResponse = dns.message.make_response(query)
+ refusedResponse.set_rcode(dns.rcode.REFUSED)
+
+ (_, receivedResponse) = self.sendUDPQuery(query, response=None, useQueue=False)
+ self.assertTrue(receivedResponse)
+ refusedResponse.id = receivedResponse.id
+ self.assertEquals(receivedResponse, refusedResponse)
+
+ (_, receivedResponse) = self.sendTCPQuery(query, response=None, useQueue=False)
+ self.assertTrue(receivedResponse)
+ refusedResponse.id = receivedResponse.id
+ self.assertEquals(receivedResponse, refusedResponse)
+
class TestAdvancedLuaTruncated(DNSDistTest):
_config_template = """
self.assertEquals(response, receivedResponse)
self.assertNotEquals(response.answer[0].ttl, receivedResponse.answer[0].ttl)
self.assertEquals(receivedResponse.answer[0].ttl, self._ttl)
+
+class TestResponseLuaActionReturnSyntax(DNSDistTest):
+
+ _config_template = """
+ newServer{address="127.0.0.1:%s"}
+ function customDelay(dr)
+ return DNSResponseAction.Delay, "1000"
+ end
+ function customDrop(dr)
+ return DNSResponseAction.Drop
+ end
+ addResponseAction("drop.responses.tests.powerdns.com.", LuaResponseAction(customDrop))
+ addResponseAction(RCodeRule(dnsdist.NXDOMAIN), LuaResponseAction(customDelay))
+ """
+
+ def testResponseActionDelayed(self):
+ """
+ Responses: Delayed via LuaResponseAction
+
+ Send an A query to "delayed.responses.tests.powerdns.com.",
+ check that the response delay is longer than 1000 ms
+ for a NXDomain response over UDP, shorter for a NoError one.
+ """
+ name = 'delayed.responses.tests.powerdns.com.'
+ query = dns.message.make_query(name, 'A', 'IN')
+ response = dns.message.make_response(query)
+
+ # NX over UDP
+ response.set_rcode(dns.rcode.NXDOMAIN)
+ begin = datetime.now()
+ (receivedQuery, receivedResponse) = self.sendUDPQuery(query, response)
+ end = datetime.now()
+ receivedQuery.id = query.id
+ self.assertEquals(query, receivedQuery)
+ self.assertEquals(response, receivedResponse)
+ self.assertTrue((end - begin) > timedelta(0, 1))
+
+ def testDropped(self):
+ """
+ Responses: Dropped via user defined LuaResponseAction
+
+ Send an A query to "drop.responses.tests.powerdns.com.",
+ check that the response (not the query) is dropped.
+ """
+ name = 'drop.responses.tests.powerdns.com.'
+ query = dns.message.make_query(name, 'A', 'IN')
+ response = dns.message.make_response(query)
+
+ (receivedQuery, receivedResponse) = self.sendUDPQuery(query, response)
+ receivedQuery.id = query.id
+ self.assertEquals(query, receivedQuery)
+ self.assertEquals(receivedResponse, None)
+
+ (receivedQuery, receivedResponse) = self.sendTCPQuery(query, response)
+ receivedQuery.id = query.id
+ self.assertEquals(query, receivedQuery)
+ self.assertEquals(receivedResponse, None)