diff --git a/regression-tests.dnsdist/dnsdisttests.py b/regression-tests.dnsdist/dnsdisttests.py index 5797d4bb2c1f..fbf757454d32 100644 --- a/regression-tests.dnsdist/dnsdisttests.py +++ b/regression-tests.dnsdist/dnsdisttests.py @@ -144,17 +144,22 @@ def startDNSDist(cls): 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 597a11b21086..1abed07c2f87 100644 --- a/regression-tests.dnsdist/test_Yaml.py +++ b/regression-tests.dnsdist/test_Yaml.py @@ -194,3 +194,66 @@ def testInlineLua(self): 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)