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

203 lines
7.5 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(ApiV2ZoneTransfersTest, self).setUp()
self.zone = self.create_zone()
self.tenant_1_context = self.get_context(tenant=1)
self.tenant_2_context = self.get_context(tenant=2)
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.tenant)})
# 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.tenant),
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_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_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_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)