Skip to content

Commit

Permalink
dnsdist: Add a regression test for YAML/Lua mix
Browse files Browse the repository at this point in the history
  • Loading branch information
rgacogne committed Feb 13, 2025
1 parent a9195c3 commit 5f18789
Show file tree
Hide file tree
Showing 2 changed files with 72 additions and 4 deletions.
13 changes: 9 additions & 4 deletions regression-tests.dnsdist/dnsdisttests.py
Original file line number Diff line number Diff line change
Expand Up @@ -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 ]
Expand Down
63 changes: 63 additions & 0 deletions regression-tests.dnsdist/test_Yaml.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)

0 comments on commit 5f18789

Please sign in to comment.