def test_import_zone_axfr(self): payload = {} payload['zone'] = """ ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58571 ;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; WARNING: recursion requested but not available ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1680 ;; QUESTION SECTION: ;powerdns.com. IN SOA ;; ANSWER SECTION: powerdns.com. 86400 IN SOA powerdnssec1.ds9a.nl. ahu.ds9a.nl. 1343746984 10800 3600 604800 10800 powerdns.com. 3600 IN NS powerdnssec2.ds9a.nl. powerdns.com. 3600 IN AAAA 2001:888:2000:1d::2 powerdns.com. 86400 IN A 82.94.213.34 powerdns.com. 3600 IN MX 0 xs.powerdns.com. powerdns.com. 3600 IN NS powerdnssec1.ds9a.nl. powerdns.com. 86400 IN SOA powerdnssec1.ds9a.nl. ahu.ds9a.nl. 1343746984 10800 3600 604800 10800 """ payload['name'] = 'powerdns.com.' payload['kind'] = 'Master' payload['nameservers'] = [] payload['soa_edit_api'] = '' # turn off so exact SOA comparison works. r = self.session.post( self.url("/api/v1/servers/localhost/zones"), data=json.dumps(payload), headers={'content-type': 'application/json'}) self.assert_success_json(r) data = r.json() self.assertIn('name', data) expected = { 'NS': [ {'content': 'powerdnssec1.ds9a.nl.'}, {'content': 'powerdnssec2.ds9a.nl.'}, ], 'SOA': [ {'content': 'powerdnssec1.ds9a.nl. ahu.ds9a.nl. 1343746984 10800 3600 604800 10800'}, ], 'MX': [ {'content': '0 xs.powerdns.com.'}, ], 'A': [ {'content': '82.94.213.34', 'name': 'powerdns.com.'}, ], 'AAAA': [ {'content': '2001:888:2000:1d::2', 'name': 'powerdns.com.'}, ], } eq_zone_rrsets(data['rrsets'], expected) # noDot check dbrecs = get_db_records(payload['name'], 'NS') self.assertEqual(dbrecs[0]['content'], 'powerdnssec2.ds9a.nl')
def test_create_zone_with_symbols(self): name, payload, data = self.create_zone(name='foo/bar.'+unique_zone_name()) name = payload['name'] expected_id = name.replace('/', '=2F') for k in ('id', 'url', 'name', 'masters', 'kind', 'last_check', 'notified_serial', 'serial'): self.assertIn(k, data) if k in payload: self.assertEquals(data[k], payload[k]) self.assertEquals(data['id'], expected_id) dbrecs = get_db_records(name, 'SOA') self.assertEqual(dbrecs[0]['name'], name.rstrip('.'))
def test_create_zone_with_custom_soa(self): name = unique_zone_name() content = u"ns1.example.net. [email protected]. 10 10800 3600 604800 3600" rrset = { "name": name, "type": "soa", # test uppercasing of type, too. "ttl": 3600, "records": [{ "content": content, "disabled": False, }], } name, payload, data = self.create_zone(name=name, rrsets=[rrset], soa_edit_api='') self.assertEquals(get_rrset(data, name, 'SOA')['records'], rrset['records']) dbrecs = get_db_records(name, 'SOA') self.assertEqual(dbrecs[0]['content'], content.replace('. ', ' '))
def test_create_zone_with_custom_soa(self): name = unique_zone_name() records = [ { u"name": name, u"type": u"soa", # test uppercasing of type, too. u"ttl": 3600, u"content": u"ns1.example.net. [email protected]. 10 10800 3600 604800 3600", u"disabled": False } ] payload, data = self.create_zone(name=name, records=records, soa_edit_api='') records[0]['type'] = records[0]['type'].upper() self.assertEquals([r for r in data['records'] if r['type'] == records[0]['type']], records) dbrecs = get_db_records(name, records[0]['type']) self.assertEqual(dbrecs[0]['content'], records[0]['content'].replace('. ', ' '))
def test_create_zone(self): # soa_edit_api has a default, override with empty for this test name, payload, data = self.create_zone(serial=22, soa_edit_api='') for k in ('id', 'url', 'name', 'masters', 'kind', 'last_check', 'notified_serial', 'serial', 'soa_edit_api', 'soa_edit', 'account'): self.assertIn(k, data) if k in payload: self.assertEquals(data[k], payload[k]) # validate generated SOA expected_soa = "a.misconfigured.powerdns.server. hostmaster." + name + " " + \ str(payload['serial']) + " 10800 3600 604800 3600" self.assertEquals( get_first_rec(data, name, 'SOA')['content'], expected_soa ) # Because we had confusion about dots, check that the DB is without dots. dbrecs = get_db_records(name, 'SOA') self.assertEqual(dbrecs[0]['content'], expected_soa.replace('. ', ' '))