Esempio n. 1
0
    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)
Esempio n. 2
0
    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')