X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=apex%2Ftests%2Ftest_apex_overcloud_deploy.py;h=41f2e01a2fde7e99662c9fae910d0dd4f9adcb5e;hb=refs%2Fchanges%2F69%2F60269%2F18;hp=b69c44d0d678de1d2f350a4a58ddd5ad57a1e6a0;hpb=d2913d4bcc0fcd25dc3d01f6604049dfd0a9217d;p=apex.git diff --git a/apex/tests/test_apex_overcloud_deploy.py b/apex/tests/test_apex_overcloud_deploy.py index b69c44d0..41f2e01a 100644 --- a/apex/tests/test_apex_overcloud_deploy.py +++ b/apex/tests/test_apex_overcloud_deploy.py @@ -29,7 +29,7 @@ from apex.overcloud.deploy import prep_sriov_env from apex.overcloud.deploy import external_network_cmds from apex.overcloud.deploy import create_congress_cmds from apex.overcloud.deploy import SDN_FILE_MAP -from apex.overcloud.deploy import get_docker_sdn_file +from apex.overcloud.deploy import get_docker_sdn_files from nose.tools import ( assert_regexp_matches, @@ -104,7 +104,8 @@ class TestOvercloudDeploy(unittest.TestCase): 'containers': False, 'barometer': True, 'ceph': False, - 'sriov': False + 'sriov': False, + 'vim': 'openstack' }, 'global_params': MagicMock()} @@ -132,10 +133,12 @@ class TestOvercloudDeploy(unittest.TestCase): 'tacker': False, 'containers': True, 'barometer': False, + 'vpn': False, 'ceph': True, 'sdn_controller': 'opendaylight', 'sriov': False, - 'os_version': 'queens' + 'os_version': 'queens', + 'vim': 'openstack' }, 'global_params': MagicMock()} @@ -158,7 +161,7 @@ class TestOvercloudDeploy(unittest.TestCase): assert_in('/usr/share/openstack-tripleo-heat-templates/environments/' 'storage-environment.yaml', result_cmd) assert_in('/usr/share/openstack-tripleo-heat-templates/environments' - '/services-docker/neutron-opendaylight.yaml', result_cmd) + '/services/neutron-opendaylight.yaml', result_cmd) ds['deploy_options']['os_version'] = 'master' result_cmd = create_deploy_cmd(ds, ns, inv, '/tmp', virt) assert_in('/usr/share/openstack-tripleo-heat-templates/environments' @@ -207,14 +210,17 @@ class TestOvercloudDeploy(unittest.TestCase): assert_raises(ApexDeployException, create_deploy_cmd, ds, ns, inv, '/tmp', virt) + @patch('apex.builders.overcloud_builder.inject_opendaylight') @patch('apex.overcloud.deploy.virt_utils') @patch('apex.overcloud.deploy.shutil') @patch('apex.overcloud.deploy.os.path') @patch('builtins.open', mock_open()) - def test_prep_image(self, mock_os_path, mock_shutil, mock_virt_utils): + def test_prep_image(self, mock_os_path, mock_shutil, mock_virt_utils, + mock_inject_odl): ds_opts = {'dataplane': 'fdio', 'sdn_controller': 'opendaylight', 'odl_version': 'master', + 'vpn': False, 'sriov': False} ds = {'deploy_options': MagicMock(), 'global_params': MagicMock()} @@ -223,6 +229,7 @@ class TestOvercloudDeploy(unittest.TestCase): ns = MagicMock() prep_image(ds, ns, 'undercloud.qcow2', '/tmp', root_pw='test') mock_virt_utils.virt_customize.assert_called() + mock_inject_odl.assert_called() @patch('apex.overcloud.deploy.virt_utils') @patch('apex.overcloud.deploy.shutil') @@ -231,6 +238,7 @@ class TestOvercloudDeploy(unittest.TestCase): def test_prep_image_sdn_false(self, mock_os_path, mock_shutil, mock_virt_utils): ds_opts = {'dataplane': 'fdio', + 'vpn': False, 'sdn_controller': False} ds = {'deploy_options': MagicMock(), 'global_params': MagicMock()} @@ -240,14 +248,16 @@ class TestOvercloudDeploy(unittest.TestCase): prep_image(ds, ns, 'undercloud.qcow2', '/tmp', root_pw='test') mock_virt_utils.virt_customize.assert_called() + @patch('apex.builders.overcloud_builder.inject_opendaylight') @patch('apex.overcloud.deploy.virt_utils') @patch('apex.overcloud.deploy.shutil') @patch('apex.overcloud.deploy.os.path') @patch('builtins.open', mock_open()) def test_prep_image_sdn_odl(self, mock_os_path, mock_shutil, - mock_virt_utils): + mock_virt_utils, mock_inject_odl): ds_opts = {'dataplane': 'ovs', 'sdn_controller': 'opendaylight', + 'vpn': False, 'odl_version': con.DEFAULT_ODL_VERSION, 'odl_vpp_netvirt': True} ds = {'deploy_options': MagicMock(), @@ -259,6 +269,7 @@ class TestOvercloudDeploy(unittest.TestCase): ns = MagicMock() prep_image(ds, ns, 'undercloud.qcow2', '/tmp', root_pw='test') mock_virt_utils.virt_customize.assert_called() + mock_inject_odl.assert_called() @patch('apex.overcloud.deploy.c_builder') @patch('apex.overcloud.deploy.oc_builder') @@ -283,18 +294,20 @@ class TestOvercloudDeploy(unittest.TestCase): mock_c_builder.add_upstream_patches.return_value = ['nova-api'] patches = ['dummy_nova_patch'] rv = prep_image(ds, ns, 'undercloud.qcow2', '/tmp', root_pw='test', - docker_tag='latest', patches=patches, upstream=True) - mock_oc_builder.inject_opendaylight.assert_called + docker_tag='latest', patches=patches) + mock_oc_builder.inject_opendaylight.assert_called() mock_virt_utils.virt_customize.assert_called() - mock_c_builder.add_upstream_patches.assert_called + mock_c_builder.add_upstream_patches.assert_called() self.assertListEqual(sorted(rv), ['nova-api', 'opendaylight']) + @patch('apex.overcloud.deploy.oc_builder') @patch('apex.overcloud.deploy.virt_utils') @patch('apex.overcloud.deploy.shutil') @patch('apex.overcloud.deploy.os.path') @patch('builtins.open', mock_open()) def test_prep_image_sdn_odl_not_def(self, mock_os_path, - mock_shutil, mock_virt_utils): + mock_shutil, mock_virt_utils, + mock_oc_builder): ds_opts = {'dataplane': 'ovs', 'sdn_controller': 'opendaylight', 'odl_version': 'uncommon'} @@ -305,6 +318,7 @@ class TestOvercloudDeploy(unittest.TestCase): ns = MagicMock() prep_image(ds, ns, 'undercloud.qcow2', '/tmp', root_pw='test') mock_virt_utils.virt_customize.assert_called() + mock_oc_builder.inject_opendaylight.assert_called() @patch('apex.overcloud.deploy.virt_utils') @patch('apex.overcloud.deploy.shutil') @@ -313,6 +327,7 @@ class TestOvercloudDeploy(unittest.TestCase): def test_prep_image_sdn_ovn(self, mock_os_path, mock_shutil, mock_virt_utils): ds_opts = {'dataplane': 'ovs', + 'vpn': False, 'sdn_controller': 'ovn'} ds = {'deploy_options': MagicMock(), 'global_params': MagicMock()} @@ -322,6 +337,32 @@ class TestOvercloudDeploy(unittest.TestCase): prep_image(ds, ns, 'undercloud.qcow2', '/tmp', root_pw='test') mock_virt_utils.virt_customize.assert_called() + @patch('apex.builders.overcloud_builder.inject_quagga') + @patch('apex.builders.overcloud_builder.inject_opendaylight') + @patch('apex.overcloud.deploy.virt_utils') + @patch('apex.overcloud.deploy.shutil') + @patch('apex.overcloud.deploy.os.path') + @patch('builtins.open', mock_open()) + def test_prep_image_sdn_odl_vpn(self, mock_os_path, mock_shutil, + mock_virt_utils, mock_inject_odl, + mock_inject_quagga): + ds_opts = {'dataplane': 'ovs', + 'sdn_controller': 'opendaylight', + 'vpn': True, + 'odl_version': con.DEFAULT_ODL_VERSION, + 'odl_vpp_netvirt': True} + ds = {'deploy_options': MagicMock(), + 'global_params': MagicMock()} + ds['deploy_options'].__getitem__.side_effect = \ + lambda i: ds_opts.get(i, MagicMock()) + ds['deploy_options'].__contains__.side_effect = \ + lambda i: True if i in ds_opts else MagicMock() + ns = MagicMock() + prep_image(ds, ns, 'undercloud.qcow2', '/tmp', root_pw='test') + mock_virt_utils.virt_customize.assert_called() + mock_inject_odl.assert_called() + mock_inject_quagga.assert_called() + @patch('apex.overcloud.deploy.os.path.isfile') def test_prep_image_no_image(self, mock_isfile): mock_isfile.return_value = False @@ -352,24 +393,27 @@ class TestOvercloudDeploy(unittest.TestCase): 'ovs': {'dpdk_cores': 'test'}, 'kernel': {'test': 'test'}}, 'Controller': {'vpp': 'test'}}}} - ns = {'domain_name': 'test.domain', - 'networks': - {'tenant': - {'nic_mapping': {'controller': - {'members': ['tenant_nic']}, - 'compute': - {'members': ['tenant_nic']}}}, - 'external': - [{'nic_mapping': {'controller': - {'members': ['ext_nic']}, - 'compute': - {'members': ['ext_nic']}}}]}} + ns_dict = {'domain_name': 'test.domain', + 'networks': + {'tenant': + {'nic_mapping': {'controller': + {'members': ['tenant_nic']}, + 'compute': + {'members': ['tenant_nic']}}}, + 'external': + [{'nic_mapping': {'controller': + {'members': ['ext_nic']}, + 'compute': + {'members': ['ext_nic']}}}]}} inv = None try: # Swap stdout saved_stdout = sys.stdout out = StringIO() sys.stdout = out + ns = MagicMock() + ns.enabled_network_list = ['external', 'tenant'] + ns.__getitem__.side_effect = lambda i: ns_dict.get(i, MagicMock()) # run test prep_env(ds, ns, inv, 'opnfv-env.yml', '/net-env.yml', '/tmp') output = out.getvalue().strip() @@ -392,24 +436,27 @@ class TestOvercloudDeploy(unittest.TestCase): 'sriov': 'xxx', 'performance': {'Compute': {}, 'Controller': {}}}} - ns = {'domain_name': 'test.domain', - 'networks': - {'tenant': - {'nic_mapping': {'controller': - {'members': ['tenant_nic']}, - 'compute': - {'members': ['tenant_nic']}}}, - 'external': - [{'nic_mapping': {'controller': - {'members': ['ext_nic']}, - 'compute': - {'members': ['ext_nic']}}}]}} + ns_dict = {'domain_name': 'test.domain', + 'networks': + {'tenant': + {'nic_mapping': {'controller': + {'members': ['tenant_nic']}, + 'compute': + {'members': ['tenant_nic']}}}, + 'external': + [{'nic_mapping': {'controller': + {'members': ['ext_nic']}, + 'compute': + {'members': ['ext_nic']}}}]}} inv = None try: # Swap stdout saved_stdout = sys.stdout out = StringIO() sys.stdout = out + ns = MagicMock() + ns.enabled_network_list = ['external', 'tenant'] + ns.__getitem__.side_effect = lambda i: ns_dict.get(i, MagicMock()) # run test prep_env(ds, ns, inv, 'opnfv-env.yml', '/net-env.yml', '/tmp') output = out.getvalue().strip() @@ -432,18 +479,18 @@ class TestOvercloudDeploy(unittest.TestCase): 'dataplane': 'fdio', 'sriov': 'xxx', 'dvr': True}} - ns = {'domain_name': 'test.domain', - 'networks': - {'tenant': - {'nic_mapping': {'controller': - {'members': ['tenant_nic']}, - 'compute': - {'members': ['tenant_nic']}}}, - 'external': - [{'nic_mapping': {'controller': - {'members': ['ext_nic']}, - 'compute': - {'members': ['ext_nic']}}}]}} + ns_dict = {'domain_name': 'test.domain', + 'networks': + {'tenant': + {'nic_mapping': {'controller': + {'members': ['tenant_nic']}, + 'compute': + {'members': ['tenant_nic']}}}, + 'external': + [{'nic_mapping': {'controller': + {'members': ['ext_nic']}, + 'compute': + {'members': ['ext_nic']}}}]}} inv = MagicMock() inv.get_node_counts.return_value = (3, 2) try: @@ -451,6 +498,9 @@ class TestOvercloudDeploy(unittest.TestCase): saved_stdout = sys.stdout out = StringIO() sys.stdout = out + ns = MagicMock() + ns.enabled_network_list = ['external', 'tenant'] + ns.__getitem__.side_effect = lambda i: ns_dict.get(i, MagicMock()) # run test prep_env(ds, ns, inv, 'opnfv-env.yml', '/net-env.yml', '/tmp') output = out.getvalue().strip() @@ -459,6 +509,107 @@ class TestOvercloudDeploy(unittest.TestCase): # put stdout back sys.stdout = saved_stdout + @patch('apex.overcloud.deploy.fileinput') + @patch('apex.overcloud.deploy.shutil') + def test_prep_env_tenant_vlan(self, mock_shutil, mock_fileinput): + mock_fileinput.input.return_value = \ + ['NeutronNetworkVLANRanges', + 'NeutronNetworkType', 'NeutronBridgeMappings'] + ds = {'deploy_options': + {'sdn_controller': False, + 'dataplane': 'ovs', + 'sriov': 'xxx', + 'dvr': True}} + ns_dict = {'domain_name': 'test.domain', + 'networks': + {'tenant': + {'nic_mapping': {'controller': + {'members': ['tenant_nic']}, + 'compute': + {'members': ['tenant_nic']}}, + 'segmentation_type': 'vlan', + 'overlay_id_range': 'vlan:500:600' + }, + 'external': + [{'nic_mapping': {'controller': + {'members': ['ext_nic']}, + 'compute': + {'members': ['ext_nic']}}}]}} + inv = MagicMock() + inv.get_node_counts.return_value = (3, 2) + try: + # Swap stdout + saved_stdout = sys.stdout + out = StringIO() + sys.stdout = out + ns = MagicMock() + ns.enabled_network_list = ['external', 'tenant'] + ns.__getitem__.side_effect = lambda i: ns_dict.get(i, MagicMock()) + # run test + prep_env(ds, ns, inv, 'opnfv-env.yml', '/net-env.yml', '/tmp') + output = out.getvalue().strip() + assert_in('NeutronNetworkVLANRanges: ' + 'vlan:500:600,datacentre:1:1000', output) + assert_in('NeutronNetworkType: vlan', output) + assert_in('NeutronBridgeMappings: ' + 'vlan:br-vlan,datacentre:br-ex', output) + assert_not_in('OpenDaylightProviderMappings', output) + finally: + # put stdout back + sys.stdout = saved_stdout + + @patch('apex.overcloud.deploy.fileinput') + @patch('apex.overcloud.deploy.shutil') + def test_prep_env_tenant_vlan_odl(self, mock_shutil, mock_fileinput): + mock_fileinput.input.return_value = \ + ['NeutronNetworkVLANRanges', + 'NeutronNetworkType', + 'NeutronBridgeMappings', + 'OpenDaylightProviderMappings'] + ds = {'deploy_options': + {'sdn_controller': 'opendaylight', + 'dataplane': 'ovs', + 'sriov': 'xxx', + 'dvr': True}} + ns_dict = {'domain_name': 'test.domain', + 'networks': + {'tenant': + {'nic_mapping': {'controller': + {'members': ['tenant_nic']}, + 'compute': + {'members': ['tenant_nic']}}, + 'segmentation_type': 'vlan', + 'overlay_id_range': 'vlan:500:600' + }, + 'external': + [{'nic_mapping': {'controller': + {'members': ['ext_nic']}, + 'compute': + {'members': ['ext_nic']}}}]}} + inv = MagicMock() + inv.get_node_counts.return_value = (3, 2) + try: + # Swap stdout + saved_stdout = sys.stdout + out = StringIO() + sys.stdout = out + ns = MagicMock() + ns.enabled_network_list = ['external', 'tenant'] + ns.__getitem__.side_effect = lambda i: ns_dict.get(i, MagicMock()) + # run test + prep_env(ds, ns, inv, 'opnfv-env.yml', '/net-env.yml', '/tmp') + output = out.getvalue().strip() + assert_in('NeutronNetworkVLANRanges: ' + 'vlan:500:600,datacentre:1:1000', output) + assert_in('NeutronNetworkType: vlan', output) + assert_in('NeutronBridgeMappings: ' + 'vlan:br-vlan,datacentre:br-ex', output) + assert_in('OpenDaylightProviderMappings: ' + 'vlan:br-vlan,datacentre:br-ex', output) + finally: + # put stdout back + sys.stdout = saved_stdout + def test_generate_ceph_key(self): assert_equal(len(generate_ceph_key()), 40) @@ -496,10 +647,7 @@ class TestOvercloudDeploy(unittest.TestCase): } prep_storage_env(ds, ns, virtual=True, tmp_dir='/tmp') ceph_params = { - 'DockerCephDaemonImage': - '192.0.2.1:8787/ceph/daemon:tag-build-master-luminous-centos' - '-7', - 'CephPoolDefaultSize': 1, + 'CephPoolDefaultSize': 2, 'CephAnsibleExtraConfig': { 'centos_package_dependencies': [], 'ceph_osd_docker_memory_limit': '1g', @@ -650,19 +798,20 @@ class TestOvercloudDeploy(unittest.TestCase): mock_parsers.return_value.__getitem__.side_effect = KeyError() assert_raises(KeyError, create_congress_cmds, 'overcloud_file') - def test_get_docker_sdn_file(self): + def test_get_docker_sdn_files(self): ds_opts = {'ha_enabled': True, 'congress': True, 'tacker': True, 'containers': False, 'barometer': True, 'ceph': False, + 'vpn': True, 'sdn_controller': 'opendaylight', 'os_version': 'queens' } - output = get_docker_sdn_file(ds_opts) - self.assertEqual(output, - ('/usr/share/openstack-tripleo-heat-templates' - '/environments/services-docker/neutron-opendaylight' - '.yaml') - ) + output = get_docker_sdn_files(ds_opts) + compare = ['/usr/share/openstack-tripleo-heat-templates/' + 'environments/services/neutron-opendaylight.yaml', + '/usr/share/openstack-tripleo-heat-templates/environments' + '/services/neutron-bgpvpn-opendaylight.yaml'] + self.assertEqual(output, compare)