From: Chris Hofstaedtler Date: Wed, 16 Nov 2022 11:10:43 +0000 (+0100) Subject: API tests: add put_zone helper X-Git-Tag: rec-5.0.0-alpha1~24^2~20 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=2f3f66e437c8dbbbe56c7b5a065c9ddb6d4e40fe;p=thirdparty%2Fpdns.git API tests: add put_zone helper --- diff --git a/regression-tests.api/test_Zones.py b/regression-tests.api/test_Zones.py index 46d92f5520..7440a2db3f 100644 --- a/regression-tests.api/test_Zones.py +++ b/regression-tests.api/test_Zones.py @@ -82,6 +82,7 @@ class Zones(ApiTestCase): def test_list_zones_without_dnssec(self): self._test_list_zones(False) + class AuthZonesHelperMixin(object): def create_zone(self, name=None, **kwargs): if name is None: @@ -96,7 +97,7 @@ class AuthZonesHelperMixin(object): del payload[k] else: payload[k] = v - print("sending", payload) + print("Create zone", name, "with:", payload) r = self.session.post( self.url("/api/v1/servers/localhost/zones"), data=json.dumps(payload), @@ -107,6 +108,24 @@ class AuthZonesHelperMixin(object): print("reply", reply) return name, payload, reply + def put_zone(self, api_zone_id, payload, expect_error=None): + print("PUT zone", api_zone_id, "with:", payload) + r = self.session.put( + self.url("/api/v1/servers/localhost/zones/" + api_zone_id), + data=json.dumps(payload), + headers={'content-type': 'application/json'}) + + print("reply status code:", r.status_code) + if expect_error: + self.assertEqual(r.status_code, 422) + reply = r.json() + if expect_error is True: + pass + else: + self.assertIn(expect_error, reply['error']) + else: + # expect success (no content) + self.assertEqual(r.status_code, 204) @unittest.skipIf(not is_auth(), "Not applicable") class AuthZones(ApiTestCase, AuthZonesHelperMixin): @@ -491,8 +510,7 @@ class AuthZones(ApiTestCase, AuthZonesHelperMixin): name = unique_zone_name() name, payload, data = self.create_zone(dnssec=True) - self.session.put(self.url("/api/v1/servers/localhost/zones/" + name), - data=json.dumps({'dnssec': False})) + self.put_zone(name, {'dnssec': False}) r = self.session.get(self.url("/api/v1/servers/localhost/zones/" + name)) zoneinfo = r.json() @@ -566,8 +584,7 @@ class AuthZones(ApiTestCase, AuthZonesHelperMixin): """ name, payload, data = self.create_zone(dnssec=True, nsec3param='1 0 1 ab') - self.session.put(self.url("/api/v1/servers/localhost/zones/" + name), - data=json.dumps({'nsec3param': ''})) + self.put_zone(name, {'nsec3param': ''}) r = self.session.get( self.url("/api/v1/servers/localhost/zones/" + name)) data = r.json() @@ -580,20 +597,14 @@ class AuthZones(ApiTestCase, AuthZonesHelperMixin): Create a non dnssec zone and set an empty "nsec3param" """ name, payload, data = self.create_zone(dnssec=False) - r = self.session.put(self.url("/api/v1/servers/localhost/zones/" + name), - data=json.dumps({'nsec3param': ''})) - - self.assertEqual(r.status_code, 204) + self.put_zone(name, {'nsec3param': ''}) def test_create_zone_without_dnssec_set_nsec3parm(self): """ Create a non dnssec zone and set "nsec3param" """ name, payload, data = self.create_zone(dnssec=False) - r = self.session.put(self.url("/api/v1/servers/localhost/zones/" + name), - data=json.dumps({'nsec3param': '1 0 1 ab'})) - - self.assertEqual(r.status_code, 422) + self.put_zone(name, {'nsec3param': '1 0 1 ab'}, expect_error=True) def test_create_zone_dnssec_serial(self): """ @@ -605,8 +616,7 @@ class AuthZones(ApiTestCase, AuthZonesHelperMixin): soa_serial = get_first_rec(data, name, 'SOA')['content'].split(' ')[2] self.assertEqual(soa_serial[-2:], '01') - self.session.put(self.url("/api/v1/servers/localhost/zones/" + name), - data=json.dumps({'dnssec': True})) + self.put_zone(name, {'dnssec': True}) r = self.session.get(self.url("/api/v1/servers/localhost/zones/" + name)) data = r.json() @@ -615,8 +625,7 @@ class AuthZones(ApiTestCase, AuthZonesHelperMixin): self.assertEqual(r.status_code, 200) self.assertEqual(soa_serial[-2:], '02') - self.session.put(self.url("/api/v1/servers/localhost/zones/" + name), - data=json.dumps({'dnssec': False})) + self.put_zone(name, {'dnssec': False}) r = self.session.get(self.url("/api/v1/servers/localhost/zones/" + name)) data = r.json() @@ -1119,11 +1128,7 @@ $ORIGIN %NAME% 'soa_edit_api': 'EPOCH', 'soa_edit': 'EPOCH' } - r = self.session.put( - self.url("/api/v1/servers/localhost/zones/" + name), - data=json.dumps(payload), - headers={'content-type': 'application/json'}) - self.assert_success(r) + self.put_zone(name, payload) data = self.session.get(self.url("/api/v1/servers/localhost/zones/" + name)).json() for k in payload.keys(): self.assertIn(k, data) @@ -1135,11 +1140,7 @@ $ORIGIN %NAME% 'soa_edit_api': '', 'soa_edit': '' } - r = self.session.put( - self.url("/api/v1/servers/localhost/zones/" + name), - data=json.dumps(payload), - headers={'content-type': 'application/json'}) - self.assert_success(r) + self.put_zone(name, payload) data = self.session.get(self.url("/api/v1/servers/localhost/zones/" + name)).json() for k in payload.keys(): self.assertIn(k, data) @@ -2208,10 +2209,7 @@ $ORIGIN %NAME% def test_explicit_rectify_slave(self): # Some users want to move a zone to kind=Slave and then rectify, without a re-transfer. name, _, data = self.create_zone = self.create_zone(api_rectify=False, dnssec=True, nsec3param='1 0 1 ab') - r = self.session.put(self.url("/api/v1/servers/localhost/zones/" + data['id']), - data=json.dumps({'kind': 'Slave'}), - headers={'content-type': 'application/json'}) - self.assertEqual(r.status_code, 204) + self.put_zone(data['id'], {'kind': 'Slave'}) r = self.session.put(self.url("/api/v1/servers/localhost/zones/" + data['id'] + "/rectify")) self.assertEqual(r.status_code, 200) if not is_auth_lmdb(): @@ -2299,11 +2297,7 @@ $ORIGIN %NAME% payload = { 'master_tsig_key_ids': [keyname] } - r = self.session.put(self.url('/api/v1/servers/localhost/zones/' + name), - data=json.dumps(payload), - headers={'content-type': 'application/json'}) - self.assertEqual(r.status_code, 422) - self.assertIn('A TSIG key with the name', r.json()['error']) + self.put_zone(name, payload, expect_error='A TSIG key with the name') def test_put_slave_tsig_key_ids_non_existent(self): name = unique_zone_name() @@ -2312,11 +2306,7 @@ $ORIGIN %NAME% payload = { 'slave_tsig_key_ids': [keyname] } - r = self.session.put(self.url('/api/v1/servers/localhost/zones/' + name), - data=json.dumps(payload), - headers={'content-type': 'application/json'}) - self.assertEqual(r.status_code, 422) - self.assertIn('A TSIG key with the name', r.json()['error']) + self.put_zone(name, payload, expect_error='A TSIG key with the name') @unittest.skipIf(not is_auth(), "Not applicable") @@ -2364,11 +2354,7 @@ class AuthRootZone(ApiTestCase, AuthZonesHelperMixin): 'soa_edit_api': 'EPOCH', 'soa_edit': 'EPOCH' } - r = self.session.put( - self.url("/api/v1/servers/localhost/zones/" + zone_id), - data=json.dumps(payload), - headers={'content-type': 'application/json'}) - self.assert_success(r) + self.put_zone(zone_id, payload) data = self.session.get(self.url("/api/v1/servers/localhost/zones/" + zone_id)).json() for k in payload.keys(): self.assertIn(k, data) @@ -2379,11 +2365,7 @@ class AuthRootZone(ApiTestCase, AuthZonesHelperMixin): 'soa_edit_api': '', 'soa_edit': '' } - r = self.session.put( - self.url("/api/v1/servers/localhost/zones/" + zone_id), - data=json.dumps(payload), - headers={'content-type': 'application/json'}) - self.assert_success(r) + self.put_zone(zone_id, payload) data = self.session.get(self.url("/api/v1/servers/localhost/zones/" + zone_id)).json() for k in payload.keys(): self.assertIn(k, data)