Adding unittests for apex/deploy.py
[apex.git] / apex / tests / test_apex_deploy.py
1 ##############################################################################
2 # Copyright (c) 2016 Dan Radez (dradez@redhat.com) (Red Hat)
3 #
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 ##############################################################################
9
10 import argparse
11 import unittest
12
13 from mock import patch
14 from mock import Mock
15 from mock import MagicMock
16 from mock import mock_open
17
18 from apex.common.exceptions import ApexDeployException
19 from apex.deploy import deploy_quickstart
20 from apex.deploy import validate_cross_settings
21 from apex.deploy import build_vms
22 from apex.deploy import create_deploy_parser
23 from apex.deploy import validate_deploy_args
24 from apex.deploy import main
25
26 from nose.tools import (
27     assert_is_instance,
28     assert_regexp_matches,
29     assert_raises,
30     assert_equal)
31
32 a_mock_open = mock_open(read_data=None)
33
34
35 class TestDeploy(unittest.TestCase):
36     @classmethod
37     def setup_class(cls):
38         """This method is run once for each class before any tests are run"""
39
40     @classmethod
41     def teardown_class(cls):
42         """This method is run once for each class _after_ all tests are run"""
43
44     def setup(self):
45         """This method is run once before _each_ test method is executed"""
46
47     def teardown(self):
48         """This method is run once after _each_ test method is executed"""
49
50     def test_deloy_quickstart(self):
51         deploy_quickstart(None, None, None)
52
53     def test_validate_cross_settings(self):
54         deploy_settings = {'deploy_options': {'dataplane': 'ovs'}}
55         net_settings = Mock()
56         net_settings.enabled_network_list = ['tenant']
57         validate_cross_settings(deploy_settings, net_settings, '')
58
59     def test_validate_cross_settings_raises(self):
60         deploy_settings = {'deploy_options': {'dataplane': 'notovs'}}
61         net_settings = Mock()
62         net_settings.enabled_network_list = []
63         assert_raises(ApexDeployException,
64                       validate_cross_settings,
65                       deploy_settings, net_settings, None)
66
67     @patch('apex.deploy.virt_utils')
68     @patch('apex.deploy.vm_lib')
69     def test_build_vms(self, mock_vm_lib, mock_virt_utils):
70         inventory = {'nodes': [{'memory': '1234',
71                                 'cpu': '4',
72                                 'mac': 'mac_addr',
73                                 'pm_port': 1234}]}
74         net_sets = Mock()
75         net_sets.enabled_network_list = []
76         build_vms(inventory, net_sets)
77
78     def test_create_deploy_parser(self):
79         assert_is_instance(create_deploy_parser(), argparse.ArgumentParser)
80
81     @patch('apex.deploy.os.path')
82     def test_validate_deploy_args(self, mock_os_path):
83         mock_os_path.isfile.return_value = True
84         args = Mock()
85         args.inventory_file = None
86         args.virtual = True
87         validate_deploy_args(args)
88
89     def test_validate_deploy_args_no_virt_no_inv(self):
90         args = Mock()
91         args.inventory_file = 'file_name'
92         args.virtual = False
93         assert_raises(ApexDeployException, validate_deploy_args, args)
94
95     @patch('apex.deploy.os.path')
96     def test_validate_deploy_args_w_virt_raises(self, mock_os_path):
97         mock_os_path.isfile.return_value = False
98         args = Mock()
99         args.inventory_file = None
100         args.virtual = True
101         assert_raises(ApexDeployException, validate_deploy_args, args)
102
103     def test_validate_deploy_args_virt_and_inv_file(self):
104         args = Mock()
105         args.inventory_file = 'file_name'
106         args.virtual = True
107         assert_raises(ApexDeployException, validate_deploy_args, args)
108
109     @patch('apex.deploy.shutil')
110     @patch('apex.deploy.oc_deploy')
111     @patch('apex.deploy.uc_lib')
112     @patch('apex.deploy.build_vms')
113     @patch('apex.deploy.Inventory')
114     @patch('apex.deploy.virt_utils')
115     @patch('apex.deploy.oc_cfg')
116     @patch('apex.deploy.parsers')
117     @patch('apex.deploy.utils')
118     @patch('apex.deploy.NetworkEnvironment')
119     @patch('apex.deploy.NetworkSettings')
120     @patch('apex.deploy.DeploySettings')
121     @patch('apex.deploy.os')
122     @patch('apex.deploy.json')
123     @patch('apex.deploy.jumphost')
124     @patch('apex.deploy.validate_cross_settings')
125     @patch('apex.deploy.validate_deploy_args')
126     @patch('apex.deploy.create_deploy_parser')
127     @patch('builtins.open', a_mock_open, create=True)
128     def test_main(self, mock_parser, mock_val_args, mock_cross_sets,
129                   mock_jumphost, mock_json, mock_os,
130                   mock_deploy_sets, mock_net_sets, mock_net_env,
131                   mock_utils, mock_parsers, mock_oc_cfg,
132                   mock_virt_utils, mock_inv, mock_build_vms, mock_uc_lib,
133                   mock_oc_deploy, mock_shutil):
134         net_sets_dict = {'networks': MagicMock(),
135                          'dns_servers': 'test'}
136         ds_opts_dict = {'global_params': MagicMock(),
137                         'deploy_options': {'gluon': False,
138                                            'congress': True,
139                                            'sdn_controller': 'opendaylight',
140                                            'dataplane': 'ovs',
141                                            'sfc': False,
142                                            'vpn': False,
143                                            'yardstick': 'test'}}
144         args = mock_parser.return_value.parse_args.return_value
145         args.virtual = False
146         args.quickstart = False
147         args.debug = False
148         net_sets = mock_net_sets.return_value
149         net_sets.enabled_network_list = ['external']
150         net_sets.__getitem__.side_effect = net_sets_dict.__getitem__
151         net_sets.__contains__.side_effect = net_sets_dict.__contains__
152         deploy_sets = mock_deploy_sets.return_value
153         deploy_sets.__getitem__.side_effect = ds_opts_dict.__getitem__
154         deploy_sets.__contains__.side_effect = ds_opts_dict.__contains__
155         mock_parsers.parse_nova_output.return_value = {'testnode1': 'test'}
156         main()
157
158     @patch('apex.deploy.validate_cross_settings')
159     @patch('apex.deploy.virt_utils')
160     @patch('apex.deploy.utils')
161     @patch('apex.deploy.Inventory')
162     @patch('apex.deploy.NetworkEnvironment')
163     @patch('apex.deploy.NetworkSettings')
164     @patch('apex.deploy.DeploySettings')
165     @patch('apex.deploy.os')
166     @patch('apex.deploy.create_deploy_parser')
167     @patch('builtins.open', a_mock_open, create=True)
168     def test_main_qs(self, mock_parser, mock_os, mock_deploy,
169                      mock_net_sets, mock_net_env, mock_inv, mock_utils,
170                      mock_virt_utils, mock_cross):
171         args = mock_parser.return_value.parse_args.return_value
172         args.virtual = False
173         args.quickstart = True
174         args.debug = True
175         main()
176
177     @patch('apex.deploy.shutil')
178     @patch('apex.deploy.oc_deploy')
179     @patch('apex.deploy.uc_lib')
180     @patch('apex.deploy.build_vms')
181     @patch('apex.deploy.Inventory')
182     @patch('apex.deploy.virt_utils')
183     @patch('apex.deploy.oc_cfg')
184     @patch('apex.deploy.parsers')
185     @patch('apex.deploy.utils')
186     @patch('apex.deploy.NetworkEnvironment')
187     @patch('apex.deploy.NetworkSettings')
188     @patch('apex.deploy.DeploySettings')
189     @patch('apex.deploy.os')
190     @patch('apex.deploy.json')
191     @patch('apex.deploy.jumphost')
192     @patch('apex.deploy.validate_cross_settings')
193     @patch('apex.deploy.validate_deploy_args')
194     @patch('apex.deploy.create_deploy_parser')
195     @patch('builtins.open', a_mock_open, create=True)
196     def test_main_virt(self, mock_parser, mock_val_args, mock_cross_sets,
197                        mock_jumphost, mock_json, mock_os,
198                        mock_deploy_sets, mock_net_sets, mock_net_env,
199                        mock_utils, mock_parsers, mock_oc_cfg,
200                        mock_virt_utils, mock_inv, mock_build_vms, mock_uc_lib,
201                        mock_oc_deploy, mock_shutil):
202         # didn't work yet line 412
203         # net_sets_dict = {'networks': {'admin': {'cidr': MagicMock()}},
204         #                 'dns_servers': 'test'}
205         # net_sets_dict['networks']['admin']['cidr'].return_value.version = 6
206         ds_opts_dict = {'global_params': MagicMock(),
207                         'deploy_options': {'gluon': False,
208                                            'congress': False,
209                                            'sdn_controller': 'opendaylight',
210                                            'dataplane': 'ovs',
211                                            'sfc': False,
212                                            'vpn': False,
213                                            'yardstick': 'test'}}
214         args = mock_parser.return_value.parse_args.return_value
215         args.virtual = True
216         args.quickstart = False
217         args.debug = True
218         args.virt_default_ram = 10
219         args.ha_enabled = True
220         args.virt_compute_nodes = 1
221         args.virt_compute_ram = None
222         args.virt_default_ram = 12
223         net_sets = mock_net_sets.return_value
224         net_sets.enabled_network_list = ['admin']
225         deploy_sets = mock_deploy_sets.return_value
226         deploy_sets.__getitem__.side_effect = ds_opts_dict.__getitem__
227         deploy_sets.__contains__.side_effect = ds_opts_dict.__contains__
228         main()
229         args.virt_compute_ram = 16
230         args.virt_default_ram = 10
231         main()