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 ]
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)