Refactoring of VolumeSettings to extend VolumeConfig
[snaps.git] / snaps / config / tests / volume_tests.py
1 # Copyright (c) 2017 Cable Television Laboratories, Inc. ("CableLabs")
2 #                    and others.  All rights reserved.
3 #
4 # Licensed under the Apache License, Version 2.0 (the "License");
5 # you may not use this file except in compliance with the License.
6 # You may obtain a copy of the License at:
7 #
8 #     http://www.apache.org/licenses/LICENSE-2.0
9 #
10 # Unless required by applicable law or agreed to in writing, software
11 # distributed under the License is distributed on an "AS IS" BASIS,
12 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 # See the License for the specific language governing permissions and
14 # limitations under the License.
15 import unittest
16
17 from snaps.config.volume import VolumeConfigError, VolumeConfig
18
19
20 class VolumeConfigUnitTests(unittest.TestCase):
21     """
22     Tests the construction of the VolumeConfig class
23     """
24
25     def test_no_params(self):
26         with self.assertRaises(VolumeConfigError):
27             VolumeConfig()
28
29     def test_empty_config(self):
30         with self.assertRaises(VolumeConfigError):
31             VolumeConfig(**dict())
32
33     def test_name_only(self):
34         settings = VolumeConfig(name='foo')
35         self.assertEqual('foo', settings.name)
36         self.assertIsNone(settings.description)
37         self.assertEquals(1, settings.size)
38         self.assertIsNone(settings.image_name)
39         self.assertIsNone(settings.type_name)
40         self.assertIsNone(settings.availability_zone)
41         self.assertFalse(settings.multi_attach)
42
43     def test_config_with_name_only(self):
44         settings = VolumeConfig(**{'name': 'foo'})
45         self.assertEqual('foo', settings.name)
46         self.assertIsNone(settings.description)
47         self.assertEquals(1, settings.size)
48         self.assertIsNone(settings.image_name)
49         self.assertIsNone(settings.type_name)
50         self.assertIsNone(settings.availability_zone)
51         self.assertFalse(settings.multi_attach)
52
53     def test_all_strings(self):
54         settings = VolumeConfig(
55             name='foo', description='desc', size='2', image_name='image',
56             type_name='type', availability_zone='zone1', multi_attach='true')
57
58         self.assertEqual('foo', settings.name)
59         self.assertEqual('desc', settings.description)
60         self.assertEqual(2, settings.size)
61         self.assertEqual('image', settings.image_name)
62         self.assertEqual('type', settings.type_name)
63         self.assertEqual('zone1', settings.availability_zone)
64         self.assertTrue(settings.multi_attach)
65
66     def test_all_correct_type(self):
67         settings = VolumeConfig(
68             name='foo', description='desc', size=2, image_name='image',
69             type_name='bar', availability_zone='zone1', multi_attach=True)
70
71         self.assertEqual('foo', settings.name)
72         self.assertEqual('desc', settings.description)
73         self.assertEqual(2, settings.size)
74         self.assertEqual('image', settings.image_name)
75         self.assertEqual('bar', settings.type_name)
76         self.assertEqual('zone1', settings.availability_zone)
77         self.assertTrue(settings.multi_attach)
78
79     def test_config_all(self):
80         settings = VolumeConfig(
81             **{'name': 'foo', 'description': 'desc', 'size': '2',
82                'image_name': 'foo', 'type_name': 'bar',
83                'availability_zone': 'zone1', 'multi_attach': 'true'})
84
85         self.assertEqual('foo', settings.name)
86         self.assertEqual('desc', settings.description)
87         self.assertEqual(2, settings.size)
88         self.assertEqual('foo', settings.image_name)
89         self.assertEqual('bar', settings.type_name)
90         self.assertEqual('zone1', settings.availability_zone)
91         self.assertTrue(settings.multi_attach)