--- /dev/null
+#!/usr/bin/env python
+import unittest
+import os
+import subprocess
+import time
+
+class TestNetworkEndpointConfig(unittest.TestCase):
+
+ def checkDNSDistExitCode(self, configTemplate, expectedCode, clientMode=False, verboseMode=False):
+ conffile = 'configs/dnsdist_TestNetworkEndpointConfig.conf'
+ with open(conffile, 'w') as conf:
+ conf.write("-- Autogenerated by dnsdisttests.py\n")
+ conf.write(configTemplate)
+
+ dnsdistcmd = [os.environ['DNSDISTBIN'], '-C', conffile, '--check-config']
+ if clientMode:
+ dnsdistcmd.append('-c')
+ if verboseMode:
+ dnsdistcmd.append('-v')
+
+ output = None
+ returnCode = None
+ try:
+ output = subprocess.check_output(dnsdistcmd, stderr=subprocess.STDOUT, close_fds=True)
+ returnCode = 0
+ except subprocess.CalledProcessError as exc:
+ output = exc.output
+ returnCode = exc.returncode
+
+ print(output)
+ self.assertEqual(returnCode, expectedCode)
+
+ def testNonExistingEndpoint(self):
+ """
+ NetworkBindings: Non existing endpoint
+ """
+ configTemplate = """
+ newServer{address="127.0.0.1:53"}
+ local endpoint = newNetworkEndpoint('/this/path/does/not/exist')
+ if endpoint == nil then
+ os.exit(1)
+ end
+ if endpoint:isValid() then
+ os.exit(2)
+ end
+ if endpoint:send('test') then
+ os.exit(3)
+ end
+ os.exit(0)
+ """
+
+ self.checkDNSDistExitCode(configTemplate, 0)
+
+ def testClientMode(self):
+ """
+ NetworkBindings: Client mode
+ """
+ configTemplate = """
+ newServer{address="127.0.0.1:53"}
+ local endpoint = newNetworkEndpoint('/this/path/does/not/exist')
+ if endpoint == nil then
+ os.exit(1)
+ end
+ if endpoint:isValid() then
+ os.exit(2)
+ end
+ if endpoint:send('test') then
+ os.exit(3)
+ end
+ local listener = newNetworkListener()
+ if listener == nil then
+ os.exit(4)
+ end
+ local endpointId = 1
+ local function callback(_, _, _)
+ end
+ if listener:addUnixListeningEndpoint('/path', 1, callback) then
+ os.exit(5)
+ end
+ listener:start()
+ os.exit(0)
+ """
+
+ self.checkDNSDistExitCode(configTemplate, 0, clientMode=True)
+
+ def testGetResolvers(self):
+ """
+ NetworkBindings: getResolvers
+ """
+ configTemplate = """
+ newServer{address="127.0.0.1:53"}
+ local resolvers = getResolvers('resolv.conf.sample')
+ if #resolvers ~= 2 then
+ os.exit(1)
+ end
+ if resolvers[1] ~= '9.9.9.9' then
+ os.exit(2)
+ end
+ if resolvers[2] ~= '2620:fe::fe' then
+ os.exit(2)
+ end
+ os.exit(0)
+ """
+
+ self.checkDNSDistExitCode(configTemplate, 0, clientMode=True)
+
+ def testCommunication(self):
+ """
+ NetworkBindings: Communication
+ """
+ configTemplate = """
+ newServer{address="127.0.0.1:53"}
+ local listener = newNetworkListener()
+ if listener == nil then
+ os.exit(1)
+ end
+ local endpointId = 1
+
+ local function callback(id, dgram, _)
+ -- this function will never get called because we are holding the Lua lock
+ end
+
+ if not listener:addUnixListeningEndpoint('/tmp/dnsdist.network-bindings.test', 1, callback) then
+ os.exit(4)
+ end
+ --listener:start()
+
+ local endpoint = newNetworkEndpoint('/tmp/dnsdist.network-bindings.test')
+ if endpoint == nil then
+ os.exit(5)
+ end
+ if not endpoint:isValid() then
+ os.exit(6)
+ end
+ if not endpoint:send('test') then
+ os.exit(7)
+ end
+ os.exit(0)
+ """
+
+ self.checkDNSDistExitCode(configTemplate, 0)