1"""
2Copyright 2015 Rackspace
3
4Licensed under the Apache License, Version 2.0 (the "License");
5you may not use this file except in compliance with the License.
6You may obtain a copy of the License at
7
8    http://www.apache.org/licenses/LICENSE-2.0
9
10Unless required by applicable law or agreed to in writing, software
11distributed under the License is distributed on an "AS IS" BASIS,
12WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13See the License for the specific language governing permissions and
14limitations under the License.
15"""
16from tempest.lib.exceptions import CommandFailed
17
18from designateclient.functionaltests.base import BaseDesignateTest
19from designateclient.functionaltests.datagen import random_a_recordset_name
20from designateclient.functionaltests.datagen import random_zone_name
21from designateclient.functionaltests.v2.fixtures import RecordsetFixture
22from designateclient.functionaltests.v2.fixtures import ZoneFixture
23
24
25class TestRecordset(BaseDesignateTest):
26
27    def setUp(self):
28        super(TestRecordset, self).setUp()
29        self.ensure_tld_exists('com')
30        self.zone = self.useFixture(ZoneFixture(
31            name=random_zone_name(),
32            email='test@example.com',
33        )).zone
34
35        name = random_a_recordset_name(self.zone.name)
36        self.recordset = self.useFixture(RecordsetFixture(
37            zone_id=self.zone.id,
38            name=name,
39            records='1.2.3.4',
40            description='An a recordset',
41            type='A',
42            ttl=1234,
43        )).recordset
44
45        self.assertEqual(self.recordset.name, name)
46        self.assertEqual(self.recordset.records, '1.2.3.4')
47        self.assertEqual(self.recordset.description, 'An a recordset')
48        self.assertEqual(self.recordset.type, 'A')
49        self.assertEqual(self.recordset.ttl, '1234')
50
51    def test_recordset_list(self):
52        rsets = self.clients.recordset_list(self.zone.id)
53        self.assertGreater(len(rsets), 0)
54
55    def test_recordset_create_and_show(self):
56        rset = self.clients.recordset_show(self.zone.id, self.recordset.id)
57        self.assertTrue(hasattr(self.recordset, 'action'))
58        self.assertTrue(hasattr(rset, 'action'))
59        self.assertEqual(self.recordset.created_at, rset.created_at)
60        self.assertEqual(self.recordset.description, rset.description)
61        self.assertEqual(self.recordset.id, rset.id)
62        self.assertEqual(self.recordset.name, rset.name)
63        self.assertEqual(self.recordset.records, rset.records)
64        self.assertEqual(self.recordset.status, rset.status)
65        self.assertEqual(self.recordset.ttl, rset.ttl)
66        self.assertEqual(self.recordset.type, rset.type)
67        self.assertEqual(self.recordset.updated_at, rset.updated_at)
68        self.assertEqual(self.recordset.version, rset.version)
69        self.assertEqual(self.recordset.zone_id, self.zone.id)
70
71    def test_recordset_delete(self):
72        rset = self.clients.recordset_delete(self.zone.id, self.recordset.id)
73        self.assertEqual(rset.action, 'DELETE')
74        self.assertEqual(rset.status, 'PENDING')
75
76    def test_recordset_set(self):
77        rset = self.clients.recordset_set(
78            self.zone.id,
79            self.recordset.id,
80            records='2.3.4.5',
81            ttl=2345,
82            description='Updated description',
83        )
84
85        self.assertEqual(rset.records, '2.3.4.5')
86        self.assertEqual(rset.ttl, '2345')
87        self.assertEqual(rset.description, 'Updated description')
88
89    def test_recordset_set_clear_ttl_and_description(self):
90        rset = self.clients.recordset_set(
91            self.zone.id,
92            self.recordset.id,
93            no_description=True,
94            no_ttl=True,
95        )
96
97        self.assertEqual(rset.description, 'None')
98        self.assertEqual(rset.ttl, 'None')
99
100
101class TestRecordsetNegative(BaseDesignateTest):
102
103    def test_invalid_option_on_recordset_create(self):
104        cmd = 'recordset create de47d30b-41c5-4e38-b2c5-e0b908e19ec7 ' \
105            'aaa.desig.com. --type A --records 1.2.3.4 ' \
106            '--invalid "not valid"'
107        self.assertRaises(CommandFailed, self.clients.openstack, cmd)
108
109    def test_invalid_recordset_command(self):
110        cmd = 'recordset hopefullynotvalid'
111        self.assertRaises(CommandFailed, self.clients.openstack, cmd)
112