diff options
Diffstat (limited to 'functest')
-rw-r--r-- | functest/opnfv_tests/vnf/ims/clearwater_ims_base.py | 14 | ||||
-rw-r--r-- | functest/opnfv_tests/vnf/ims/cloudify_ims.py | 58 | ||||
-rw-r--r-- | functest/opnfv_tests/vnf/ims/cloudify_ims.yaml | 2 | ||||
-rw-r--r-- | functest/tests/unit/openstack/rally/test_rally.py | 553 |
4 files changed, 315 insertions, 312 deletions
diff --git a/functest/opnfv_tests/vnf/ims/clearwater_ims_base.py b/functest/opnfv_tests/vnf/ims/clearwater_ims_base.py index 25ddca21..5a5c12be 100644 --- a/functest/opnfv_tests/vnf/ims/clearwater_ims_base.py +++ b/functest/opnfv_tests/vnf/ims/clearwater_ims_base.py @@ -43,7 +43,7 @@ class ClearwaterOnBoardingBase(vnf.VnfOnBoarding): def config_ellis(self, ellis_ip, signup_code='secret', two_numbers=False): output_dict = {} - self.logger.info('Configure Ellis: %s', ellis_ip) + self.logger.debug('Configure Ellis: %s', ellis_ip) output_dict['ellis_ip'] = ellis_ip account_url = 'http://{0}/accounts'.format(ellis_ip) params = {"password": "functest", @@ -54,7 +54,7 @@ class ClearwaterOnBoardingBase(vnf.VnfOnBoarding): output_dict['login'] = params if rq.status_code != 201 and rq.status_code != 409: raise Exception("Unable to create an account for number provision") - self.logger.info('Account is created on Ellis: %s', params) + self.logger.debug('Account is created on Ellis: %s', params) session_url = 'http://{0}/session'.format(ellis_ip) session_data = { @@ -66,13 +66,13 @@ class ClearwaterOnBoardingBase(vnf.VnfOnBoarding): if rq.status_code != 201: raise Exception('Failed to get cookie for Ellis') cookies = rq.cookies - self.logger.info('Cookies: %s', cookies) + self.logger.debug('Cookies: %s', cookies) number_url = 'http://{0}/accounts/{1}/numbers'.format( ellis_ip, params['email']) - self.logger.info('Create 1st calling number on Ellis') - i = 24 + self.logger.debug('Create 1st calling number on Ellis') + i = 30 while rq.status_code != 200 and i > 0: try: number_res = self.create_ellis_number(number_url, cookies) @@ -86,7 +86,7 @@ class ClearwaterOnBoardingBase(vnf.VnfOnBoarding): output_dict['number'] = number_res if two_numbers: - self.logger.info('Create 2nd calling number on Ellis') + self.logger.debug('Create 2nd calling number on Ellis') number_res = self.create_ellis_number(number_url, cookies) output_dict['number2'] = number_res @@ -131,7 +131,7 @@ class ClearwaterOnBoardingBase(vnf.VnfOnBoarding): script = '{0}{1}'.format(script, subscript) script = ('{0}{1}'.format(script, ' --trace')) cmd = "/bin/bash -c '{0}'".format(script) - self.logger.info('Live test cmd: %s', cmd) + self.logger.debug('Live test cmd: %s', cmd) output_file = os.path.join(self.result_dir, "ims_test_output.txt") ft_utils.execute_command(cmd, error_msg='Clearwater live test failed', diff --git a/functest/opnfv_tests/vnf/ims/cloudify_ims.py b/functest/opnfv_tests/vnf/ims/cloudify_ims.py index fafc77e1..8f6fcec8 100644 --- a/functest/opnfv_tests/vnf/ims/cloudify_ims.py +++ b/functest/opnfv_tests/vnf/ims/cloudify_ims.py @@ -1,6 +1,6 @@ #!/usr/bin/env python -# Copyright (c) 2016 Orange and others. +# Copyright (c) 2017 Orange and others. # # All rights reserved. This program and the accompanying materials # are made available under the terms of the Apache License, Version 2.0 @@ -25,16 +25,16 @@ from functest.utils.constants import CONST import functest.utils.openstack_utils as os_utils from snaps.openstack.os_credentials import OSCreds -from snaps.openstack.create_network import NetworkSettings, SubnetSettings, \ - OpenStackNetwork -from snaps.openstack.create_security_group import SecurityGroupSettings, \ - SecurityGroupRuleSettings,\ - Direction, Protocol, \ - OpenStackSecurityGroup +from snaps.openstack.create_network import (NetworkSettings, SubnetSettings, + OpenStackNetwork) +from snaps.openstack.create_security_group import (SecurityGroupSettings, + SecurityGroupRuleSettings, + Direction, Protocol, + OpenStackSecurityGroup) from snaps.openstack.create_router import RouterSettings, OpenStackRouter -from snaps.openstack.create_instance import VmInstanceSettings, \ - FloatingIpSettings, \ - OpenStackVmInstance +from snaps.openstack.create_instance import (VmInstanceSettings, + FloatingIpSettings, + OpenStackVmInstance) from snaps.openstack.create_flavor import FlavorSettings, OpenStackFlavor from snaps.openstack.create_image import ImageSettings, OpenStackImage from snaps.openstack.create_keypairs import KeypairSettings, OpenStackKeypair @@ -239,6 +239,8 @@ class CloudifyIms(clearwater_ims_base.ClearwaterOnBoardingBase): while str(cfy_status) != 'running' and retry: try: cfy_status = cfy_client.manager.get_status()['status'] + self.__logger.debug("The current manager status is %s", + cfy_status) except Exception: # pylint: disable=broad-except self.__logger.warning("Cloudify Manager isn't " + "up and running. Retrying ...") @@ -263,14 +265,15 @@ class CloudifyIms(clearwater_ims_base.ClearwaterOnBoardingBase): self.__logger.info("Put private keypair in manager") if manager_creator.vm_ssh_active(block=True): ssh = manager_creator.ssh_client() - scp = SCPClient(ssh.get_transport()) + scp = SCPClient(ssh.get_transport(), socket_timeout=15.0) scp.put(kp_file, '~/') cmd = "sudo cp ~/cloudify_ims.pem /etc/cloudify/" - ssh.exec_command(cmd) + run_blocking_ssh_command(ssh, cmd) cmd = "sudo chmod 444 /etc/cloudify/cloudify_ims.pem" - ssh.exec_command(cmd) + run_blocking_ssh_command(ssh, cmd) cmd = "sudo yum install -y gcc python-devel" - ssh.exec_command(cmd) + run_blocking_ssh_command(ssh, cmd, "Unable to install packages \ + on manager") self.details['orchestrator'].update(status='PASS', duration=duration) @@ -292,15 +295,17 @@ class CloudifyIms(clearwater_ims_base.ClearwaterOnBoardingBase): descriptor.get('file_name')) self.__logger.info("Get or create flavor for all clearwater vm") - self.exist_obj['flavor2'], flavor_id = os_utils.get_or_create_flavor( - self.vnf['requirements']['flavor']['name'], - self.vnf['requirements']['flavor']['ram_min'], - '30', - '1', - public=True) + flavor_settings = FlavorSettings( + name=self.vnf['requirements']['flavor']['name'], + ram=self.vnf['requirements']['flavor']['ram_min'], + disk=25, + vcpus=1) + flavor_creator = OpenStackFlavor(self.snaps_creds, flavor_settings) + flavor_creator.create() + self.created_object.append(flavor_creator) self.vnf['inputs'].update(dict( - flavor_id=flavor_id, + flavor_id=self.vnf['requirements']['flavor']['name'], )) self.__logger.info("Create VNF Instance") @@ -371,7 +376,7 @@ class CloudifyIms(clearwater_ims_base.ClearwaterOnBoardingBase): try: cfy_client.executions.cancel(execution['id'], force=True) - except: + except: # pylint: disable=broad-except self.__logger.warn("Can't cancel the current exec") execution = cfy_client.executions.start( @@ -383,7 +388,7 @@ class CloudifyIms(clearwater_ims_base.ClearwaterOnBoardingBase): wait_for_execution(cfy_client, execution, self.__logger) cfy_client.deployments.delete(self.vnf['descriptor'].get('name')) cfy_client.blueprints.delete(self.vnf['descriptor'].get('name')) - except: + except: # pylint: disable=broad-except self.__logger.warn("Some issue during the undeployment ..") self.__logger.warn("Tenant clean continue ..") @@ -507,3 +512,10 @@ def sig_test_format(sig_test): total_sig_test_result['failures'] = nb_failures total_sig_test_result['skipped'] = nb_skipped return total_sig_test_result + + +def run_blocking_ssh_command(ssh, cmd, error_msg="Unable to run this command"): + """Command to run ssh command with the exit status.""" + stdin, stdout, stderr = ssh.exec_command(cmd) + if stdout.channel.recv_exit_status() != 0: + raise Exception(error_msg) diff --git a/functest/opnfv_tests/vnf/ims/cloudify_ims.yaml b/functest/opnfv_tests/vnf/ims/cloudify_ims.yaml index f1028ce7..743c6ddd 100644 --- a/functest/opnfv_tests/vnf/ims/cloudify_ims.yaml +++ b/functest/opnfv_tests/vnf/ims/cloudify_ims.yaml @@ -19,7 +19,7 @@ vnf: version: '122' requirements: flavor: - name: m1.medium + name: m1.small ram_min: 2048 inputs: image_id: 'ubuntu_14.04' diff --git a/functest/tests/unit/openstack/rally/test_rally.py b/functest/tests/unit/openstack/rally/test_rally.py index 32cc1513..05311c3f 100644 --- a/functest/tests/unit/openstack/rally/test_rally.py +++ b/functest/tests/unit/openstack/rally/test_rally.py @@ -18,75 +18,73 @@ from functest.utils.constants import CONST class OSRallyTesting(unittest.TestCase): - - def setUp(self): - self.nova_client = mock.Mock() - self.neutron_client = mock.Mock() - self.cinder_client = mock.Mock() - with mock.patch('functest.opnfv_tests.openstack.rally.rally.' - 'os_utils.get_nova_client', - return_value=self.nova_client), \ - mock.patch('functest.opnfv_tests.openstack.rally.rally.' - 'os_utils.get_neutron_client', - return_value=self.neutron_client), \ - mock.patch('functest.opnfv_tests.openstack.rally.rally.' - 'os_utils.get_cinder_client', - return_value=self.cinder_client): - self.rally_base = rally.RallyBase() - self.rally_base.network_dict['net_id'] = 'test_net_id' - self.polling_iter = 2 - - def test_build_task_args_missing_floating_network(self): + @mock.patch('functest.opnfv_tests.openstack.rally.rally.os_utils.' + 'get_nova_client', return_value=mock.Mock()) + @mock.patch('functest.opnfv_tests.openstack.rally.rally.os_utils.' + 'get_neutron_client', return_value=mock.Mock()) + @mock.patch('functest.opnfv_tests.openstack.rally.rally.os_utils.' + 'get_cinder_client', return_value=mock.Mock()) + def setUp(self, mock_func1, mock_func2, mock_func3): + self.rally_base = rally.RallyBase() + self.rally_base.network_dict['net_id'] = 'test_net_id' + self.polling_iter = 2 + mock_func1.assert_called() + mock_func2.assert_called() + mock_func3.assert_called() + + @mock.patch('functest.opnfv_tests.openstack.rally.rally.os_utils.' + 'get_external_net', return_value=None) + def test_build_task_args_missing_floating_network(self, mock_func): CONST.__setattr__('OS_AUTH_URL', None) - with mock.patch('functest.opnfv_tests.openstack.rally.rally.' - 'os_utils.get_external_net', - return_value=None): - task_args = self.rally_base._build_task_args('test_file_name') - self.assertEqual(task_args['floating_network'], '') + task_args = self.rally_base._build_task_args('test_file_name') + self.assertEqual(task_args['floating_network'], '') + mock_func.assert_called() - def test_build_task_args_missing_net_id(self): + @mock.patch('functest.opnfv_tests.openstack.rally.rally.os_utils.' + 'get_external_net', return_value='test_floating_network') + def test_build_task_args_missing_net_id(self, mock_func): CONST.__setattr__('OS_AUTH_URL', None) self.rally_base.network_dict['net_id'] = '' - with mock.patch('functest.opnfv_tests.openstack.rally.rally.' - 'os_utils.get_external_net', - return_value='test_floating_network'): - task_args = self.rally_base._build_task_args('test_file_name') - self.assertEqual(task_args['netid'], '') + task_args = self.rally_base._build_task_args('test_file_name') + self.assertEqual(task_args['netid'], '') + mock_func.assert_called() - def check_scenario_file(self, value): + @staticmethod + def check_scenario_file(value): yaml_file = 'opnfv-{}.yaml'.format('test_file_name') if yaml_file in value: return False return True - def test_prepare_test_list_missing_scenario_file(self): - with mock.patch('functest.opnfv_tests.openstack.rally.rally.' - 'os.path.exists', - side_effect=self.check_scenario_file), \ - self.assertRaises(Exception): + @mock.patch('functest.opnfv_tests.openstack.rally.rally.os.path.exists') + def test_prepare_test_list_missing_scenario_file(self, mock_func): + mock_func.side_effect = self.check_scenario_file + with self.assertRaises(Exception): self.rally_base._prepare_test_list('test_file_name') + mock_func.assert_called() - def check_temp_dir(self, value): + @staticmethod + def check_temp_dir(value): yaml_file = 'opnfv-{}.yaml'.format('test_file_name') if yaml_file in value: return True return False - def test_prepare_test_list_missing_temp_dir(self): - with mock.patch('functest.opnfv_tests.openstack.rally.rally.' - 'os.path.exists', - side_effect=self.check_temp_dir), \ - mock.patch('functest.opnfv_tests.openstack.rally.rally.' - 'os.makedirs') as mock_os_makedir, \ - mock.patch.object(self.rally_base, 'apply_blacklist', - return_value=mock.Mock()) as mock_method: - yaml_file = 'opnfv-{}.yaml'.format('test_file_name') - ret_val = os.path.join(self.rally_base.TEMP_DIR, yaml_file) - self.assertEqual(self.rally_base. - _prepare_test_list('test_file_name'), - ret_val) - self.assertTrue(mock_method.called) - self.assertTrue(mock_os_makedir.called) + @mock.patch('functest.opnfv_tests.openstack.rally.rally.os.path.exists') + @mock.patch('functest.opnfv_tests.openstack.rally.rally.os.makedirs') + @mock.patch('functest.opnfv_tests.openstack.rally.rally.RallyBase.' + 'apply_blacklist', return_value=mock.Mock()) + def test_prepare_test_list_missing_temp_dir( + self, mock_method, mock_os_makedirs, mock_path_exists): + mock_path_exists.side_effect = self.check_temp_dir + + yaml_file = 'opnfv-{}.yaml'.format('test_file_name') + ret_val = os.path.join(self.rally_base.TEMP_DIR, yaml_file) + self.assertEqual(self.rally_base._prepare_test_list('test_file_name'), + ret_val) + mock_path_exists.assert_called() + mock_method.assert_called() + mock_os_makedirs.assert_called() def test_get_task_id_default(self): cmd_raw = 'Task 1: started' @@ -125,170 +123,163 @@ class OSRallyTesting(unittest.TestCase): self.assertEqual(self.rally_base.get_cmd_output(proc), 'lineline') - def test_excl_scenario_default(self): + @mock.patch('__builtin__.open', mock.mock_open()) + @mock.patch('functest.opnfv_tests.openstack.rally.rally.yaml.safe_load', + return_value={'scenario': [ + {'scenarios': ['test_scenario'], + 'installers': ['test_installer'], + 'tests': ['test']}, + {'scenarios': ['other_scenario'], + 'installers': ['test_installer'], + 'tests': ['other_test']}]}) + def test_excl_scenario_default(self, mock_func): CONST.__setattr__('INSTALLER_TYPE', 'test_installer') CONST.__setattr__('DEPLOY_SCENARIO', 'test_scenario') - dic = {'scenario': [{'scenarios': ['test_scenario'], - 'installers': ['test_installer'], - 'tests': ['test']}, - {'scenarios': ['other_scenario'], - 'installers': ['test_installer'], - 'tests': ['other_test']}]} - with mock.patch('__builtin__.open', mock.mock_open()), \ - mock.patch('functest.opnfv_tests.openstack.rally.rally.' - 'yaml.safe_load', - return_value=dic): - self.assertEqual(self.rally_base.excl_scenario(), - ['test']) - - def test_excl_scenario_regex(self): + self.assertEqual(self.rally_base.excl_scenario(), ['test']) + mock_func.assert_called() + + @mock.patch('__builtin__.open', mock.mock_open()) + @mock.patch('functest.opnfv_tests.openstack.rally.rally.yaml.safe_load', + return_value={'scenario': [ + {'scenarios': ['^os-[^-]+-featT-modeT$'], + 'installers': ['test_installer'], + 'tests': ['test1']}, + {'scenarios': ['^os-ctrlT-[^-]+-modeT$'], + 'installers': ['test_installer'], + 'tests': ['test2']}, + {'scenarios': ['^os-ctrlT-featT-[^-]+$'], + 'installers': ['test_installer'], + 'tests': ['test3']}, + {'scenarios': ['^os-'], + 'installers': ['test_installer'], + 'tests': ['test4']}, + {'scenarios': ['other_scenario'], + 'installers': ['test_installer'], + 'tests': ['test0a']}, + {'scenarios': [''], # empty scenario + 'installers': ['test_installer'], + 'tests': ['test0b']}]}) + def test_excl_scenario_regex(self, mock_func): CONST.__setattr__('INSTALLER_TYPE', 'test_installer') CONST.__setattr__('DEPLOY_SCENARIO', 'os-ctrlT-featT-modeT') - dic = {'scenario': [{'scenarios': ['^os-[^-]+-featT-modeT$'], - 'installers': ['test_installer'], - 'tests': ['test1']}, - {'scenarios': ['^os-ctrlT-[^-]+-modeT$'], - 'installers': ['test_installer'], - 'tests': ['test2']}, - {'scenarios': ['^os-ctrlT-featT-[^-]+$'], - 'installers': ['test_installer'], - 'tests': ['test3']}, - {'scenarios': ['^os-'], - 'installers': ['test_installer'], - 'tests': ['test4']}, - {'scenarios': ['other_scenario'], - 'installers': ['test_installer'], - 'tests': ['test0a']}, - {'scenarios': [''], # empty scenario - 'installers': ['test_installer'], - 'tests': ['test0b']}]} - with mock.patch('__builtin__.open', mock.mock_open()), \ - mock.patch('functest.opnfv_tests.openstack.rally.rally.' - 'yaml.safe_load', - return_value=dic): - self.assertEqual(self.rally_base.excl_scenario(), - ['test1', 'test2', 'test3', 'test4']) - - def test_excl_scenario_exception(self): - with mock.patch('__builtin__.open', side_effect=Exception): - self.assertEqual(self.rally_base.excl_scenario(), - []) - - def test_excl_func_default(self): + self.assertEqual(self.rally_base.excl_scenario(), + ['test1', 'test2', 'test3', 'test4']) + mock_func.assert_called() + + @mock.patch('__builtin__.open', side_effect=Exception) + def test_excl_scenario_exception(self, mock_open): + self.assertEqual(self.rally_base.excl_scenario(), []) + mock_open.assert_called() + + @mock.patch('__builtin__.open', mock.mock_open()) + @mock.patch('functest.opnfv_tests.openstack.rally.rally.yaml.safe_load', + return_value={'functionality': [ + {'functions': ['no_live_migration'], 'tests': ['test']}]}) + @mock.patch('functest.opnfv_tests.openstack.rally.rally.RallyBase.' + 'live_migration_supported', return_value=False) + def test_excl_func_default(self, mock_func, mock_yaml_load): CONST.__setattr__('INSTALLER_TYPE', 'test_installer') CONST.__setattr__('DEPLOY_SCENARIO', 'test_scenario') - dic = {'functionality': [{'functions': ['no_live_migration'], - 'tests': ['test']}]} - with mock.patch('__builtin__.open', mock.mock_open()), \ - mock.patch('functest.opnfv_tests.openstack.rally.rally.' - 'yaml.safe_load', - return_value=dic), \ - mock.patch.object(self.rally_base, 'live_migration_supported', - return_value=False): - self.assertEqual(self.rally_base.excl_func(), - ['test']) - - def test_excl_func_exception(self): - with mock.patch('__builtin__.open', side_effect=Exception): - self.assertEqual(self.rally_base.excl_func(), - []) - - def test_file_is_empty_default(self): - mock_obj = mock.Mock() + self.assertEqual(self.rally_base.excl_func(), ['test']) + mock_func.assert_called() + mock_yaml_load.assert_called() + + @mock.patch('__builtin__.open', side_effect=Exception) + def test_excl_func_exception(self, mock_open): + self.assertEqual(self.rally_base.excl_func(), []) + mock_open.assert_called() + + @mock.patch('functest.opnfv_tests.openstack.rally.rally.os.stat', + return_value=mock.Mock()) + def test_file_is_empty_default(self, mock_os_stat): attrs = {'st_size': 10} - mock_obj.configure_mock(**attrs) - with mock.patch('functest.opnfv_tests.openstack.rally.rally.' - 'os.stat', - return_value=mock_obj): - self.assertEqual(self.rally_base.file_is_empty('test_file_name'), - False) - - def test_file_is_empty_exception(self): - with mock.patch('functest.opnfv_tests.openstack.rally.rally.' - 'os.stat', - side_effect=Exception): - self.assertEqual(self.rally_base.file_is_empty('test_file_name'), - True) - - def test_run_task_missing_task_file(self): - with mock.patch('functest.opnfv_tests.openstack.rally.rally.' - 'os.path.exists', - return_value=False), \ - self.assertRaises(Exception): - self.rally_base._run_task('test_name') + mock_os_stat.return_value.configure_mock(**attrs) + self.assertEqual(self.rally_base.file_is_empty('test_file_name'), + False) + mock_os_stat.assert_called() - @mock.patch('functest.opnfv_tests.openstack.rally.rally.LOGGER.info') - def test_run_task_no_tests_for_scenario(self, mock_logger_info): - with mock.patch('functest.opnfv_tests.openstack.rally.rally.' - 'os.path.exists', - return_value=True), \ - mock.patch.object(self.rally_base, '_prepare_test_list', - return_value='test_file_name'), \ - mock.patch.object(self.rally_base, 'file_is_empty', - return_value=True): - self.rally_base._run_task('test_name') - mock_logger_info.assert_any_call('No tests for scenario \"%s\"', - 'test_name') + @mock.patch('functest.opnfv_tests.openstack.rally.rally.os.stat', + side_effect=Exception) + def test_file_is_empty_exception(self, mock_os_stat): + self.assertEqual(self.rally_base.file_is_empty('test_file_name'), True) + mock_os_stat.assert_called() - @mock.patch('functest.opnfv_tests.openstack.rally.rally.LOGGER.error') - def test_run_task_taskid_missing(self, mock_logger_error): - with mock.patch('functest.opnfv_tests.openstack.rally.rally.' - 'os.path.exists', - return_value=True), \ - mock.patch.object(self.rally_base, '_prepare_test_list', - return_value='test_file_name'), \ - mock.patch.object(self.rally_base, 'file_is_empty', - return_value=False), \ - mock.patch.object(self.rally_base, '_build_task_args', - return_value={}), \ - mock.patch('functest.opnfv_tests.openstack.rally.rally.' - 'subprocess.Popen'), \ - mock.patch.object(self.rally_base, '_get_output', - return_value=mock.Mock()), \ - mock.patch.object(self.rally_base, 'get_task_id', - return_value=None), \ - mock.patch.object(self.rally_base, 'get_cmd_output', - return_value=''): + @mock.patch('functest.opnfv_tests.openstack.rally.rally.os.path.exists', + return_value=False) + def test_run_task_missing_task_file(self, mock_path_exists): + with self.assertRaises(Exception): self.rally_base._run_task('test_name') - str = 'Failed to retrieve task_id, validating task...' - mock_logger_error.assert_any_call(str) - + mock_path_exists.assert_called() + + @mock.patch('functest.opnfv_tests.openstack.rally.rally.os.path.exists', + return_value=True) + @mock.patch('functest.opnfv_tests.openstack.rally.rally.RallyBase.' + '_prepare_test_list', return_value='test_file_name') + @mock.patch('functest.opnfv_tests.openstack.rally.rally.RallyBase.' + 'file_is_empty', return_value=True) @mock.patch('functest.opnfv_tests.openstack.rally.rally.LOGGER.info') + def test_run_task_no_tests_for_scenario(self, mock_logger_info, + mock_file_empty, mock_prep_list, + mock_path_exists): + self.rally_base._run_task('test_name') + mock_logger_info.assert_any_call('No tests for scenario \"%s\"', + 'test_name') + mock_file_empty.assert_called() + mock_prep_list.assert_called() + mock_path_exists.assert_called() + + @mock.patch('functest.opnfv_tests.openstack.rally.rally.RallyBase.' + '_prepare_test_list', return_value='test_file_name') + @mock.patch('functest.opnfv_tests.openstack.rally.rally.RallyBase.' + 'file_is_empty', return_value=False) + @mock.patch('functest.opnfv_tests.openstack.rally.rally.RallyBase.' + '_build_task_args', return_value={}) + @mock.patch('functest.opnfv_tests.openstack.rally.rally.RallyBase.' + '_get_output', return_value=mock.Mock()) + @mock.patch('functest.opnfv_tests.openstack.rally.rally.RallyBase.' + 'get_task_id', return_value=None) + @mock.patch('functest.opnfv_tests.openstack.rally.rally.RallyBase.' + 'get_cmd_output', return_value='') + @mock.patch('functest.opnfv_tests.openstack.rally.rally.os.path.exists', + return_value=True) + @mock.patch('functest.opnfv_tests.openstack.rally.rally.subprocess.Popen') @mock.patch('functest.opnfv_tests.openstack.rally.rally.LOGGER.error') - def test_run_task_default(self, mock_logger_error, - mock_logger_info): - popen = mock.Mock() + def test_run_task_taskid_missing(self, mock_logger_error, *args): + self.rally_base._run_task('test_name') + text = 'Failed to retrieve task_id, validating task...' + mock_logger_error.assert_any_call(text) + + @mock.patch('__builtin__.open', mock.mock_open()) + @mock.patch('functest.opnfv_tests.openstack.rally.rally.RallyBase.' + '_prepare_test_list', return_value='test_file_name') + @mock.patch('functest.opnfv_tests.openstack.rally.rally.RallyBase.' + 'file_is_empty', return_value=False) + @mock.patch('functest.opnfv_tests.openstack.rally.rally.RallyBase.' + '_build_task_args', return_value={}) + @mock.patch('functest.opnfv_tests.openstack.rally.rally.RallyBase.' + '_get_output', return_value=mock.Mock()) + @mock.patch('functest.opnfv_tests.openstack.rally.rally.RallyBase.' + 'get_task_id', return_value='1') + @mock.patch('functest.opnfv_tests.openstack.rally.rally.RallyBase.' + 'get_cmd_output', return_value='') + @mock.patch('functest.opnfv_tests.openstack.rally.rally.RallyBase.' + 'task_succeed', return_value=True) + @mock.patch('functest.opnfv_tests.openstack.rally.rally.os.path.exists', + return_value=True) + @mock.patch('functest.opnfv_tests.openstack.rally.rally.subprocess.Popen') + @mock.patch('functest.opnfv_tests.openstack.rally.rally.os.makedirs') + @mock.patch('functest.opnfv_tests.openstack.rally.rally.os.popen', + return_value=mock.Mock()) + @mock.patch('functest.opnfv_tests.openstack.rally.rally.LOGGER.info') + @mock.patch('functest.opnfv_tests.openstack.rally.rally.LOGGER.error') + def test_run_task_default(self, mock_logger_error, mock_logger_info, + mock_popen, *args): attrs = {'read.return_value': 'json_result'} - popen.configure_mock(**attrs) - - with mock.patch('functest.opnfv_tests.openstack.rally.rally.' - 'os.path.exists', - return_value=True), \ - mock.patch.object(self.rally_base, '_prepare_test_list', - return_value='test_file_name'), \ - mock.patch.object(self.rally_base, 'file_is_empty', - return_value=False), \ - mock.patch.object(self.rally_base, '_build_task_args', - return_value={}), \ - mock.patch('functest.opnfv_tests.openstack.rally.rally.' - 'subprocess.Popen'), \ - mock.patch.object(self.rally_base, '_get_output', - return_value=mock.Mock()), \ - mock.patch.object(self.rally_base, 'get_task_id', - return_value='1'), \ - mock.patch.object(self.rally_base, 'get_cmd_output', - return_value=''), \ - mock.patch('functest.opnfv_tests.openstack.rally.rally.' - 'os.makedirs'), \ - mock.patch('functest.opnfv_tests.openstack.rally.rally.' - 'os.popen', - return_value=popen), \ - mock.patch('__builtin__.open', mock.mock_open()), \ - mock.patch.object(self.rally_base, 'task_succeed', - return_value=True): - self.rally_base._run_task('test_name') - str = 'Test scenario: "test_name" OK.\n' - mock_logger_info.assert_any_call(str) + mock_popen.return_value.configure_mock(**attrs) + self.rally_base._run_task('test_name') + text = 'Test scenario: "test_name" OK.\n' + mock_logger_info.assert_any_call(text) + mock_logger_error.assert_not_called() def test_prepare_env_testname_invalid(self): self.rally_base.TESTS = ['test1', 'test2'] @@ -296,103 +287,103 @@ class OSRallyTesting(unittest.TestCase): with self.assertRaises(Exception): self.rally_base._prepare_env() - def test_prepare_env_volume_creation_failed(self): + @mock.patch('functest.opnfv_tests.openstack.rally.rally.os_utils.' + 'list_volume_types', return_value=None) + @mock.patch('functest.opnfv_tests.openstack.rally.rally.os_utils.' + 'create_volume_type', return_value=None) + def test_prepare_env_volume_creation_failed(self, mock_list, mock_create): self.rally_base.TESTS = ['test1', 'test2'] self.rally_base.test_name = 'test1' - volume_type = None - with mock.patch('functest.opnfv_tests.openstack.rally.rally.' - 'os_utils.list_volume_types', - return_value=None), \ - mock.patch('functest.opnfv_tests.openstack.rally.rally.' - 'os_utils.create_volume_type', - return_value=volume_type), \ - self.assertRaises(Exception): + with self.assertRaises(Exception): self.rally_base._prepare_env() - - def test_prepare_env_image_missing(self): + mock_list.assert_called() + mock_create.assert_called() + + @mock.patch('functest.opnfv_tests.openstack.rally.rally.os_utils.' + 'list_volume_types', return_value=None) + @mock.patch('functest.opnfv_tests.openstack.rally.rally.os_utils.' + 'create_volume_type', return_value=mock.Mock()) + @mock.patch('functest.opnfv_tests.openstack.rally.rally.os_utils.' + 'get_or_create_image', return_value=(True, None)) + def test_prepare_env_image_missing(self, mock_get_img, mock_create_vt, + mock_list_vt): self.rally_base.TESTS = ['test1', 'test2'] self.rally_base.test_name = 'test1' - volume_type = mock.Mock() - image_id = None - with mock.patch('functest.opnfv_tests.openstack.rally.rally.' - 'os_utils.list_volume_types', - return_value=None), \ - mock.patch('functest.opnfv_tests.openstack.rally.rally.' - 'os_utils.create_volume_type', - return_value=volume_type), \ - mock.patch('functest.opnfv_tests.openstack.rally.rally.' - 'os_utils.get_or_create_image', - return_value=(True, image_id)), \ - self.assertRaises(Exception): + with self.assertRaises(Exception): self.rally_base._prepare_env() - - def test_prepare_env_image_shared_network_creation_failed(self): + mock_get_img.assert_called() + mock_create_vt.assert_called() + mock_list_vt.assert_called() + + @mock.patch('functest.opnfv_tests.openstack.rally.rally.os_utils.' + 'list_volume_types', return_value=None) + @mock.patch('functest.opnfv_tests.openstack.rally.rally.os_utils.' + 'create_volume_type', return_value=mock.Mock()) + @mock.patch('functest.opnfv_tests.openstack.rally.rally.os_utils.' + 'get_or_create_image', return_value=(True, 'image_id')) + @mock.patch('functest.opnfv_tests.openstack.rally.rally.os_utils.' + 'create_shared_network_full', return_value=None) + def test_prepare_env_image_shared_network_creation_failed( + self, mock_create_net, mock_get_img, mock_create_vt, mock_list_vt): self.rally_base.TESTS = ['test1', 'test2'] self.rally_base.test_name = 'test1' - volume_type = mock.Mock() - image_id = 'image_id' - network_dict = None - with mock.patch('functest.opnfv_tests.openstack.rally.rally.' - 'os_utils.list_volume_types', - return_value=None), \ - mock.patch('functest.opnfv_tests.openstack.rally.rally.' - 'os_utils.create_volume_type', - return_value=volume_type), \ - mock.patch('functest.opnfv_tests.openstack.rally.rally.' - 'os_utils.get_or_create_image', - return_value=(True, image_id)), \ - mock.patch('functest.opnfv_tests.openstack.rally.rally.' - 'os_utils.create_shared_network_full', - return_value=network_dict), \ - self.assertRaises(Exception): + with self.assertRaises(Exception): self.rally_base._prepare_env() - - def test_run_tests_all(self): + mock_create_net.assert_called() + mock_get_img.assert_called() + mock_create_vt.assert_called() + mock_list_vt.assert_called() + + @mock.patch('functest.opnfv_tests.openstack.rally.rally.RallyBase.' + '_run_task', return_value=mock.Mock()) + def test_run_tests_all(self, mock_run_task): self.rally_base.TESTS = ['test1', 'test2'] self.rally_base.test_name = 'all' - with mock.patch.object(self.rally_base, '_run_task', - return_value=mock.Mock()): - self.rally_base._run_tests() - self.rally_base._run_task.assert_any_call('test1') - self.rally_base._run_task.assert_any_call('test2') + self.rally_base._run_tests() + mock_run_task.assert_any_call('test1') + mock_run_task.assert_any_call('test2') - def test_run_tests_default(self): + @mock.patch('functest.opnfv_tests.openstack.rally.rally.RallyBase.' + '_run_task', return_value=mock.Mock()) + def test_run_tests_default(self, mock_run_task): self.rally_base.TESTS = ['test1', 'test2'] self.rally_base.test_name = 'test1' - with mock.patch.object(self.rally_base, '_run_task', - return_value=mock.Mock()): - self.rally_base._run_tests() - self.rally_base._run_task.assert_any_call('test1') - - def test_clean_up_default(self): + self.rally_base._run_tests() + mock_run_task.assert_any_call('test1') + + @mock.patch('functest.opnfv_tests.openstack.rally.rally.os_utils.' + 'delete_volume_type') + @mock.patch('functest.opnfv_tests.openstack.rally.rally.os_utils.' + 'delete_glance_image') + def test_clean_up_default(self, mock_glance_method, mock_vol_method): self.rally_base.volume_type = mock.Mock() self.rally_base.cinder_client = mock.Mock() self.rally_base.image_exists = False self.rally_base.image_id = 1 self.rally_base.nova_client = mock.Mock() - with mock.patch('functest.opnfv_tests.openstack.rally.rally.' - 'os_utils.delete_volume_type') as mock_vol_method, \ - mock.patch('functest.opnfv_tests.openstack.rally.rally.' - 'os_utils.delete_glance_image') as mock_glance_method: - self.rally_base._clean_up() - mock_vol_method.assert_any_call(self.rally_base.cinder_client, - self.rally_base.volume_type) - mock_glance_method.assert_any_call(self.rally_base.nova_client, - 1) - - def test_run_default(self): - with mock.patch.object(self.rally_base, '_prepare_env'), \ - mock.patch.object(self.rally_base, '_run_tests'), \ - mock.patch.object(self.rally_base, '_generate_report'), \ - mock.patch.object(self.rally_base, '_clean_up'): - self.assertEqual(self.rally_base.run(), - testcase.TestCase.EX_OK) - - def test_run_exception(self): - with mock.patch.object(self.rally_base, '_prepare_env', - side_effect=Exception): - self.assertEqual(self.rally_base.run(), - testcase.TestCase.EX_RUN_ERROR) + self.rally_base._clean_up() + mock_vol_method.assert_any_call(self.rally_base.cinder_client, + self.rally_base.volume_type) + mock_glance_method.assert_any_call(self.rally_base.nova_client, + 1) + + @mock.patch('functest.opnfv_tests.openstack.rally.rally.RallyBase.' + '_prepare_env') + @mock.patch('functest.opnfv_tests.openstack.rally.rally.RallyBase.' + '_run_tests') + @mock.patch('functest.opnfv_tests.openstack.rally.rally.RallyBase.' + '_generate_report') + @mock.patch('functest.opnfv_tests.openstack.rally.rally.RallyBase.' + '_clean_up') + def test_run_default(self, *args): + self.assertEqual(self.rally_base.run(), testcase.TestCase.EX_OK) + map(lambda m: m.assert_called(), args) + + @mock.patch('functest.opnfv_tests.openstack.rally.rally.RallyBase.' + '_prepare_env', side_effect=Exception) + def test_run_exception(self, mock_prep_env): + self.assertEqual(self.rally_base.run(), testcase.TestCase.EX_RUN_ERROR) + mock_prep_env.assert_called() if __name__ == "__main__": |