]>
Commit | Line | Data |
---|---|---|
548c8b66 RG |
1 | #!/usr/bin/env python |
2 | import threading | |
3 | import dns | |
4 | from dnsdisttests import DNSDistTest | |
5 | ||
6 | class TestAXFR(DNSDistTest): | |
7 | ||
8 | # this test suite uses a different responder port | |
9 | # because, contrary to the other ones, its | |
10 | # TCP responder allows multiple responses and we don't want | |
11 | # to mix things up. | |
12 | _testServerPort = 5370 | |
13 | _config_template = """ | |
14 | newServer{address="127.0.0.1:%s"} | |
15 | """ | |
16 | @classmethod | |
17 | def startResponders(cls): | |
18 | print("Launching responders..") | |
19 | ||
5df86a8a | 20 | cls._UDPResponder = threading.Thread(name='UDP Responder', target=cls.UDPResponder, args=[cls._testServerPort, cls._toResponderQueue, cls._fromResponderQueue]) |
548c8b66 RG |
21 | cls._UDPResponder.setDaemon(True) |
22 | cls._UDPResponder.start() | |
5df86a8a | 23 | cls._TCPResponder = threading.Thread(name='TCP Responder', target=cls.TCPResponder, args=[cls._testServerPort, cls._toResponderQueue, cls._fromResponderQueue, False, True]) |
548c8b66 RG |
24 | cls._TCPResponder.setDaemon(True) |
25 | cls._TCPResponder.start() | |
26 | ||
548c8b66 RG |
27 | def testOneMessageAXFR(self): |
28 | """ | |
29 | AXFR: One message | |
30 | """ | |
31 | name = 'one.axfr.tests.powerdns.com.' | |
32 | query = dns.message.make_query(name, 'AXFR', 'IN') | |
33 | response = dns.message.make_response(query) | |
34 | soa = dns.rrset.from_text(name, | |
35 | 60, | |
36 | dns.rdataclass.IN, | |
37 | dns.rdatatype.SOA, | |
38 | 'ns.' + name + ' hostmaster.' + name + ' 1 3600 3600 3600 60') | |
39 | response.answer.append(soa) | |
40 | response.answer.append(dns.rrset.from_text(name, | |
41 | 60, | |
42 | dns.rdataclass.IN, | |
43 | dns.rdatatype.A, | |
44 | '192.0.2.1')) | |
45 | response.answer.append(soa) | |
46 | ||
47 | (receivedQuery, receivedResponse) = self.sendTCPQuery(query, response) | |
48 | receivedQuery.id = query.id | |
49 | self.assertEqual(query, receivedQuery) | |
50 | self.assertEqual(response, receivedResponse) | |
51 | ||
52 | def testOneNoSOAAXFR(self): | |
53 | """ | |
54 | AXFR: One message, no SOA | |
55 | """ | |
56 | name = 'onenosoa.axfr.tests.powerdns.com.' | |
57 | query = dns.message.make_query(name, 'AXFR', 'IN') | |
58 | response = dns.message.make_response(query) | |
59 | response.answer.append(dns.rrset.from_text(name, | |
60 | 60, | |
61 | dns.rdataclass.IN, | |
62 | dns.rdatatype.A, | |
63 | '192.0.2.1')) | |
64 | ||
65 | (receivedQuery, receivedResponse) = self.sendTCPQuery(query, response) | |
66 | receivedQuery.id = query.id | |
67 | self.assertEqual(query, receivedQuery) | |
68 | self.assertEqual(response, receivedResponse) | |
69 | ||
70 | def testFourMessagesAXFR(self): | |
71 | """ | |
72 | AXFR: Four messages | |
73 | """ | |
74 | name = 'four.axfr.tests.powerdns.com.' | |
75 | query = dns.message.make_query(name, 'AXFR', 'IN') | |
76 | responses = [] | |
77 | soa = dns.rrset.from_text(name, | |
78 | 60, | |
79 | dns.rdataclass.IN, | |
80 | dns.rdatatype.SOA, | |
81 | 'ns.' + name + ' hostmaster.' + name + ' 1 3600 3600 3600 60') | |
82 | response = dns.message.make_response(query) | |
83 | response.answer.append(soa) | |
84 | responses.append(response) | |
85 | ||
86 | response = dns.message.make_response(query) | |
87 | response.answer.append(dns.rrset.from_text(name, | |
88 | 60, | |
89 | dns.rdataclass.IN, | |
90 | dns.rdatatype.A, | |
91 | '192.0.2.1')) | |
92 | responses.append(response) | |
93 | ||
94 | response = dns.message.make_response(query) | |
95 | rrset = dns.rrset.from_text(name, | |
96 | 60, | |
97 | dns.rdataclass.IN, | |
98 | dns.rdatatype.AAAA, | |
99 | '2001:DB8::1') | |
100 | response.answer.append(rrset) | |
101 | responses.append(response) | |
102 | ||
103 | response = dns.message.make_response(query) | |
104 | rrset = dns.rrset.from_text(name, | |
105 | 60, | |
106 | dns.rdataclass.IN, | |
107 | dns.rdatatype.TXT, | |
108 | 'dummy') | |
109 | response.answer.append(rrset) | |
110 | responses.append(response) | |
111 | ||
112 | response = dns.message.make_response(query) | |
113 | response.answer.append(soa) | |
114 | responses.append(response) | |
115 | ||
116 | (receivedQuery, receivedResponses) = self.sendTCPQueryWithMultipleResponses(query, responses) | |
117 | receivedQuery.id = query.id | |
118 | self.assertEqual(query, receivedQuery) | |
119 | self.assertEqual(len(receivedResponses), len(responses)) | |
120 | ||
121 | def testFourNoFinalSOAAXFR(self): | |
122 | """ | |
123 | AXFR: Four messages, no final SOA | |
124 | """ | |
125 | name = 'fournosoa.axfr.tests.powerdns.com.' | |
126 | query = dns.message.make_query(name, 'AXFR', 'IN') | |
127 | responses = [] | |
128 | soa = dns.rrset.from_text(name, | |
129 | 60, | |
130 | dns.rdataclass.IN, | |
131 | dns.rdatatype.SOA, | |
132 | 'ns.' + name + ' hostmaster.' + name + ' 1 3600 3600 3600 60') | |
133 | response = dns.message.make_response(query) | |
134 | response.answer.append(soa) | |
135 | responses.append(response) | |
136 | ||
137 | response = dns.message.make_response(query) | |
138 | response.answer.append(dns.rrset.from_text(name, | |
139 | 60, | |
140 | dns.rdataclass.IN, | |
141 | dns.rdatatype.A, | |
142 | '192.0.2.1')) | |
143 | responses.append(response) | |
144 | ||
145 | response = dns.message.make_response(query) | |
146 | rrset = dns.rrset.from_text(name, | |
147 | 60, | |
148 | dns.rdataclass.IN, | |
149 | dns.rdatatype.AAAA, | |
150 | '2001:DB8::1') | |
151 | response.answer.append(rrset) | |
152 | responses.append(response) | |
153 | ||
154 | response = dns.message.make_response(query) | |
155 | rrset = dns.rrset.from_text(name, | |
156 | 60, | |
157 | dns.rdataclass.IN, | |
158 | dns.rdatatype.TXT, | |
159 | 'dummy') | |
160 | response.answer.append(rrset) | |
161 | responses.append(response) | |
162 | ||
163 | (receivedQuery, receivedResponses) = self.sendTCPQueryWithMultipleResponses(query, responses) | |
164 | receivedQuery.id = query.id | |
165 | self.assertEqual(query, receivedQuery) | |
166 | self.assertEqual(len(receivedResponses), len(responses)) | |
167 | ||
31abd117 RG |
168 | # def testFourNoFirstSOAAXFR(self): |
169 | # """ | |
170 | # AXFR: Four messages, no SOA in the first one | |
171 | # """ | |
172 | # name = 'fournosoainfirst.axfr.tests.powerdns.com.' | |
173 | # query = dns.message.make_query(name, 'AXFR', 'IN') | |
174 | # responses = [] | |
175 | # soa = dns.rrset.from_text(name, | |
176 | # 60, | |
177 | # dns.rdataclass.IN, | |
178 | # dns.rdatatype.SOA, | |
179 | # 'ns.' + name + ' hostmaster.' + name + ' 1 3600 3600 3600 60') | |
180 | # response = dns.message.make_response(query) | |
181 | # response.answer.append(dns.rrset.from_text(name, | |
182 | # 60, | |
183 | # dns.rdataclass.IN, | |
184 | # dns.rdatatype.A, | |
185 | # '192.0.2.1')) | |
186 | # responses.append(response) | |
548c8b66 | 187 | |
31abd117 RG |
188 | # response = dns.message.make_response(query) |
189 | # rrset = dns.rrset.from_text(name, | |
190 | # 60, | |
191 | # dns.rdataclass.IN, | |
192 | # dns.rdatatype.AAAA, | |
193 | # '2001:DB8::1') | |
194 | # response.answer.append(soa) | |
195 | # response.answer.append(rrset) | |
196 | # responses.append(response) | |
548c8b66 | 197 | |
31abd117 RG |
198 | # response = dns.message.make_response(query) |
199 | # rrset = dns.rrset.from_text('dummy.' + name, | |
200 | # 60, | |
201 | # dns.rdataclass.IN, | |
202 | # dns.rdatatype.AAAA, | |
203 | # '2001:DB8::1') | |
204 | # response.answer.append(rrset) | |
205 | # responses.append(response) | |
548c8b66 | 206 | |
31abd117 RG |
207 | # response = dns.message.make_response(query) |
208 | # rrset = dns.rrset.from_text(name, | |
209 | # 60, | |
210 | # dns.rdataclass.IN, | |
211 | # dns.rdatatype.TXT, | |
212 | # 'dummy') | |
213 | # response.answer.append(rrset) | |
214 | # response.answer.append(soa) | |
215 | # responses.append(response) | |
548c8b66 | 216 | |
31abd117 RG |
217 | # (receivedQuery, receivedResponses) = self.sendTCPQueryWithMultipleResponses(query, responses) |
218 | # receivedQuery.id = query.id | |
219 | # self.assertEqual(query, receivedQuery) | |
220 | # self.assertEqual(len(receivedResponses), 1) | |
548c8b66 | 221 | |
31abd117 RG |
222 | # def testFourLastSOAInSecondAXFR(self): |
223 | # """ | |
224 | # AXFR: Four messages, SOA in the first one and the second one | |
225 | # """ | |
226 | # name = 'foursecondsoainsecond.axfr.tests.powerdns.com.' | |
227 | # query = dns.message.make_query(name, 'AXFR', 'IN') | |
228 | # responses = [] | |
229 | # soa = dns.rrset.from_text(name, | |
230 | # 60, | |
231 | # dns.rdataclass.IN, | |
232 | # dns.rdatatype.SOA, | |
233 | # 'ns.' + name + ' hostmaster.' + name + ' 1 3600 3600 3600 60') | |
548c8b66 | 234 | |
31abd117 RG |
235 | # response = dns.message.make_response(query) |
236 | # response.answer.append(soa) | |
237 | # response.answer.append(dns.rrset.from_text(name, | |
238 | # 60, | |
239 | # dns.rdataclass.IN, | |
240 | # dns.rdatatype.A, | |
241 | # '192.0.2.1')) | |
242 | # responses.append(response) | |
548c8b66 | 243 | |
31abd117 RG |
244 | # response = dns.message.make_response(query) |
245 | # response.answer.append(soa) | |
246 | # rrset = dns.rrset.from_text(name, | |
247 | # 60, | |
248 | # dns.rdataclass.IN, | |
249 | # dns.rdatatype.AAAA, | |
250 | # '2001:DB8::1') | |
251 | # response.answer.append(rrset) | |
252 | # responses.append(response) | |
548c8b66 | 253 | |
31abd117 RG |
254 | # response = dns.message.make_response(query) |
255 | # rrset = dns.rrset.from_text('dummy.' + name, | |
256 | # 60, | |
257 | # dns.rdataclass.IN, | |
258 | # dns.rdatatype.AAAA, | |
259 | # '2001:DB8::1') | |
260 | # response.answer.append(rrset) | |
261 | # responses.append(response) | |
548c8b66 | 262 | |
31abd117 RG |
263 | # response = dns.message.make_response(query) |
264 | # rrset = dns.rrset.from_text(name, | |
265 | # 60, | |
266 | # dns.rdataclass.IN, | |
267 | # dns.rdatatype.TXT, | |
268 | # 'dummy') | |
269 | # response.answer.append(rrset) | |
270 | # responses.append(response) | |
548c8b66 | 271 | |
31abd117 RG |
272 | # (receivedQuery, receivedResponses) = self.sendTCPQueryWithMultipleResponses(query, responses) |
273 | # receivedQuery.id = query.id | |
274 | # self.assertEqual(query, receivedQuery) | |
275 | # self.assertEqual(len(receivedResponses), 2) |