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