From: Remi Gacogne Date: Thu, 13 Feb 2025 13:54:17 +0000 (+0100) Subject: dnsdist: Add a regression test for YAML/Lua mix X-Git-Tag: dnsdist-2.0.0-alpha1~36^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5f187899de92e1987777ac484d0b92da37b00004;p=thirdparty%2Fpdns.git dnsdist: Add a regression test for YAML/Lua mix --- diff --git a/regression-tests.dnsdist/dnsdisttests.py b/regression-tests.dnsdist/dnsdisttests.py index 5797d4bb2c..fbf757454d 100644 --- a/regression-tests.dnsdist/dnsdisttests.py +++ b/regression-tests.dnsdist/dnsdisttests.py @@ -144,17 +144,22 @@ class DNSDistTest(AssertEqualDNSMessageMixin, unittest.TestCase): confFile = os.path.join('configs', 'dnsdist_%s.yml' % (cls.__name__)) with open(confFile, 'w') as conf: conf.write(cls._yaml_config_template % params) + conf.write("\nsecurity_polling:\n suffix: ''\n") params = tuple([getattr(cls, param) for param in cls._config_params]) print(params) extension = 'lua' if cls._yaml_config_template else 'conf' - confFile = os.path.join('configs', 'dnsdist_%s.%s' % (cls.__name__, extension)) - with open(confFile, 'w') as conf: + luaConfFile = os.path.join('configs', 'dnsdist_%s.%s' % (cls.__name__, extension)) + if not cls._yaml_config_template: + confFile = luaConfFile + + with open(luaConfFile, 'w') as conf: conf.write("-- Autogenerated by dnsdisttests.py\n") conf.write(f"-- dnsdist will listen on {cls._dnsDistPort}\n") conf.write(cls._config_template % params) - conf.write("\n") - conf.write("setSecurityPollSuffix('')") + if not cls._yaml_config_template: + conf.write("\n") + conf.write("setSecurityPollSuffix('')") if cls._skipListeningOnCL: dnsdistcmd = [os.environ['DNSDISTBIN'], '--supervised', '-C', confFile ] diff --git a/regression-tests.dnsdist/test_Yaml.py b/regression-tests.dnsdist/test_Yaml.py index 597a11b210..1abed07c2f 100644 --- a/regression-tests.dnsdist/test_Yaml.py +++ b/regression-tests.dnsdist/test_Yaml.py @@ -194,3 +194,66 @@ response_rules: receivedQuery.id = query.id self.assertEqual(receivedQuery, query) self.assertEqual(receivedResponse, response) + +class TestMixingYamlWithLua(DNSDistTest): + + _yaml_config_template = """--- +binds: + - listen_address: "127.0.0.1:%d" + reuseport: true + protocol: Do53 + threads: 2 + +backends: + - address: "127.0.0.1:%d" + protocol: Do53 + pools: + - "tcp-pool" + - "inline" +query_rules: + - name: "refused" + selector: + type: "QNameSet" + qnames: + - "refused.yaml-lua-mix.test.powerdns.com." + action: + type: "RCode" + rcode: 5 + +""" + _dnsDistPort = pickAvailablePort() + _testServerPort = pickAvailablePort() + _yaml_config_params = ['_dnsDistPort', '_testServerPort'] + _config_params = [] + _config_template = """ +enableLuaConfiguration() +addAction(QNameRule("notimp-lua.yaml-lua-mix.test.powerdns.com."), RCodeAction(DNSRCode.NOTIMP)) +""" + + def testRefusedFromYAML(self): + """ + Yaml / Lua mix: Refused from YAML + """ + name = 'refused.yaml-lua-mix.test.powerdns.com.' + query = dns.message.make_query(name, 'A', 'IN') + query.flags &= ~dns.flags.RD + expectedResponse = dns.message.make_response(query) + expectedResponse.set_rcode(dns.rcode.REFUSED) + for method in ["sendUDPQuery", "sendTCPQuery"]: + sender = getattr(self, method) + (_, receivedResponse) = sender(query, response=None, useQueue=False) + self.assertEqual(receivedResponse, expectedResponse) + + def testNotImpFromLua(self): + """ + Yaml / Lua mix: Not imp from Lua + """ + name = 'notimp-lua.yaml-lua-mix.test.powerdns.com.' + query = dns.message.make_query(name, 'A', 'IN') + query.flags &= ~dns.flags.RD + expectedResponse = dns.message.make_response(query) + expectedResponse.set_rcode(dns.rcode.NOTIMP) + for method in ["sendUDPQuery", "sendTCPQuery"]: + sender = getattr(self, method) + (_, receivedResponse) = sender(query, response=None, useQueue=False) + self.assertEqual(receivedResponse, expectedResponse)