diff options
Diffstat (limited to 'tests/unit/post/test_post_execute.py')
-rw-r--r-- | tests/unit/post/test_post_execute.py | 165 |
1 files changed, 164 insertions, 1 deletions
diff --git a/tests/unit/post/test_post_execute.py b/tests/unit/post/test_post_execute.py index c06bc085..55e345a2 100644 --- a/tests/unit/post/test_post_execute.py +++ b/tests/unit/post/test_post_execute.py @@ -11,12 +11,20 @@ import os from deepdiff import DeepDiff import pytest +import mock +from deploy.post import execute from deploy.post.execute import ( _config_external_network, + _config_external_subnet, _config_icmp_security_group_rule, _config_ssh_security_group_rule, - _config_kolla_admin_openrc + _config_kolla_admin_openrc, + _create_external_network, + _create_flavor_m1_micro, + _prepare_cirros, + _create_image_TestVM, + _create_security_group_rules ) @@ -47,6 +55,42 @@ def test__config_external_network(ext_name, physnet, expected): assert _config_external_network(ext_name, physnet) == expected +@pytest.mark.parametrize('ext_id, network_conf, expected', [ + (0x1234, + { + 'ext_network_name': 'admin_external', + 'ext_cidr': '172.70.0.0/24', + 'ext_gateway': '172.70.0.1', + 'ext_ip_ranges': [{'start': '172.70.0.2', 'end': '172.70.0.100'}] + }, + { + 'subnets': [ + { + 'name': 'admin_external_subnet', + 'cidr': '172.70.0.0/24', + 'ip_version': 4, + 'network_id': 0x1234, + 'gateway_ip': '172.70.0.1', + 'allocation_pools': [{'start': '172.70.0.2', 'end': '172.70.0.100'}], + 'enable_dhcp': False + } + ] + })]) +def test__config_external_subnet(ext_id, network_conf, expected): + class Network_conf(): + def __init__(self, network_name, cidr, gateway, ip_ranges): + self.ext_network_name = network_name + self.ext_cidr = cidr + self.ext_gateway = gateway + self.ext_ip_ranges = ip_ranges + + network_conf_inst = Network_conf(network_conf['ext_network_name'], + network_conf['ext_cidr'], + network_conf['ext_gateway'], + network_conf['ext_ip_ranges']) + assert _config_external_subnet(ext_id, network_conf_inst) == expected + + @pytest.mark.parametrize('security_group_id, expected', [ ('0x1111', { @@ -129,3 +173,122 @@ def test__config_kolla_admin_openrc(globals_file_name, openrc_conf_file_dir, tmp for val in diff['iterable_item_added'].values(): assert 'export SDN_CONTROLLER_IP' in val tmpdir.remove() + + +@pytest.fixture(scope="module") +def net_conf_file_dir(data_root): + return os.path.join(data_root, 'lab_conf') + + +@mock.patch.object(execute.neutron.Neutron, 'create_network') +@mock.patch.object(execute.neutron.Neutron, 'create_subnet') +def test__create_external_network_with_openrc(mock_create_subnet, mock_create_network, + net_conf_file_dir, openrc_conf_file_dir): + external_network_info = { + 'network': { + 'name': 'admin_external', + 'admin_state_up': True, + 'shared': False, + 'provider:network_type': 'flat', + 'provider:physical_network': 'physnet1', + 'router:external': True + } + } + external_subnet_info = { + 'subnets': [ + { + 'name': 'admin_external_subnet', + 'cidr': '172.70.0.0/24', + 'ip_version': 4, + 'network_id': 0x1234, + 'gateway_ip': '172.70.0.1', + 'allocation_pools': [{'start': '172.70.0.2', 'end': '172.70.0.100'}], + 'enable_dhcp': False + } + ] + } + network_file = os.path.join(net_conf_file_dir, 'network_baremetal.yml') + openrc_file = os.path.join(openrc_conf_file_dir, 'admin-openrc.sh') + mock_create_network.return_value = 0x1234 + mock_create_subnet.return_value = 0xabcd + _create_external_network(network_file, openrc_file) + mock_create_network.assert_called_once_with('admin_external', external_network_info) + mock_create_subnet.assert_called_once_with(external_subnet_info) + + +@mock.patch.object(execute.neutron.Neutron, 'create_network') +@mock.patch.object(execute.neutron.Neutron, 'create_subnet') +@mock.patch('deploy.post.execute.neutron.Neutron') +def test__create_external_network_without_openrc(mock_Neutron, mock_create_subnet, mock_create_network, + net_conf_file_dir): + network_file = os.path.join(net_conf_file_dir, 'network_baremetal.yml') + mock_create_network.return_value = 0x1234 + mock_create_subnet.return_value = 0xabcd + _create_external_network(network_file) + mock_create_network.assert_not_called() + mock_create_subnet.assert_not_called() + + +@pytest.mark.parametrize('flavor,', [ + (None), + ({'name': 'm1.micro', 'ram': 64})]) +@mock.patch.object(execute.nova.Nova, 'get_flavor_by_name') +@mock.patch.object(execute.nova.Nova, 'create_flavor') +def test__create_flavor_m1_micro(mock_create_flavor, mock_get_flavor_by_name, + openrc_conf_file_dir, flavor): + openrc_file = os.path.join(openrc_conf_file_dir, 'admin-openrc.sh') + mock_create_flavor.return_value = True + mock_get_flavor_by_name.return_value = flavor + _create_flavor_m1_micro(openrc_file) + mock_get_flavor_by_name.assert_called_once_with('m1.micro') + if flavor is None: + mock_create_flavor.assert_called_once_with('m1.micro', ram=64, vcpus=1, disk=0) + else: + mock_create_flavor.assert_not_called() + + +@mock.patch('deploy.post.execute.os.system') +def test__prepare_cirros(mock_system): + mock_system.return_value = 0 + _prepare_cirros() + assert mock_system.call_count == 3 + + +@pytest.mark.parametrize('image_path, image_info', [ + (None, None), + ('/var/lib/daisy/images/cirros-0.3.5-x86_64-disk.img', None), + (None, {'name': 'TestVM'}), + ('/var/lib/daisy/images/cirros-0.3.5-x86_64-disk.img', {'name': 'TestVM'})]) +@mock.patch('deploy.post.execute._prepare_cirros') +@mock.patch('deploy.post.execute.err_exit') +@mock.patch.object(execute.glance.Glance, 'create') +@mock.patch.object(execute.glance.Glance, 'get_by_name') +def test__create_image_TestVM(mock_get_by_name, mock_create, + mock_err_exit, mock___prepare_cirros, + image_path, image_info, + openrc_conf_file_dir): + openrc_file = os.path.join(openrc_conf_file_dir, 'admin-openrc.sh') + mock_get_by_name.return_value = image_info + mock_create.return_value = 0x1234 + mock___prepare_cirros.return_value = image_path + _create_image_TestVM(openrc_file) + mock_get_by_name.assert_called_once_with('TestVM') + if image_info: + mock___prepare_cirros.assert_not_called() + else: + mock___prepare_cirros.assert_called_once_with() + if image_path: + mock_create.assert_called_once_with('TestVM', image_path) + else: + mock_err_exit.assert_called_once_with("Test image preparation failed") + + +@mock.patch.object(execute.neutron.Neutron, 'create_security_group_rule') +@mock.patch.object(execute.neutron.Neutron, 'get_security_group_by_name') +def test__create_security_group_rules(mock_get_security_group_by_name, mock_create_security_group_rule, + openrc_conf_file_dir): + openrc_file = os.path.join(openrc_conf_file_dir, 'admin-openrc.sh') + mock_get_security_group_by_name.return_value = {'id': 0xaaaa} + _create_security_group_rules(openrc_file) + mock_get_security_group_by_name.assert_called_once_with('default') + assert mock_create_security_group_rule.call_count == 2 |