designate/designate/tests/test_api/test_v2/test_zone_transfers.py

352 lines
13 KiB
Python

# Copyright 2014 Hewlett-Packard Development Company, L.P.
#
# Author: Graham Hayes <graham.hayes@hpe.com>
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from designate.tests.test_api.test_v2 import ApiV2TestCase
class ApiV2ZoneTransfersTest(ApiV2TestCase):
def setUp(self):
super().setUp()
self.zone = self.create_zone()
self.tenant_1_context = self.get_context(project_id=1)
self.tenant_2_context = self.get_context(project_id=2)
self.policy({'admin': '@'})
def test_create_zone_transfer_request(self):
response = self.client.post_json(
'/zones/%s/tasks/transfer_requests' % self.zone.id,
{})
# Check the headers are what we expect
self.assertEqual(201, response.status_int)
self.assertEqual('application/json', response.content_type)
# Check the body structure is what we expect
self.assertIn('links', response.json)
self.assertIn('self', response.json['links'])
# Check the values returned are what we expect
self.assertIn('id', response.json)
self.assertIn('created_at', response.json)
self.assertEqual('ACTIVE', response.json['status'])
self.assertEqual(
self.zone.name,
response.json['zone_name'])
self.assertEqual(
self.zone.id,
response.json['zone_id'])
self.assertIsNone(response.json['updated_at'])
def test_create_zone_transfer_request_scoped(self):
response = self.client.post_json(
'/zones/%s/tasks/transfer_requests' % self.zone.id,
{'target_project_id': str(self.tenant_1_context.project_id)})
# Check the headers are what we expect
self.assertEqual(201, response.status_int)
self.assertEqual('application/json', response.content_type)
# Check the body structure is what we expect
self.assertIn('links', response.json)
self.assertIn('self', response.json['links'])
# Check the values returned are what we expect
self.assertIn('id', response.json)
self.assertIn('created_at', response.json)
self.assertEqual('ACTIVE', response.json['status'])
self.assertEqual(
str(self.tenant_1_context.project_id),
response.json['target_project_id'])
self.assertEqual(
self.zone.id,
response.json['zone_id'])
self.assertIsNone(response.json['updated_at'])
def test_create_zone_transfer_request_empty_body(self):
# Send an empty ("None") body
response = self.client.post_json(
'/zones/%s/tasks/transfer_requests' % self.zone.id,
None)
# Check the headers are what we expect
self.assertEqual(201, response.status_int)
self.assertEqual('application/json', response.content_type)
def test_get_zone_transfer_request(self):
initial = self.client.post_json(
'/zones/%s/tasks/transfer_requests' % self.zone.id,
{})
response = self.client.get(
'/zones/tasks/transfer_requests/%s' %
(initial.json['id']))
# Check the headers are what we expect
self.assertEqual(200, response.status_int)
self.assertEqual('application/json', response.content_type)
# Check the body structure is what we expect
self.assertIn('links', response.json)
self.assertIn('self', response.json['links'])
# Check the values returned are what we expect
self.assertIn('id', response.json)
self.assertIn('created_at', response.json)
self.assertEqual('ACTIVE', response.json['status'])
self.assertEqual(
self.zone.id,
response.json['zone_id'])
self.assertIn('updated_at', response.json)
def test_get_zone_transfer_requests(self):
response = self.client.get(
'/zones/tasks/transfer_requests')
# Check the headers are what we expect
self.assertEqual(200, response.status_int)
self.assertEqual('application/json', response.content_type)
# Check the body structure is what we expect
self.assertIn('transfer_requests', response.json)
self.assertIn('links', response.json)
self.assertIn('self', response.json['links'])
# We should start with 0 transfer accepts
self.assertEqual(0, len(response.json['transfer_requests']))
self.client.post_json(
'/zones/%s/tasks/transfer_requests' % self.zone.id,
{})
data = self.client.get(
'/zones/tasks/transfer_requests')
self.assertEqual(1, len(data.json['transfer_requests']))
def test_update_zone_transfer_request(self):
initial = self.client.post_json(
'/zones/%s/tasks/transfer_requests' % self.zone.id,
{})
response = self.client.patch_json(
'/zones/tasks/transfer_requests/%s' %
(initial.json['id']),
{"description": "TEST"})
# Check the headers are what we expect
self.assertEqual(200, response.status_int)
self.assertEqual('application/json', response.content_type)
# Check the body structure is what we expect
self.assertIn('links', response.json)
self.assertIn('self', response.json['links'])
# Check the values returned are what we expect
self.assertIn('id', response.json)
self.assertIn('created_at', response.json)
self.assertEqual('ACTIVE', response.json['status'])
self.assertEqual(
self.zone.id,
response.json['zone_id'])
self.assertEqual(
'TEST', response.json['description'])
self.assertIn('updated_at', response.json)
def test_update_zone_transfer_request_json_patch_not_implemented(self):
self._assert_exception(
'unknown', 500, self.client.patch_json,
'/zones/tasks/transfer_requests/'
'5c0614e6-1a04-487d-818a-441c3971d401',
{'description': 'Tester'},
content_type='application/json-patch+json'
)
def test_delete_zone_transfer_request(self):
initial = self.client.post_json(
'/zones/%s/tasks/transfer_requests' % self.zone.id,
{})
response = self.client.delete(
'/zones/tasks/transfer_requests/%s' %
(initial.json['id']))
# Check the headers are what we expect
self.assertEqual(204, response.status_int)
def test_create_zone_transfer_accept(self):
initial = self.client.post_json(
'/zones/%s/tasks/transfer_requests' % self.zone.id,
{})
response = self.client.post_json(
'/zones/tasks/transfer_accepts',
{
'zone_transfer_request_id':
initial.json['id'],
'key': initial.json['key']
})
new_ztr = self.client.get(
'/zones/tasks/transfer_requests/%s' %
(initial.json['id']))
# Check the headers are what we expect
self.assertEqual(201, response.status_int)
self.assertEqual('application/json', response.content_type)
# Check the body structure is what we expect
self.assertIn('links', response.json)
self.assertIn('self', response.json['links'])
self.assertIn('zone', response.json['links'])
# Check the values returned are what we expect
self.assertIn('id', response.json)
self.assertEqual(
'COMPLETE',
response.json['status'])
self.assertEqual(
'COMPLETE',
new_ztr.json['status'])
def test_get_zone_transfer_accept(self):
initial = self.client.post_json(
'/zones/%s/tasks/transfer_requests' % self.zone.id,
{})
transfer_accept = self.client.post_json(
'/zones/tasks/transfer_accepts',
{
'zone_transfer_request_id':
initial.json['id'],
'key': initial.json['key']
})
response = self.client.get(
'/zones/tasks/transfer_accepts/%s' %
(transfer_accept.json['id']))
# Check the headers are what we expect
self.assertEqual(200, response.status_int)
self.assertEqual('application/json', response.content_type)
# Check the body structure is what we expect
self.assertIn('links', response.json)
self.assertIn('self', response.json['links'])
# Check the values returned are what we expect
self.assertIn('id', response.json)
self.assertIn('created_at', response.json)
self.assertEqual('COMPLETE', response.json['status'])
self.assertEqual(
self.zone.id,
response.json['zone_id'])
self.assertIn('updated_at', response.json)
self.assertIn('key', response.json)
self.assertIn(initial.json['id'],
response.json['zone_transfer_request_id'])
def test_get_zone_transfer_accept_invalid_id(self):
self._assert_invalid_uuid(self.client.get,
'/zones/tasks/transfer_accepts/%s')
def test_get_zone_transfer_accepts(self):
response = self.client.get(
'/zones/tasks/transfer_accepts')
# Check the headers are what we expect
self.assertEqual(200, response.status_int)
self.assertEqual('application/json', response.content_type)
# Check the body structure is what we expect
self.assertIn('transfer_accepts', response.json)
self.assertIn('links', response.json)
self.assertIn('self', response.json['links'])
self.assertIn('metadata', response.json)
# We should start with 0 transfer accepts
self.assertEqual(0, len(response.json['transfer_accepts']))
initial = self.client.post_json(
'/zones/%s/tasks/transfer_requests' % self.zone.id,
{})
self.client.post_json(
'/zones/tasks/transfer_accepts',
{
'zone_transfer_request_id':
initial.json['id'],
'key': initial.json['key']
})
data = self.client.get(
'/zones/tasks/transfer_accepts')
self.assertEqual(1, len(data.json['transfer_accepts']))
def test_create_zone_transfer_request_deleting_zone(self):
url = '/zones/%s/tasks/transfer_requests' % self.zone.id
body = {}
self.client.delete('/zones/%s' % self.zone['id'], status=202)
self._assert_exception('bad_request', 400, self.client.post_json, url,
body)
def test_create_zone_transfer_accept_deleting_zone(self):
url = '/zones/%s/tasks/transfer_requests' % self.zone.id
body = {}
self.client.delete('/zones/%s' % self.zone['id'], status=202)
self._assert_exception('bad_request', 400, self.client.post_json, url,
body)
# Metadata tests
def test_metadata_exists_zone_transfer_accepts(self):
initial = self.client.post_json(
'/zones/%s/tasks/transfer_requests' % self.zone.id,
{})
self.client.post_json(
'/zones/tasks/transfer_accepts',
{
'zone_transfer_request_id':
initial.json['id'],
'key': initial.json['key']
})
result = self.client.get(
'/zones/tasks/transfer_accepts')
# Make sure the fields exist
self.assertIn('metadata', result.json)
self.assertIn('total_count', result.json['metadata'])
def test_total_count_zone_transfer_accepts(self):
initial = self.client.post_json(
'/zones/%s/tasks/transfer_requests' % self.zone.id,
{})
self.client.post_json(
'/zones/tasks/transfer_accepts',
{
'zone_transfer_request_id':
initial.json['id'],
'key': initial.json['key']
})
result = self.client.get(
'/zones/tasks/transfer_accepts')
# Make sure total_count picked it up
self.assertEqual(1, result.json['metadata']['total_count'])