]> git.ipfire.org Git - thirdparty/pdns.git/blob - regression-tests.dnsdist/test_NetworkBindings.py
dnsdist: enable doh3 in our CI
[thirdparty/pdns.git] / regression-tests.dnsdist / test_NetworkBindings.py
1 #!/usr/bin/env python
2 import unittest
3 import os
4 import subprocess
5 import time
6
7 class TestNetworkEndpointConfig(unittest.TestCase):
8
9 def checkDNSDistExitCode(self, configTemplate, expectedCode, clientMode=False, verboseMode=False):
10 conffile = 'configs/dnsdist_TestNetworkEndpointConfig.conf'
11 with open(conffile, 'w') as conf:
12 conf.write("-- Autogenerated by dnsdisttests.py\n")
13 conf.write(configTemplate)
14
15 dnsdistcmd = [os.environ['DNSDISTBIN'], '-C', conffile, '--check-config']
16 if clientMode:
17 dnsdistcmd.append('-c')
18 if verboseMode:
19 dnsdistcmd.append('-v')
20
21 output = None
22 returnCode = None
23 try:
24 output = subprocess.check_output(dnsdistcmd, stderr=subprocess.STDOUT, close_fds=True)
25 returnCode = 0
26 except subprocess.CalledProcessError as exc:
27 output = exc.output
28 returnCode = exc.returncode
29
30 print(output)
31 self.assertEqual(returnCode, expectedCode)
32
33 def testNonExistingEndpoint(self):
34 """
35 NetworkBindings: Non existing endpoint
36 """
37 configTemplate = """
38 newServer{address="127.0.0.1:53"}
39 local endpoint = newNetworkEndpoint('/this/path/does/not/exist')
40 if endpoint == nil then
41 os.exit(1)
42 end
43 if endpoint:isValid() then
44 os.exit(2)
45 end
46 if endpoint:send('test') then
47 os.exit(3)
48 end
49 os.exit(0)
50 """
51
52 self.checkDNSDistExitCode(configTemplate, 0)
53
54 def testClientMode(self):
55 """
56 NetworkBindings: Client mode
57 """
58 configTemplate = """
59 newServer{address="127.0.0.1:53"}
60 local endpoint = newNetworkEndpoint('/this/path/does/not/exist')
61 if endpoint == nil then
62 os.exit(1)
63 end
64 if endpoint:isValid() then
65 os.exit(2)
66 end
67 if endpoint:send('test') then
68 os.exit(3)
69 end
70 local listener = newNetworkListener()
71 if listener == nil then
72 os.exit(4)
73 end
74 local endpointId = 1
75 local function callback(_, _, _)
76 end
77 if listener:addUnixListeningEndpoint('/path', 1, callback) then
78 os.exit(5)
79 end
80 listener:start()
81 os.exit(0)
82 """
83
84 self.checkDNSDistExitCode(configTemplate, 0, clientMode=True)
85
86 def testGetResolvers(self):
87 """
88 NetworkBindings: getResolvers
89 """
90 configTemplate = """
91 newServer{address="127.0.0.1:53"}
92 local resolvers = getResolvers('resolv.conf.sample')
93 if #resolvers ~= 2 then
94 os.exit(1)
95 end
96 if resolvers[1] ~= '9.9.9.9' then
97 os.exit(2)
98 end
99 if resolvers[2] ~= '2620:fe::fe' then
100 os.exit(2)
101 end
102 os.exit(0)
103 """
104
105 self.checkDNSDistExitCode(configTemplate, 0, clientMode=True)
106
107 def testCommunication(self):
108 """
109 NetworkBindings: Communication
110 """
111 configTemplate = """
112 newServer{address="127.0.0.1:53"}
113 local listener = newNetworkListener()
114 if listener == nil then
115 os.exit(1)
116 end
117 local endpointId = 1
118
119 local function callback(id, dgram, _)
120 -- this function will never get called because we are holding the Lua lock
121 end
122
123 if not listener:addUnixListeningEndpoint('/tmp/dnsdist.network-bindings.test', 1, callback) then
124 os.exit(4)
125 end
126 --listener:start()
127
128 local endpoint = newNetworkEndpoint('/tmp/dnsdist.network-bindings.test')
129 if endpoint == nil then
130 os.exit(5)
131 end
132 if not endpoint:isValid() then
133 os.exit(6)
134 end
135 if not endpoint:send('test') then
136 os.exit(7)
137 end
138 os.exit(0)
139 """
140
141 self.checkDNSDistExitCode(configTemplate, 0)