From: Charles-Henri Bruyand Date: Mon, 19 Mar 2018 11:44:46 +0000 (+0100) Subject: dnsdist: test LuaAction optional second return value X-Git-Tag: dnsdist-1.3.0~46^2~2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=63cdc73d5669f551efaa2b833e6b9f5b65877dfa;p=thirdparty%2Fpdns.git dnsdist: test LuaAction optional second return value --- diff --git a/regression-tests.dnsdist/test_Advanced.py b/regression-tests.dnsdist/test_Advanced.py index 6f2c3f838d..589f4e0552 100644 --- a/regression-tests.dnsdist/test_Advanced.py +++ b/regression-tests.dnsdist/test_Advanced.py @@ -1279,6 +1279,42 @@ class TestAdvancedLuaRefused(DNSDistTest): 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 = """ diff --git a/regression-tests.dnsdist/test_Responses.py b/regression-tests.dnsdist/test_Responses.py index c3df945074..494143c6d6 100644 --- a/regression-tests.dnsdist/test_Responses.py +++ b/regression-tests.dnsdist/test_Responses.py @@ -249,3 +249,60 @@ class TestResponseRuleEditTTL(DNSDistTest): 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)