Refactoring of ImageSettings to extend ImageConfig
[snaps.git] / snaps / config / tests / image_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.image import ImageConfigError, ImageConfig
18
19
20 class ImageConfigUnitTests(unittest.TestCase):
21     """
22     Tests the construction of the ImageConfig class
23     """
24
25     def test_no_params(self):
26         with self.assertRaises(ImageConfigError):
27             ImageConfig()
28
29     def test_empty_config(self):
30         with self.assertRaises(ImageConfigError):
31             ImageConfig(**dict())
32
33     def test_name_only(self):
34         with self.assertRaises(ImageConfigError):
35             ImageConfig(name='foo')
36
37     def test_config_with_name_only(self):
38         with self.assertRaises(ImageConfigError):
39             ImageConfig(**{'name': 'foo'})
40
41     def test_name_user_only(self):
42         with self.assertRaises(ImageConfigError):
43             ImageConfig(name='foo', image_user='bar')
44
45     def test_config_with_name_user_only(self):
46         with self.assertRaises(ImageConfigError):
47             ImageConfig(**{'name': 'foo', 'image_user': 'bar'})
48
49     def test_name_user_format_only(self):
50         with self.assertRaises(ImageConfigError):
51             ImageConfig(name='foo', image_user='bar', img_format='qcow2')
52
53     def test_config_with_name_user_format_only(self):
54         with self.assertRaises(ImageConfigError):
55             ImageConfig(
56                 **{'name': 'foo', 'image_user': 'bar', 'format': 'qcow2'})
57
58     def test_name_user_format_url_only(self):
59         settings = ImageConfig(name='foo', image_user='bar',
60                                img_format='qcow2', url='http://foo.com')
61         self.assertEqual('foo', settings.name)
62         self.assertEqual('bar', settings.image_user)
63         self.assertEqual('qcow2', settings.format)
64         self.assertEqual('http://foo.com', settings.url)
65         self.assertIsNone(settings.image_file)
66         self.assertFalse(settings.exists)
67         self.assertFalse(settings.public)
68         self.assertIsNone(settings.nic_config_pb_loc)
69
70     def test_name_user_format_url_only_properties(self):
71         properties = {'hw_video_model': 'vga'}
72         settings = ImageConfig(name='foo', image_user='bar',
73                                img_format='qcow2', url='http://foo.com',
74                                extra_properties=properties)
75         self.assertEqual('foo', settings.name)
76         self.assertEqual('bar', settings.image_user)
77         self.assertEqual('qcow2', settings.format)
78         self.assertEqual('http://foo.com', settings.url)
79         self.assertEqual(properties, settings.extra_properties)
80         self.assertIsNone(settings.image_file)
81         self.assertFalse(settings.exists)
82         self.assertFalse(settings.public)
83         self.assertIsNone(settings.nic_config_pb_loc)
84
85     def test_config_with_name_user_format_url_only(self):
86         settings = ImageConfig(
87             **{'name': 'foo', 'image_user': 'bar', 'format': 'qcow2',
88                'download_url': 'http://foo.com'})
89         self.assertEqual('foo', settings.name)
90         self.assertEqual('bar', settings.image_user)
91         self.assertEqual('qcow2', settings.format)
92         self.assertEqual('http://foo.com', settings.url)
93         self.assertIsNone(settings.image_file)
94         self.assertFalse(settings.exists)
95         self.assertFalse(settings.public)
96         self.assertIsNone(settings.nic_config_pb_loc)
97
98     def test_name_user_format_file_only(self):
99         settings = ImageConfig(name='foo', image_user='bar',
100                                img_format='qcow2',
101                                image_file='/foo/bar.qcow')
102         self.assertEqual('foo', settings.name)
103         self.assertEqual('bar', settings.image_user)
104         self.assertEqual('qcow2', settings.format)
105         self.assertIsNone(settings.url)
106         self.assertEqual('/foo/bar.qcow', settings.image_file)
107         self.assertFalse(settings.exists)
108         self.assertFalse(settings.public)
109         self.assertIsNone(settings.nic_config_pb_loc)
110
111     def test_config_with_name_user_format_file_only(self):
112         settings = ImageConfig(
113             **{'name': 'foo', 'image_user': 'bar', 'format': 'qcow2',
114                'image_file': '/foo/bar.qcow'})
115         self.assertEqual('foo', settings.name)
116         self.assertEqual('bar', settings.image_user)
117         self.assertEqual('qcow2', settings.format)
118         self.assertIsNone(settings.url)
119         self.assertEqual('/foo/bar.qcow', settings.image_file)
120         self.assertFalse(settings.exists)
121         self.assertFalse(settings.public)
122         self.assertIsNone(settings.nic_config_pb_loc)
123
124     def test_all_url(self):
125         properties = {'hw_video_model': 'vga'}
126         kernel_settings = ImageConfig(name='kernel', url='http://kernel.com',
127                                       image_user='bar', img_format='qcow2')
128         ramdisk_settings = ImageConfig(name='ramdisk',
129                                        url='http://ramdisk.com',
130                                        image_user='bar', img_format='qcow2')
131         settings = ImageConfig(name='foo', image_user='bar',
132                                img_format='qcow2', url='http://foo.com',
133                                extra_properties=properties,
134                                nic_config_pb_loc='/foo/bar',
135                                kernel_image_settings=kernel_settings,
136                                ramdisk_image_settings=ramdisk_settings,
137                                exists=True, public=True)
138         self.assertEqual('foo', settings.name)
139         self.assertEqual('bar', settings.image_user)
140         self.assertEqual('qcow2', settings.format)
141         self.assertEqual('http://foo.com', settings.url)
142         self.assertEqual(properties, settings.extra_properties)
143         self.assertIsNone(settings.image_file)
144         self.assertEqual('/foo/bar', settings.nic_config_pb_loc)
145         self.assertEqual('kernel', settings.kernel_image_settings.name)
146         self.assertEqual('http://kernel.com',
147                          settings.kernel_image_settings.url)
148         self.assertEqual('bar', settings.kernel_image_settings.image_user)
149         self.assertEqual('qcow2', settings.kernel_image_settings.format)
150         self.assertEqual('ramdisk', settings.ramdisk_image_settings.name)
151         self.assertEqual('http://ramdisk.com',
152                          settings.ramdisk_image_settings.url)
153         self.assertEqual('bar', settings.ramdisk_image_settings.image_user)
154         self.assertEqual('qcow2', settings.ramdisk_image_settings.format)
155         self.assertTrue(settings.exists)
156         self.assertTrue(settings.public)
157
158     def test_config_all_url(self):
159         settings = ImageConfig(
160             **{'name': 'foo', 'image_user': 'bar', 'format': 'qcow2',
161                'download_url': 'http://foo.com',
162                'extra_properties': '{\'hw_video_model\': \'vga\'}',
163                'nic_config_pb_loc': '/foo/bar',
164                'kernel_image_settings': {
165                    'name': 'kernel',
166                    'download_url': 'http://kernel.com',
167                    'image_user': 'bar',
168                    'format': 'qcow2'},
169                'ramdisk_image_settings': {
170                    'name': 'ramdisk',
171                    'download_url': 'http://ramdisk.com',
172                    'image_user': 'bar',
173                    'format': 'qcow2'},
174                'exists': True, 'public': True})
175         self.assertEqual('foo', settings.name)
176         self.assertEqual('bar', settings.image_user)
177         self.assertEqual('qcow2', settings.format)
178         self.assertEqual('http://foo.com', settings.url)
179         self.assertEqual('{\'hw_video_model\': \'vga\'}',
180                          settings.extra_properties)
181         self.assertIsNone(settings.image_file)
182         self.assertEqual('/foo/bar', settings.nic_config_pb_loc)
183         self.assertEqual('kernel', settings.kernel_image_settings.name)
184         self.assertEqual('http://kernel.com',
185                          settings.kernel_image_settings.url)
186         self.assertEqual('ramdisk', settings.ramdisk_image_settings.name)
187         self.assertEqual('http://ramdisk.com',
188                          settings.ramdisk_image_settings.url)
189         self.assertTrue(settings.exists)
190         self.assertTrue(settings.public)
191
192     def test_all_file(self):
193         properties = {'hw_video_model': 'vga'}
194         settings = ImageConfig(name='foo', image_user='bar',
195                                img_format='qcow2',
196                                image_file='/foo/bar.qcow',
197                                extra_properties=properties,
198                                nic_config_pb_loc='/foo/bar', exists=True,
199                                public=True)
200         self.assertEqual('foo', settings.name)
201         self.assertEqual('bar', settings.image_user)
202         self.assertEqual('qcow2', settings.format)
203         self.assertIsNone(settings.url)
204         self.assertEqual('/foo/bar.qcow', settings.image_file)
205         self.assertEqual(properties, settings.extra_properties)
206         self.assertEqual('/foo/bar', settings.nic_config_pb_loc)
207         self.assertTrue(settings.exists)
208         self.assertTrue(settings.public)
209
210     def test_config_all_file(self):
211         settings = ImageConfig(
212             **{'name': 'foo', 'image_user': 'bar', 'format': 'qcow2',
213                'image_file': '/foo/bar.qcow',
214                'extra_properties': '{\'hw_video_model\' : \'vga\'}',
215                'nic_config_pb_loc': '/foo/bar', 'exists': True,
216                'public': True})
217         self.assertEqual('foo', settings.name)
218         self.assertEqual('bar', settings.image_user)
219         self.assertEqual('qcow2', settings.format)
220         self.assertIsNone(settings.url)
221         self.assertEqual('/foo/bar.qcow', settings.image_file)
222         self.assertEqual('{\'hw_video_model\' : \'vga\'}',
223                          settings.extra_properties)
224         self.assertEqual('/foo/bar', settings.nic_config_pb_loc)
225         self.assertTrue(settings.exists)
226         self.assertTrue(settings.public)