def test_import_zone_bind(self): payload = {} payload['zone'] = """ $TTL 86400 ; 24 hours could have been written as 24h or 1d ; $TTL used for all RRs without explicit TTL value $ORIGIN example.org. @ 1D IN SOA ns1.example.org. hostmaster.example.org. ( 2002022401 ; serial 3H ; refresh 15 ; retry 1w ; expire 3h ; minimum ) IN NS ns1.example.org. ; in the domain IN NS ns2.smokeyjoe.com. ; external to domain IN MX 10 mail.another.com. ; external mail provider ; server host definitions ns1 IN A 192.168.0.1 ;name server definition www IN A 192.168.0.2 ;web server definition ftp IN CNAME www.example.org. ;ftp server definition ; non server domain hosts bill IN A 192.168.0.3 fred IN A 192.168.0.4 """ payload['name'] = 'example.org.' 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) self.assertIn('records', data) expected = { 'NS': [ { 'content': 'ns1.example.org.' }, { 'content': 'ns2.smokeyjoe.com.' } ], 'SOA': [ { 'content': 'ns1.example.org. hostmaster.example.org. 2002022401 10800 15 604800 10800' } ], 'MX': [ { 'content': '10 mail.another.com.' } ], 'A': [ { 'content': '192.168.0.1', 'name': 'ns1.example.org.' }, { 'content': '192.168.0.2', 'name': 'www.example.org.' }, { 'content': '192.168.0.3', 'name': 'bill.example.org.' }, { 'content': '192.168.0.4', 'name': 'fred.example.org.' } ], 'CNAME': [ { 'content': 'www.example.org.', 'name': 'ftp.example.org.' } ] } eq_zone_dict(data['records'], expected)
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) self.assertIn('records', 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_dict(data['records'], expected) # noDot check dbrecs = get_db_records(payload['name'], 'NS') self.assertEqual(dbrecs[0]['content'], 'powerdnssec2.ds9a.nl')