195
203
with ExpectedException(ProtectedError):
206
def test_add_delegations_may_do_nothing(self):
207
domain = factory.make_Domain()
209
domain.add_delegations(mapping, '::1', 30)
211
def test_add_delegations_adds_delegation(self):
212
parent = factory.make_Domain()
213
name = factory.make_name()
214
factory.make_Domain(name="%s.%s" % (name, parent.name))
215
mappings = lazydict(get_hostname_dnsdata_mapping)
216
mapping = mappings[parent]
217
parent.add_delegations(mapping, "::1", 30)
218
expected_map = HostnameRRsetMapping(
219
rrset={(30, 'AAAA', '::1'), (30, 'NS', name)})
220
self.assertEqual(expected_map, mapping[name])
222
def test_add_delegations_adds_nsrrset_and_glue(self):
223
parent = factory.make_Domain()
224
name = factory.make_name()
225
child = factory.make_Domain(name="%s.%s" % (name, parent.name))
226
dnsrr = factory.make_DNSResource(name='@', domain=child)
227
nsname = factory.make_name()
228
factory.make_DNSData(
229
dnsresource=dnsrr, rrtype='NS',
230
rrdata="%s.%s." % (nsname, child.name))
231
nsrr = factory.make_DNSResource(name=nsname, domain=child)
232
other_name = factory.make_name()
233
factory.make_DNSResource(name=other_name, domain=parent)
234
factory.make_DNSData(
235
dnsresource=dnsrr, rrtype='NS',
236
rrdata="%s.%s." % (other_name, parent.name))
237
mappings = lazydict(get_hostname_dnsdata_mapping)
238
mapping = mappings[parent]
239
parent.add_delegations(mapping, "::1", 30)
241
name: HostnameRRsetMapping(
245
(30, 'NS', "%s.%s." % (nsname, child.name)),
246
(30, 'NS', "%s.%s." % (other_name, parent.name)),
250
for sip in nsrr.ip_addresses.all():
251
if IPAddress(sip.ip).version == 6:
252
expected_map[nsname] = HostnameRRsetMapping(
253
rrset={(30, 'AAAA', sip.ip)})
255
expected_map[nsname] = HostnameRRsetMapping(
256
rrset={(30, 'A', sip.ip)})
257
self.assertEqual(expected_map, mapping)
259
def test_add_delegations_adds_nsrrset_and_glue_in_depth(self):
260
parent = factory.make_Domain()
261
name = factory.make_name()
262
child = factory.make_Domain(name="%s.%s" % (name, parent.name))
263
g_name = factory.make_name()
264
grandchild = factory.make_Domain(name="%s.%s" % (g_name, child.name))
265
dnsrr = factory.make_DNSResource(name='@', domain=child)
266
nsname = factory.make_name()
267
factory.make_DNSData(
268
dnsresource=dnsrr, rrtype='NS',
269
rrdata="%s.%s." % (nsname, grandchild.name))
270
nsrr = factory.make_DNSResource(name=nsname, domain=grandchild)
271
other_name = factory.make_name()
272
factory.make_DNSResource(name=other_name, domain=parent)
273
factory.make_DNSData(
274
dnsresource=dnsrr, rrtype='NS',
275
rrdata="%s.%s." % (other_name, parent.name))
276
mappings = lazydict(get_hostname_dnsdata_mapping)
277
mapping = mappings[parent]
279
name: HostnameRRsetMapping(
283
(30, 'NS', "%s.%s." % (nsname, grandchild.name)),
284
(30, 'NS', "%s.%s." % (other_name, parent.name)),
288
ns_part = "%s.%s" % (nsname, g_name)
289
for sip in nsrr.ip_addresses.all():
290
if IPAddress(sip.ip).version == 6:
291
expected_map[ns_part] = HostnameRRsetMapping(
292
rrset={(30, 'AAAA', sip.ip)})
294
expected_map[ns_part] = HostnameRRsetMapping(
295
rrset={(30, 'A', sip.ip)})
296
parent.add_delegations(mapping, "::1", 30)
297
self.assertEqual(expected_map, mapping)
299
def test_add_delegations_allows_dots(self):
300
parent = factory.make_Domain()
301
name = "%s.%s" % (factory.make_name(), factory.make_name())
302
factory.make_Domain(name="%s.%s" % (name, parent.name))
303
mappings = lazydict(get_hostname_dnsdata_mapping)
304
mapping = mappings[parent]
305
parent.add_delegations(mapping, "::1", 30)
306
expected_map = HostnameRRsetMapping(
307
rrset={(30, 'AAAA', '::1'), (30, 'NS', name)})
308
self.assertEqual(expected_map, mapping[name])
310
def test_add_delegations_stops_at_one_deep(self):
311
parent = factory.make_Domain()
312
name = factory.make_name()
313
child = factory.make_Domain(name="%s.%s" % (name, parent.name))
314
factory.make_Domain(name="%s.%s" % (factory.make_name(), child.name))
315
mappings = lazydict(get_hostname_dnsdata_mapping)
316
mapping = mappings[parent]
317
parent.add_delegations(mapping, "::1", 30)
318
expected_map = HostnameRRsetMapping(
319
rrset={(30, 'AAAA', '::1'), (30, 'NS', name)})
320
self.assertEqual(expected_map, mapping[name])
322
def test_save_migrates_dnsresource(self):
323
p_name = "%s.%s" % (factory.make_name(), factory.make_name())
324
c_name = factory.make_name()
325
parent = factory.make_Domain(name=p_name)
326
dnsrr = factory.make_DNSResource(name=c_name, domain=parent)
327
child = factory.make_Domain(name="%s.%s" % (c_name, p_name))
328
dnsrr_from_db = DNSResource.objects.get(id=dnsrr.id)
329
self.assertEqual('@', dnsrr_from_db.name)
330
self.assertEqual(child, dnsrr_from_db.domain)
331
self.assertItemsEqual(
332
[], DNSResource.objects.filter(name=c_name, domain=parent))
198
334
def test_update_kms_srv_deletes_srv_records(self):
199
335
domain = factory.make_Domain()
200
336
target = "%s.%s" % (factory.make_name(), factory.make_name())