1# Licensed under the Apache License, Version 2.0 (the "License"); you may 2# not use this file except in compliance with the License. You may obtain 3# a copy of the License at 4# 5# http://www.apache.org/licenses/LICENSE-2.0 6# 7# Unless required by applicable law or agreed to in writing, software 8# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 9# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 10# License for the specific language governing permissions and limitations 11# under the License. 12 13""" 14test_recordset 15---------------------------------- 16 17Functional tests for `shade` recordset methods. 18""" 19import random 20import string 21 22from testtools import content 23 24from openstack.tests.functional import base 25 26 27class TestRecordset(base.BaseFunctionalTest): 28 29 def setUp(self): 30 super(TestRecordset, self).setUp() 31 if not self.user_cloud.has_service('dns'): 32 self.skipTest('dns service not supported by cloud') 33 34 def test_recordsets_with_zone_id(self): 35 '''Test DNS recordsets functionality''' 36 sub = ''.join(random.choice(string.ascii_lowercase) for _ in range(6)) 37 38 zone = '%s.example2.net.' % sub 39 email = 'test@example2.net' 40 name = 'www.%s' % zone 41 type_ = 'a' 42 description = 'Test recordset' 43 ttl = 3600 44 records = ['192.168.1.1'] 45 46 self.addDetail('zone', content.text_content(zone)) 47 self.addDetail('recordset', content.text_content(name)) 48 49 # Create a zone to hold the tested recordset 50 zone_obj = self.user_cloud.create_zone(name=zone, email=email) 51 52 # Test we can create a recordset and we get it returned 53 created_recordset = self.user_cloud.create_recordset(zone_obj['id'], 54 name, 55 type_, 56 records, 57 description, ttl) 58 self.addCleanup(self.cleanup, zone, created_recordset['id']) 59 60 self.assertEqual(created_recordset['zone_id'], zone_obj['id']) 61 self.assertEqual(created_recordset['name'], name) 62 self.assertEqual(created_recordset['type'], type_.upper()) 63 self.assertEqual(created_recordset['records'], records) 64 self.assertEqual(created_recordset['description'], description) 65 self.assertEqual(created_recordset['ttl'], ttl) 66 67 # Test that we can list recordsets 68 recordsets = self.user_cloud.list_recordsets(zone_obj['id'],) 69 self.assertIsNotNone(recordsets) 70 71 # Test we get the same recordset with the get_recordset method 72 get_recordset = self.user_cloud.get_recordset(zone_obj['id'], 73 created_recordset['id']) 74 self.assertEqual(get_recordset['id'], created_recordset['id']) 75 76 # Test we can update a field on the recordset and only that field 77 # is updated 78 updated_recordset = self.user_cloud.update_recordset( 79 zone_obj['id'], 80 created_recordset['id'], 81 ttl=7200) 82 self.assertEqual(updated_recordset['id'], created_recordset['id']) 83 self.assertEqual(updated_recordset['name'], name) 84 self.assertEqual(updated_recordset['type'], type_.upper()) 85 self.assertEqual(updated_recordset['records'], records) 86 self.assertEqual(updated_recordset['description'], description) 87 self.assertEqual(updated_recordset['ttl'], 7200) 88 89 # Test we can delete and get True returned 90 deleted_recordset = self.user_cloud.delete_recordset( 91 zone, created_recordset['id']) 92 self.assertTrue(deleted_recordset) 93 94 def test_recordsets_with_zone_name(self): 95 '''Test DNS recordsets functionality''' 96 sub = ''.join(random.choice(string.ascii_lowercase) for _ in range(6)) 97 98 zone = '%s.example2.net.' % sub 99 email = 'test@example2.net' 100 name = 'www.%s' % zone 101 type_ = 'a' 102 description = 'Test recordset' 103 ttl = 3600 104 records = ['192.168.1.1'] 105 106 self.addDetail('zone', content.text_content(zone)) 107 self.addDetail('recordset', content.text_content(name)) 108 109 # Create a zone to hold the tested recordset 110 zone_obj = self.user_cloud.create_zone(name=zone, email=email) 111 112 # Test we can create a recordset and we get it returned 113 created_recordset = self.user_cloud.create_recordset(zone, name, type_, 114 records, 115 description, ttl) 116 self.addCleanup(self.cleanup, zone, created_recordset['id']) 117 118 self.assertEqual(created_recordset['zone_id'], zone_obj['id']) 119 self.assertEqual(created_recordset['name'], name) 120 self.assertEqual(created_recordset['type'], type_.upper()) 121 self.assertEqual(created_recordset['records'], records) 122 self.assertEqual(created_recordset['description'], description) 123 self.assertEqual(created_recordset['ttl'], ttl) 124 125 # Test that we can list recordsets 126 recordsets = self.user_cloud.list_recordsets(zone) 127 self.assertIsNotNone(recordsets) 128 129 # Test we get the same recordset with the get_recordset method 130 get_recordset = self.user_cloud.get_recordset(zone, 131 created_recordset['id']) 132 self.assertEqual(get_recordset['id'], created_recordset['id']) 133 134 # Test we can update a field on the recordset and only that field 135 # is updated 136 updated_recordset = self.user_cloud.update_recordset( 137 zone_obj['id'], 138 created_recordset['id'], 139 ttl=7200) 140 self.assertEqual(updated_recordset['id'], created_recordset['id']) 141 self.assertEqual(updated_recordset['name'], name) 142 self.assertEqual(updated_recordset['type'], type_.upper()) 143 self.assertEqual(updated_recordset['records'], records) 144 self.assertEqual(updated_recordset['description'], description) 145 self.assertEqual(updated_recordset['ttl'], 7200) 146 147 # Test we can delete and get True returned 148 deleted_recordset = self.user_cloud.delete_recordset( 149 zone, created_recordset['id']) 150 self.assertTrue(deleted_recordset) 151 152 def cleanup(self, zone_name, recordset_id): 153 self.user_cloud.delete_recordset( 154 zone_name, recordset_id) 155 self.user_cloud.delete_zone(zone_name) 156