From: Remi Gacogne Date: Wed, 12 Nov 2025 11:22:56 +0000 (+0100) Subject: dnsdist: Add a test for using Lua objects in Yaml context X-Git-Tag: rec-5.4.0-alpha1~54^2~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cd4a6d9debf738029ac3958ece0a508f5e26b391;p=thirdparty%2Fpdns.git dnsdist: Add a test for using Lua objects in Yaml context Signed-off-by: Remi Gacogne --- diff --git a/regression-tests.dnsdist/test_Yaml.py b/regression-tests.dnsdist/test_Yaml.py index 66ae18fd30..d95bfef32d 100644 --- a/regression-tests.dnsdist/test_Yaml.py +++ b/regression-tests.dnsdist/test_Yaml.py @@ -618,3 +618,67 @@ pools: def tearDownClass(cls): if cls._dnsdist: cls.killProcess(cls._dnsdist) + +class TestYamlLuaCodeUsingObjects(DNSDistTest): + + _yaml_config_template = """--- +binds: + - listen_address: "127.0.0.1:%d" + protocol: Do53 + +backends: + - address: "127.0.0.1:%d" + protocol: Do53 + +query_rules: + - name: "check the qname and source IP using Lua objects" + selector: + type: "Not" + selector: + type: "Lua" + function_code: | + local myset = newDNSNameSet() + myset:add(newDNSName('lua-objects.yaml.tests.powerdns.com.')) + local mynmg = newNMG() + mynmg:addMask('127.0.0.1') + return function(dq) + if not myset:check(dq.qname) then + errlog("Wrong name "..dq.qname:toString()) + return false + end + if not mynmg:match(dq.remoteaddr) then + errlog("Wrong source IP "..dq.remoteaddr:toStringWithPort()) + return false + end + return true + end + action: + type: "RCode" + rcode: "Refused" +""" + _yaml_config_params = ['_dnsDistPort', '_testServerPort'] + _config_params = [] + + def testLuaObjects(self): + """ + YAML: Test Lua objects + """ + name = 'lua-objects.yaml.tests.powerdns.com.' + query = dns.message.make_query(name, 'SOA', 'IN') + query.set_opcode(dns.opcode.UPDATE) + response = dns.message.make_response(query) + rrset = dns.rrset.from_text(name, + 3600, + dns.rdataclass.IN, + dns.rdatatype.A, + '127.0.0.1') + response.answer.append(rrset) + + for method in ("sendUDPQuery", "sendTCPQuery"): + sender = getattr(self, method) + (receivedQuery, receivedResponse) = sender(query, response) + self.assertTrue(receivedQuery) + self.assertTrue(receivedResponse) + receivedQuery.id = query.id + self.assertEqual(query, receivedQuery) + self.assertEqual(response, receivedResponse)