def test_search_rr_exact_zone(self): name = unique_zone_name() self.create_zone(name=name) r = self.session.get(self.url("/servers/localhost/search-data?q=" + name)) self.assert_success_json(r) print r.json() self.assertEquals(r.json(), [{u'object_type': u'zone', u'name': name, u'zone_id': name+'.'}])
def test_RenameAuthZone(self): name = unique_zone_name()+'.' payload = { 'name': name, 'kind': 'Native', 'recursion_desired': False } r = self.session.post( self.url("/servers/localhost/zones"), data=json.dumps(payload), headers={'content-type': 'application/json'}) self.assertSuccessJson(r) # now rename it payload = { 'name': 'renamed-'+name, 'kind': 'Native', 'recursion_desired': False } r = self.session.put( self.url("/servers/localhost/zones/" + name), data=json.dumps(payload), headers={'content-type': 'application/json'}) self.assertSuccessJson(r) data = r.json() for k in payload.keys(): self.assertEquals(data[k], payload[k])
def test_SearchRRExactZone(self): name = unique_zone_name() + '.' self.create_zone(name=name, kind='Native') r = self.session.get(self.url("/servers/localhost/search-data?q=" + name)) self.assertSuccessJson(r) print r.json() self.assertEquals(r.json(), [{u'type': u'zone', u'name': name, u'zone_id': name}])
def test_create_auth_zone_with_symbols(self): payload, data = self.create_zone(name='foo/bar.'+unique_zone_name(), kind='Native') # return values are normalized payload['name'] += '.' expected_id = (payload['name'].replace('/', '=2F')) for k in payload.keys(): self.assertEquals(data[k], payload[k]) self.assertEquals(data['id'], expected_id)
def test_GetZoneWithSymbols(self): payload, data = self.create_zone(name='foo/bar.'+unique_zone_name()) name = payload['name'] zone_id = (name.replace('/', '=47')) + '.' r = self.session.get(self.url("/servers/localhost/zones/" + zone_id)) 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])
def test_create_zone_with_symbols(self): 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)
def test_get_zone_with_symbols(self): name, payload, data = self.create_zone(name='foo/bar.'+unique_zone_name()) name = payload['name'] zone_id = (name.replace('/', '=2F')) r = self.session.get(self.url("/api/v1/servers/localhost/zones/" + zone_id)) data = r.json() for k in ('id', 'url', 'name', 'masters', 'kind', 'last_check', 'notified_serial', 'serial', 'dnssec'): self.assertIn(k, data) if k in payload: self.assertEquals(data[k], payload[k])
def test_get_zone_with_symbols(self): payload, data = self.create_zone(name='foo/bar.'+unique_zone_name()) name = payload['name'] zone_id = (name.replace('/', '=2F')) + '.' r = self.session.get(self.url("/servers/localhost/zones/" + zone_id)) data = r.json() for k in ('id', 'url', 'name', 'masters', 'kind', 'last_check', 'notified_serial', 'serial', 'dnssec'): self.assertIn(k, data) if k in payload: self.assertEquals(data[k], payload[k])
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_comments(self): name = unique_zone_name() comments = [{ 'name': name, 'type': 'SOA', 'account': 'test1', 'content': 'blah blah', 'modified_at': 11112, }] payload, data = self.create_zone(name=name, comments=comments) # check our comment has appeared self.assertEquals(data['comments'], comments)
def test_create_zone_with_custom_soa(self): name = unique_zone_name() records = [ { "name": name, "type": "SOA", "ttl": 3600, "content": "ns1.example.net [email protected] 10 10800 3600 604800 3600", "disabled": False } ] payload, data = self.create_zone(name=name, records=records) self.assertEquals([r for r in data['records'] if r['type'] == records[0]['type']], records)
def test_create_auth_zone_no_name(self): name = unique_zone_name() payload = { 'name': '', 'kind': 'Native', } print payload r = self.session.post( self.url("/api/v1/servers/localhost/zones"), data=json.dumps(payload), headers={'content-type': 'application/json'}) self.assertEquals(r.status_code, 422) self.assertIn('is not canonical', r.json()['error'])
def test_create_zone_with_comments(self): name = unique_zone_name() comments = [{ 'name': name, 'type': 'soa', # test uppercasing of type, too. 'account': 'test1', 'content': 'blah blah', 'modified_at': 11112, }] payload, data = self.create_zone(name=name, comments=comments) comments[0]['type'] = comments[0]['type'].upper() # check our comment has appeared self.assertEquals(data['comments'], comments)
def test_create_zone_with_comments(self): name = unique_zone_name() rrset = { "name": name, "type": "soa", # test uppercasing of type, too. "comments": [{ "account": "test1", "content": "blah blah", "modified_at": 11112, }], } name, payload, data = self.create_zone(name=name, rrsets=[rrset]) # check our comment has appeared self.assertEquals(get_rrset(data, name, 'SOA')['comments'], rrset['comments'])
def test_create_zone_with_nameservers_non_string(self): # ensure we don't crash name = unique_zone_name() payload = { 'name': name, 'kind': 'Native', 'nameservers': [{'a': 'ns1.example.com'}] # invalid } print payload r = self.session.post( self.url("/servers/localhost/zones"), data=json.dumps(payload), headers={'content-type': 'application/json'}) self.assertEquals(r.status_code, 422)
def test_create_zone_with_comments(self): name = unique_zone_name() comments = [ { 'name': name, 'type': 'SOA', 'account': 'test1', 'content': 'blah blah', 'modified_at': 11112, } ] payload, data = self.create_zone(name=name, comments=comments) # check our comment has appeared self.assertEquals(data['comments'], comments)
def test_create_zone_with_records(self): name = unique_zone_name() records = [ { "name": name, "type": "A", "ttl": 3600, "content": "4.3.2.1", "disabled": False } ] payload, data = self.create_zone(name=name, records=records) # check our record has appeared self.assertEquals([r for r in data['records'] if r['type'] == records[0]['type']], records)
def test_create_zone_with_wildcard_records(self): name = unique_zone_name() rrset = { "name": "*."+name, "type": "A", "ttl": 3600, "records": [{ "content": "4.3.2.1", "disabled": False, }], } name, payload, data = self.create_zone(name=name, rrsets=[rrset]) # check our record has appeared self.assertEquals(get_rrset(data, rrset['name'], 'A')['records'], rrset['records'])
def test_create_zone_restricted_chars(self): name = 'test:' + unique_zone_name() # : isn't good as a name. payload = { 'name': name, 'kind': 'Native', 'nameservers': ['ns1.example.com'] } print payload r = self.session.post( self.url("/api/v1/servers/localhost/zones"), data=json.dumps(payload), headers={'content-type': 'application/json'}) self.assertEquals(r.status_code, 422) self.assertIn('contains unsupported characters', r.json()['error'])
def test_create_zone_double_dot(self): name = 'test..' + unique_zone_name() payload = { 'name': name, 'kind': 'Native', 'nameservers': ['ns1.example.com.'] } print payload r = self.session.post( self.url("/api/v1/servers/localhost/zones"), data=json.dumps(payload), headers={'content-type': 'application/json'}) self.assertEquals(r.status_code, 422) self.assertIn('Unable to parse DNS Name', r.json()['error'])
def test_create_zone_with_records(self): name = unique_zone_name() records = [{ "name": name, "type": "A", "ttl": 3600, "content": "4.3.2.1", "disabled": False }] payload, data = self.create_zone(name=name, records=records) # check our record has appeared self.assertEquals( [r for r in data['records'] if r['type'] == records[0]['type']], records)
def create_zone(self, name=None, nameservers=None): if name is None: name = unique_zone_name() payload = { 'name': name, 'kind': 'Native', 'nameservers': ['ns1.example.com', 'ns2.example.com'] } if nameservers is not None: payload['nameservers'] = nameservers r = self.session.post(self.url("/servers/localhost/zones"), data=json.dumps(payload), headers={'content-type': 'application/json'}) self.assertSuccessJson(r) return (payload, r.json())
def test_CreateAuthZone(self): payload = { 'name': unique_zone_name(), 'kind': 'Native', 'recursion_desired': False } r = self.session.post(self.url("/servers/localhost/zones"), data=json.dumps(payload), headers={'content-type': 'application/json'}) self.assertSuccessJson(r) data = r.json() # return values are normalized payload['name'] += '.' for k in payload.keys(): self.assertEquals(data[k], payload[k])
def setUp(self): super(Cryptokeys, self).setUp() self.keyid = 0 self.zone = unique_zone_name() self.zone_nodot = self.zone[:-1] payload = { 'name': self.zone, 'kind': 'Native', 'nameservers': ['ns1.example.com.', 'ns2.example.com.'] } 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) self.assertEqual(r.status_code, 201)
def test_create_zone_with_comments(self): name = unique_zone_name() comments = [ { 'name': name, 'type': 'soa', # test uppercasing of type, too. 'account': 'test1', 'content': 'blah blah', 'modified_at': 11112, } ] payload, data = self.create_zone(name=name, comments=comments) comments[0]['type'] = comments[0]['type'].upper() # check our comment has appeared self.assertEquals(data['comments'], comments)
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 create_zone(self, name=None, kind=None, rd=False, servers=None): if name is None: name = unique_zone_name() if servers is None: servers = [] payload = { 'name': name, 'kind': kind, 'servers': servers, 'recursion_desired': rd } r = self.session.post(self.url("/servers/localhost/zones"), data=json.dumps(payload), headers={'content-type': 'application/json'}) self.assert_success_json(r) return payload, r.json()
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 setUp(self): super(Cryptokeys, self).setUp() self.keyid = 0 self.zone = unique_zone_name() self.zone_nodot = self.zone[:-1] payload = { 'name': self.zone, 'kind': 'Native', 'nameservers': ['ns1.example.com.', 'ns2.example.com.'] } 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) self.assertEquals(r.status_code, 201)
def test_CreateAuthZone(self): payload = { 'name': unique_zone_name(), 'kind': 'Native', 'recursion_desired': False } r = self.session.post( self.url("/servers/localhost/zones"), data=json.dumps(payload), headers={'content-type': 'application/json'}) self.assertSuccessJson(r) data = r.json() # return values are normalized payload['name'] += '.' for k in payload.keys(): self.assertEquals(data[k], payload[k])
def create_zone(self, name=None, nameservers=None): if name is None: name = unique_zone_name() payload = { 'name': name, 'kind': 'Native', 'nameservers': ['ns1.example.com', 'ns2.example.com'] } if nameservers is not None: payload['nameservers'] = nameservers r = self.session.post( self.url("/servers/localhost/zones"), data=json.dumps(payload), headers={'content-type': 'application/json'}) self.assertSuccessJson(r) return (payload, r.json())
def create_zone(self, name=None, **kwargs): if name is None: name = unique_zone_name() payload = { 'name': name, 'kind': 'Native', 'nameservers': ['ns1.example.com', 'ns2.example.com'] } for k, v in kwargs.items(): payload[k] = v print payload r = self.session.post( self.url("/servers/localhost/zones"), data=json.dumps(payload), headers={'content-type': 'application/json'}) self.assertSuccessJson(r) return (payload, r.json())
def create_zone(self, name=None, kind=None, rd=False, servers=None): if name is None: name = unique_zone_name() if servers is None: servers = [] payload = { 'name': name, 'kind': kind, 'servers': servers, 'recursion_desired': rd } r = self.session.post( self.url("/servers/localhost/zones"), data=json.dumps(payload), headers={'content-type': 'application/json'}) self.assert_success_json(r) return payload, r.json()
def test_search_rr_exact_zone(self): name = unique_zone_name() self.create_zone(name=name, serial=22, soa_edit_api='') r = self.session.get(self.url("/api/v1/servers/localhost/search-data?q=" + name.rstrip('.'))) self.assert_success_json(r) print r.json() self.assertEquals(r.json(), [ {u'object_type': u'zone', u'name': name, u'zone_id': name}, {u'content': u'a.misconfigured.powerdns.server. hostmaster.'+name+' 22 10800 3600 604800 3600', u'zone_id': name, u'zone': name, u'object_type': u'record', u'disabled': False, u'ttl': 3600, u'type': u'SOA', u'name': name}, {u'content': u'ns1.example.com.', u'zone_id': name, u'zone': name, u'object_type': u'record', u'disabled': False, u'ttl': 3600, u'type': u'NS', u'name': name}, {u'content': u'ns2.example.com.', u'zone_id': name, u'zone': name, u'object_type': u'record', u'disabled': False, u'ttl': 3600, u'type': u'NS', u'name': name}, ])
def create_zone(self, name=None, **kwargs): if name is None: name = unique_zone_name() payload = { 'name': name, 'kind': 'Native', 'nameservers': ['ns1.example.com', 'ns2.example.com'] } for k, v in kwargs.items(): if v is None: del payload[k] else: payload[k] = v print payload r = self.session.post(self.url("/servers/localhost/zones"), data=json.dumps(payload), headers={'content-type': 'application/json'}) self.assert_success_json(r) return payload, r.json()
def test_import_zone_axfr_outofzone(self): # Ensure we don't create out-of-zone records name = unique_zone_name() payload = {} payload['zone'] = """ NAME 86400 IN SOA powerdnssec1.ds9a.nl. ahu.ds9a.nl. 1343746984 10800 3600 604800 10800 NAME 3600 IN NS powerdnssec2.ds9a.nl. example.org. 3600 IN AAAA 2001:888:2000:1d::2 NAME 86400 IN SOA powerdnssec1.ds9a.nl. ahu.ds9a.nl. 1343746984 10800 3600 604800 10800 """.replace('NAME', name) payload['name'] = name payload['kind'] = 'Master' payload['nameservers'] = [] r = self.session.post( self.url("/api/v1/servers/localhost/zones"), data=json.dumps(payload), headers={'content-type': 'application/json'}) self.assertEquals(r.status_code, 422) self.assertEqual(r.json()['error'], 'RRset example.org. IN AAAA: Name is out of zone')
def test_RenameAuthZone(self): name = unique_zone_name() + '.' payload = {'name': name, 'kind': 'Native', 'recursion_desired': False} r = self.session.post(self.url("/servers/localhost/zones"), data=json.dumps(payload), headers={'content-type': 'application/json'}) self.assertSuccessJson(r) # now rename it payload = { 'name': 'renamed-' + name, 'kind': 'Native', 'recursion_desired': False } r = self.session.put(self.url("/servers/localhost/zones/" + name), data=json.dumps(payload), headers={'content-type': 'application/json'}) self.assertSuccessJson(r) data = r.json() for k in payload.keys(): self.assertEquals(data[k], payload[k])
def create_zone(self, name=None, **kwargs): if name is None: name = unique_zone_name() payload = { 'name': name, 'kind': 'Native', 'nameservers': ['ns1.example.com.', 'ns2.example.com.'] } for k, v in kwargs.items(): if v is None: del payload[k] else: payload[k] = v print "sending", payload 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) self.assertEquals(r.status_code, 201) reply = r.json() print "reply", reply return name, payload, reply
def test_create_zone_trailing_dot(self): # Trailing dots should not end up in the zone name. basename = unique_zone_name() payload, data = self.create_zone(name=basename + '.') self.assertEquals(data['name'], basename)
def test_create_zone_trailing_dot(self): # Trailing dots should not end up in the zone name. basename = unique_zone_name() payload, data = self.create_zone(name=basename+'.') self.assertEquals(data['name'], basename)