1 ##############################################################################
2 # Copyright (c) 2016 Dan Radez (dradez@redhat.com) (Red Hat)
4 # All rights reserved. This program and the accompanying materials
5 # are made available under the terms of the Apache License, Version 2.0
6 # which accompanies this distribution, and is available at
7 # http://www.apache.org/licenses/LICENSE-2.0
8 ##############################################################################
14 from mock import patch
16 from mock import MagicMock
17 from mock import mock_open
19 from apex.common.exceptions import ApexDeployException
20 from apex.common.constants import DEFAULT_OS_VERSION
21 from apex.deploy import validate_cross_settings
22 from apex.deploy import build_vms
23 from apex.deploy import create_deploy_parser
24 from apex.deploy import validate_deploy_args
25 from apex.deploy import main
26 from apex.tests.constants import TEST_DUMMY_CONFIG
28 from nose.tools import (
30 assert_regexp_matches,
34 a_mock_open = mock_open(read_data=None)
37 class TestDeploy(unittest.TestCase):
40 """This method is run once for each class before any tests are run"""
43 def teardown_class(cls):
44 """This method is run once for each class _after_ all tests are run"""
47 """This method is run once before _each_ test method is executed"""
50 """This method is run once after _each_ test method is executed"""
52 def test_validate_cross_settings(self):
53 deploy_settings = {'deploy_options': {'dataplane': 'ovs'}}
55 net_settings.enabled_network_list = ['tenant']
56 validate_cross_settings(deploy_settings, net_settings, '')
58 def test_validate_cross_settings_raises(self):
59 deploy_settings = {'deploy_options': {'dataplane': 'notovs'}}
61 net_settings.enabled_network_list = []
62 assert_raises(ApexDeployException,
63 validate_cross_settings,
64 deploy_settings, net_settings, None)
66 @patch('apex.deploy.virt_utils')
67 @patch('apex.deploy.vm_lib')
68 def test_build_vms(self, mock_vm_lib, mock_virt_utils):
69 inventory = {'nodes': [{'memory': '1234',
74 net_sets.enabled_network_list = []
75 build_vms(inventory, net_sets)
77 def test_create_deploy_parser(self):
78 assert_is_instance(create_deploy_parser(), argparse.ArgumentParser)
80 @patch('apex.deploy.os.path')
81 def test_validate_deploy_args(self, mock_os_path):
82 mock_os_path.isfile.return_value = True
84 args.inventory_file = None
87 validate_deploy_args(args)
89 def test_validate_snapshot_deploy_args(self):
91 args.deploy_settings_file = os.path.join(TEST_DUMMY_CONFIG,
92 'dummy-deploy-settings.yaml')
93 args.inventory_file = None
96 validate_deploy_args(args)
98 def test_validate_deploy_args_no_virt_no_inv(self):
100 args.inventory_file = 'file_name'
102 args.snapshot = False
103 assert_raises(ApexDeployException, validate_deploy_args, args)
105 @patch('apex.deploy.os.path')
106 def test_validate_deploy_args_w_virt_raises(self, mock_os_path):
107 mock_os_path.isfile.return_value = False
109 args.inventory_file = None
111 args.snapshot = False
112 assert_raises(ApexDeployException, validate_deploy_args, args)
114 def test_validate_deploy_args_virt_and_inv_file(self):
116 args.inventory_file = 'file_name'
118 args.snapshot = False
119 assert_raises(ApexDeployException, validate_deploy_args, args)
121 @patch('apex.deploy.c_builder')
122 @patch('apex.deploy.ApexDeployment')
123 @patch('apex.deploy.uc_builder')
124 @patch('apex.deploy.network_data.create_network_data')
125 @patch('apex.deploy.shutil')
126 @patch('apex.deploy.oc_deploy')
127 @patch('apex.deploy.uc_lib')
128 @patch('apex.deploy.build_vms')
129 @patch('apex.deploy.Inventory')
130 @patch('apex.deploy.virt_utils')
131 @patch('apex.deploy.oc_cfg')
132 @patch('apex.deploy.parsers')
133 @patch('apex.deploy.utils')
134 @patch('apex.deploy.NetworkEnvironment')
135 @patch('apex.deploy.NetworkSettings')
136 @patch('apex.deploy.DeploySettings')
137 @patch('apex.deploy.os')
138 @patch('apex.deploy.json')
139 @patch('apex.deploy.jumphost')
140 @patch('apex.deploy.validate_cross_settings')
141 @patch('apex.deploy.validate_deploy_args')
142 @patch('apex.deploy.create_deploy_parser')
143 @patch('builtins.open', a_mock_open, create=True)
144 def test_main(self, mock_parser, mock_val_args, mock_cross_sets,
145 mock_jumphost, mock_json, mock_os,
146 mock_deploy_sets, mock_net_sets, mock_net_env,
147 mock_utils, mock_parsers, mock_oc_cfg,
148 mock_virt_utils, mock_inv, mock_build_vms, mock_uc_lib,
149 mock_oc_deploy, mock_shutil, mock_network_data,
150 mock_uc_builder, mock_deployment, mock_c_builder):
151 net_sets_dict = {'networks': MagicMock(),
152 'dns_servers': 'test'}
153 ds_opts_dict = {'global_params': MagicMock(),
154 'deploy_options': {'gluon': False,
156 'sdn_controller': 'opendaylight',
162 'os_version': DEFAULT_OS_VERSION,
163 'containers': False}}
164 args = mock_parser.return_value.parse_args.return_value
166 args.quickstart = False
168 args.snapshot = False
170 net_sets = mock_net_sets.return_value
171 net_sets.enabled_network_list = ['external']
172 net_sets.__getitem__.side_effect = net_sets_dict.__getitem__
173 net_sets.__contains__.side_effect = net_sets_dict.__contains__
174 deploy_sets = mock_deploy_sets.return_value
175 deploy_sets.__getitem__.side_effect = ds_opts_dict.__getitem__
176 deploy_sets.__contains__.side_effect = ds_opts_dict.__contains__
177 mock_parsers.parse_nova_output.return_value = {'testnode1': 'test'}
180 @patch('apex.deploy.SnapshotDeployment')
181 @patch('apex.deploy.validate_cross_settings')
182 @patch('apex.deploy.virt_utils')
183 @patch('apex.deploy.utils')
184 @patch('apex.deploy.Inventory')
185 @patch('apex.deploy.NetworkEnvironment')
186 @patch('apex.deploy.NetworkSettings')
187 @patch('apex.deploy.DeploySettings')
188 @patch('apex.deploy.os')
189 @patch('apex.deploy.create_deploy_parser')
190 @patch('builtins.open', a_mock_open, create=True)
191 def test_main_snapshot(self, mock_parser, mock_os, mock_deploy,
192 mock_net_sets, mock_net_env, mock_inv, mock_utils,
193 mock_virt_utils, mock_cross, mock_snap_deployment):
194 args = mock_parser.return_value.parse_args.return_value
199 mock_snap_deployment.assert_called()
201 @patch('apex.deploy.c_builder')
202 @patch('apex.deploy.ApexDeployment')
203 @patch('apex.deploy.uc_builder')
204 @patch('apex.deploy.network_data.create_network_data')
205 @patch('apex.deploy.shutil')
206 @patch('apex.deploy.oc_deploy')
207 @patch('apex.deploy.uc_lib')
208 @patch('apex.deploy.build_vms')
209 @patch('apex.deploy.Inventory')
210 @patch('apex.deploy.virt_utils')
211 @patch('apex.deploy.oc_cfg')
212 @patch('apex.deploy.parsers')
213 @patch('apex.deploy.utils')
214 @patch('apex.deploy.NetworkEnvironment')
215 @patch('apex.deploy.NetworkSettings')
216 @patch('apex.deploy.DeploySettings')
217 @patch('apex.deploy.os')
218 @patch('apex.deploy.json')
219 @patch('apex.deploy.jumphost')
220 @patch('apex.deploy.validate_cross_settings')
221 @patch('apex.deploy.validate_deploy_args')
222 @patch('apex.deploy.create_deploy_parser')
223 @patch('builtins.open', a_mock_open, create=True)
224 def test_main_virt(self, mock_parser, mock_val_args, mock_cross_sets,
225 mock_jumphost, mock_json, mock_os,
226 mock_deploy_sets, mock_net_sets, mock_net_env,
227 mock_utils, mock_parsers, mock_oc_cfg,
228 mock_virt_utils, mock_inv, mock_build_vms, mock_uc_lib,
229 mock_oc_deploy, mock_shutil, mock_network_data,
230 mock_uc_builder, mock_deployment, mock_c_builder):
231 # didn't work yet line 412
232 # net_sets_dict = {'networks': {'admin': {'cidr': MagicMock()}},
233 # 'dns_servers': 'test'}
234 # net_sets_dict['networks']['admin']['cidr'].return_value.version = 6
235 ds_opts_dict = {'global_params': MagicMock(),
236 'deploy_options': {'gluon': False,
238 'sdn_controller': 'opendaylight',
244 'os_version': DEFAULT_OS_VERSION,
245 'containers': False}}
246 args = mock_parser.return_value.parse_args.return_value
248 args.quickstart = False
250 args.virt_default_ram = 10
251 args.ha_enabled = True
252 args.virt_compute_nodes = 1
253 args.virt_compute_ram = None
254 args.virt_default_ram = 12
256 args.snapshot = False
257 net_sets = mock_net_sets.return_value
258 net_sets.enabled_network_list = ['admin']
259 deploy_sets = mock_deploy_sets.return_value
260 deploy_sets.__getitem__.side_effect = ds_opts_dict.__getitem__
261 deploy_sets.__contains__.side_effect = ds_opts_dict.__contains__
263 args.virt_compute_ram = 16
264 args.virt_default_ram = 10
267 @patch('apex.deploy.ApexDeployment')
268 @patch('apex.deploy.c_builder')
269 @patch('apex.deploy.uc_builder')
270 @patch('apex.deploy.oc_builder')
271 @patch('apex.deploy.network_data.create_network_data')
272 @patch('apex.deploy.shutil')
273 @patch('apex.deploy.oc_deploy')
274 @patch('apex.deploy.uc_lib')
275 @patch('apex.deploy.build_vms')
276 @patch('apex.deploy.Inventory')
277 @patch('apex.deploy.virt_utils')
278 @patch('apex.deploy.oc_cfg')
279 @patch('apex.deploy.parsers')
280 @patch('apex.deploy.utils')
281 @patch('apex.deploy.NetworkEnvironment')
282 @patch('apex.deploy.NetworkSettings')
283 @patch('apex.deploy.DeploySettings')
284 @patch('apex.deploy.os')
285 @patch('apex.deploy.json')
286 @patch('apex.deploy.jumphost')
287 @patch('apex.deploy.validate_cross_settings')
288 @patch('apex.deploy.validate_deploy_args')
289 @patch('apex.deploy.create_deploy_parser')
290 @patch('builtins.open', a_mock_open, create=True)
291 def test_main_virt_containers_upstream(
292 self, mock_parser, mock_val_args, mock_cross_sets, mock_jumphost,
293 mock_json, mock_os, mock_deploy_sets, mock_net_sets, mock_net_env,
294 mock_utils, mock_parsers, mock_oc_cfg, mock_virt_utils,
295 mock_inv, mock_build_vms, mock_uc_lib, mock_oc_deploy,
296 mock_shutil, mock_network_data, mock_oc_builder,
297 mock_uc_builder, mock_c_builder, mock_deployment):
299 ds_opts_dict = {'global_params': MagicMock(),
300 'deploy_options': {'gluon': False,
302 'sdn_controller': 'opendaylight',
308 'os_version': DEFAULT_OS_VERSION,
310 args = mock_parser.return_value.parse_args.return_value
312 args.quickstart = False
314 args.virt_default_ram = 10
315 args.ha_enabled = True
316 args.virt_compute_nodes = 1
317 args.virt_compute_ram = None
318 args.virt_default_ram = 12
320 args.snapshot = False
321 net_sets = mock_net_sets.return_value
322 net_sets.enabled_network_list = ['admin']
323 deploy_sets = mock_deploy_sets.return_value
324 deploy_sets.__getitem__.side_effect = ds_opts_dict.__getitem__
325 deploy_sets.__contains__.side_effect = ds_opts_dict.__contains__
327 args.virt_compute_ram = 16
328 args.virt_default_ram = 10
330 mock_oc_deploy.prep_image.assert_called()
331 # TODO(trozet) add assertions here with arguments for functions in
334 @patch('apex.deploy.c_builder')
335 @patch('apex.deploy.ApexDeployment')
336 @patch('apex.deploy.uc_builder')
337 @patch('apex.deploy.network_data.create_network_data')
338 @patch('apex.deploy.shutil')
339 @patch('apex.deploy.git')
340 @patch('apex.deploy.oc_deploy')
341 @patch('apex.deploy.uc_lib')
342 @patch('apex.deploy.build_vms')
343 @patch('apex.deploy.Inventory')
344 @patch('apex.deploy.virt_utils')
345 @patch('apex.deploy.oc_cfg')
346 @patch('apex.deploy.parsers')
347 @patch('apex.deploy.utils')
348 @patch('apex.deploy.NetworkEnvironment')
349 @patch('apex.deploy.NetworkSettings')
350 @patch('apex.deploy.DeploySettings')
351 @patch('apex.deploy.os')
352 @patch('apex.deploy.json')
353 @patch('apex.deploy.jumphost')
354 @patch('apex.deploy.validate_cross_settings')
355 @patch('apex.deploy.validate_deploy_args')
356 @patch('apex.deploy.create_deploy_parser')
357 @patch('builtins.open', a_mock_open, create=True)
358 def test_main_k8s(self, mock_parser, mock_val_args, mock_cross_sets,
359 mock_jumphost, mock_json, mock_os,
360 mock_deploy_sets, mock_net_sets, mock_net_env,
361 mock_utils, mock_parsers, mock_oc_cfg,
362 mock_virt_utils, mock_inv, mock_build_vms, mock_uc_lib,
363 mock_oc_deploy, mock_git, mock_shutil,
364 mock_network_data, mock_uc_builder, mock_deployment,
366 net_sets_dict = {'networks': MagicMock(),
367 'dns_servers': 'test'}
368 ds_opts_dict = {'global_params': MagicMock(),
369 'deploy_options': {'gluon': False,
371 'sdn_controller': False,
377 'os_version': DEFAULT_OS_VERSION,
378 'containers': False}}
379 args = mock_parser.return_value.parse_args.return_value
381 args.quickstart = False
383 args.upstream = False
384 args.snapshot = False
385 net_sets = mock_net_sets.return_value
386 net_sets.enabled_network_list = ['external']
387 net_sets.__getitem__.side_effect = net_sets_dict.__getitem__
388 net_sets.__contains__.side_effect = net_sets_dict.__contains__
389 deploy_sets = mock_deploy_sets.return_value
390 deploy_sets.__getitem__.side_effect = ds_opts_dict.__getitem__
391 deploy_sets.__contains__.side_effect = ds_opts_dict.__contains__
392 mock_parsers.parse_nova_output.return_value = {'testnode1': 'test'}