def test_instantiate_vnf_infra_fails_to_wait_after_instantiate( self, mock_vnf_instance_save, mock_vnf_package_vnfd, mock_create): vnf_package_vnfd = fakes.return_vnf_package_vnfd() vnf_package_id = vnf_package_vnfd.package_uuid mock_vnf_package_vnfd.return_value = vnf_package_vnfd vim_connection_info = fakes.get_dummy_vim_connection_info() instantiate_vnf_req_dict = \ fakes.get_dummy_instantiate_vnf_request(**vim_connection_info) instantiate_vnf_req_obj = \ objects.InstantiateVnfRequest.obj_from_primitive( instantiate_vnf_req_dict, self.context) vnf_instance_obj = fakes.return_vnf_instance() fake_csar = os.path.join(self.temp_dir, vnf_package_id) cfg.CONF.set_override('vnf_package_csar_path', self.temp_dir, group='vnf_package') test_utils.copy_csar_files(fake_csar, "vnflcm4") self._mock_vnf_manager(fail_method_name='create_wait') driver = vnflcm_driver.VnfLcmDriver() error = self.assertRaises(exceptions.VnfInstantiationWaitFailed, driver.instantiate_vnf, self.context, vnf_instance_obj, instantiate_vnf_req_obj) expected_error = ("Vnf instantiation wait failed for vnf %s, error: " "create_wait failed") self.assertEqual(expected_error % vnf_instance_obj.id, str(error)) self.assertEqual("NOT_INSTANTIATED", vnf_instance_obj.instantiation_state) self.assertEqual(3, mock_vnf_instance_save.call_count) self.assertEqual(5, self._vnf_manager.invoke.call_count) shutil.rmtree(fake_csar)
def _get_csar_zip_from_dir(self, dir_name): csar_dir_path = os.path.join('test_csar_utils_data', dir_name) unique_name = str(uuid.uuid4()) csar_temp_dir = os.path.join('/tmp', unique_name) self.addCleanup(shutil.rmtree, csar_temp_dir) utils.copy_csar_files(csar_temp_dir, csar_dir_path) # Copy contents from 'test_csar_utils_common' to 'csar_temp_dir'. common_dir_path = ('./tacker/tests/etc/samples/etsi/nfv/' 'test_csar_utils_data/test_csar_utils_common') common_yaml_file = os.path.join(common_dir_path, 'Definitions/helloworld3_types.yaml') shutil.copy(common_yaml_file, os.path.join(csar_temp_dir, 'Definitions/')) shutil.copytree(os.path.join(common_dir_path, "TOSCA-Metadata/"), os.path.join(csar_temp_dir, "TOSCA-Metadata/")) # Create temporary zip file from 'csar_temp_dir' tempfd, tempname = tempfile.mkstemp(suffix=".zip", dir=csar_temp_dir) os.close(tempfd) zcsar = zipfile.ZipFile(tempname, 'w') for (dpath, _, fnames) in os.walk(csar_temp_dir): for fname in fnames: src_file = os.path.join(dpath, fname) dst_file = os.path.relpath(os.path.join(dpath, fname), csar_temp_dir) zcsar.write(src_file, dst_file) zcsar.close() return tempname
def get_expected_vnfd_data(zip_file=None): if zip_file: csar_temp_dir = tempfile.mkdtemp() with zipfile.ZipFile(zip_file, 'r') as zf: zf.extractall(csar_temp_dir) else: unique_name = str(uuid.uuid4()) csar_temp_dir = os.path.join('/tmp', unique_name) utils.copy_csar_files(csar_temp_dir, 'sample_vnfpkg_tosca_vnfd', read_vnfd_only=True) file_names = [ 'TOSCA-Metadata/TOSCA.meta', 'Definitions/etsi_nfv_sol001_vnfd_types.yaml', 'Definitions/helloworld3_types.yaml', 'Definitions/helloworld3_df_simple.yaml', 'Definitions/helloworld3_top.vnfd.yaml', 'Definitions/etsi_nfv_sol001_common_types.yaml' ] file_path_and_data = {} for file_name in file_names: with open(os.path.join(csar_temp_dir, file_name)) as f: file_path_and_data.update( {file_name: yaml.dump(yaml.safe_load(f))}) shutil.rmtree(csar_temp_dir) return file_path_and_data
def test_instantiate_vnf_vim_connection_info( self, mock_vnf_instance_save, mock_vnf_package_vnfd, mock_create): vnf_package_vnfd = fakes.return_vnf_package_vnfd() vnf_package_id = vnf_package_vnfd.package_uuid mock_vnf_package_vnfd.return_value = vnf_package_vnfd vim_connection_info = fakes.get_dummy_vim_connection_info() instantiate_vnf_req_dict = \ fakes.get_dummy_instantiate_vnf_request(**vim_connection_info) instantiate_vnf_req_obj = \ objects.InstantiateVnfRequest.obj_from_primitive( instantiate_vnf_req_dict, self.context) vnf_instance_obj = fakes.return_vnf_instance() fake_csar = os.path.join(self.temp_dir, vnf_package_id) cfg.CONF.set_override('vnf_package_csar_path', self.temp_dir, group='vnf_package') test_utils.copy_csar_files(fake_csar, "vnflcm4") self._mock_vnf_manager() driver = vnflcm_driver.VnfLcmDriver() driver.instantiate_vnf(self.context, vnf_instance_obj, instantiate_vnf_req_obj) self.assertEqual("INSTANTIATED", vnf_instance_obj.instantiation_state) self.assertEqual(2, mock_vnf_instance_save.call_count) self.assertEqual(4, self._vnf_manager.invoke.call_count) shutil.rmtree(fake_csar)
def _make_zip_file_from_sample(self, dir_name, read_vnfd_only=False): unique_name = str(uuid.uuid4()) temp_dir = os.path.join('/tmp', unique_name) utils.copy_csar_files(temp_dir, dir_name, read_vnfd_only) tempfd, temp_filepath = tempfile.mkstemp(suffix=".zip", dir=temp_dir) os.close(tempfd) zipfile.ZipFile(temp_filepath, 'w') self.addCleanup(shutil.rmtree, temp_dir) return temp_filepath
def test_heal_vnf_without_vnfc_instance(self, mock_log, mock_save, mock_vnf_resource_list, mock_resource_destroy, mock_resource_create, mock_vim, mock_vnf_package_vnfd): vnf_package_vnfd = fakes.return_vnf_package_vnfd() vnf_package_id = vnf_package_vnfd.package_uuid mock_vnf_package_vnfd.return_value = vnf_package_vnfd fake_csar = os.path.join(self.temp_dir, vnf_package_id) cfg.CONF.set_override('vnf_package_csar_path', self.temp_dir, group='vnf_package') test_utils.copy_csar_files(fake_csar, "vnflcm4") mock_vnf_resource_list.return_value = [fakes.return_vnf_resource()] # Heal as per SOL003 i.e. without vnfcInstanceId heal_vnf_req = objects.HealVnfRequest() vim_obj = { 'vim_id': uuidsentinel.vim_id, 'vim_name': 'fake_vim', 'vim_type': 'openstack', 'vim_auth': { 'auth_url': 'http://localhost/identity', 'password': '******', 'username': '******', 'project_name': 'test_project' } } mock_vim.return_value = vim_obj vnf_instance = fakes.return_vnf_instance( fields.VnfInstanceState.INSTANTIATED) vnf_instance.instantiated_vnf_info.instance_id =\ uuidsentinel.instance_id self._mock_vnf_manager() driver = vnflcm_driver.VnfLcmDriver() driver.heal_vnf(self.context, vnf_instance, heal_vnf_req) self.assertEqual(1, mock_save.call_count) # vnf resource software images will be deleted during # deleting vnf instance. self.assertEqual(1, mock_resource_destroy.call_count) # Vnf resource software images will be created during # instantiation. self.assertEqual(1, mock_resource_create.call_count) # Invoke will be called 7 times, 3 for deleting the vnf # resources and 4 during instantiation. self.assertEqual(7, self._vnf_manager.invoke.call_count) expected_msg = ("Request received for healing vnf '%s' " "is completed successfully") mock_log.info.assert_called_with(expected_msg, vnf_instance.id) shutil.rmtree(fake_csar)
def create_fake_csar_dir(vnf_package_id, temp_dir, csar_without_tosca_meta=False): csar_dir = ('sample_vnfpkg_no_meta_single_vnfd' if csar_without_tosca_meta else 'sample_vnfpkg_tosca_vnfd') fake_csar = os.path.join(temp_dir, vnf_package_id) cfg.CONF.set_override('vnf_package_csar_path', temp_dir, group='vnf_package') utils.copy_csar_files(fake_csar, csar_dir, csar_without_tosca_meta) return fake_csar
def test_heal_vnf_without_vnfc_instance_infra_instantiate_vnf_fail( self, mock_log, mock_save, mock_vnf_resource_list, mock_resource_destroy, mock_resource_create, mock_vim, mock_vnf_package_vnfd): vnf_package_vnfd = fakes.return_vnf_package_vnfd() vnf_package_id = vnf_package_vnfd.package_uuid mock_vnf_package_vnfd.return_value = vnf_package_vnfd fake_csar = os.path.join(self.temp_dir, vnf_package_id) cfg.CONF.set_override('vnf_package_csar_path', self.temp_dir, group='vnf_package') test_utils.copy_csar_files(fake_csar, "vnflcm4") mock_vnf_resource_list.return_value = [fakes.return_vnf_resource()] # Heal as per SOL003 i.e. without vnfcInstanceId heal_vnf_req = objects.HealVnfRequest() vnf_instance = fakes.return_vnf_instance( fields.VnfInstanceState.INSTANTIATED) vnf_instance.instantiated_vnf_info.instance_id =\ uuidsentinel.instance_id self._mock_vnf_manager(fail_method_name='instantiate_vnf') driver = vnflcm_driver.VnfLcmDriver() self.assertRaises(exceptions.VnfHealFailed, driver.heal_vnf, self.context, vnf_instance, heal_vnf_req) self.assertEqual(1, mock_save.call_count) # vnf resource software images will be deleted during # deleting vnf instance. self.assertEqual(1, mock_resource_destroy.call_count) # Vnf resource software images will be created during # instantiation. self.assertEqual(1, mock_resource_create.call_count) self.assertEqual(5, self._vnf_manager.invoke.call_count) self.assertEqual(fields.VnfInstanceTaskState.ERROR, vnf_instance.task_state) expected_msg = ('Failed to instantiate vnf instance %s ' 'after termination. The vnf is in inconsistent ' 'state. Error: Vnf instantiation failed for vnf %s, ' 'error: instantiate_vnf failed') mock_log.error.assert_called_with(expected_msg % (vnf_instance.id, vnf_instance.id))
def return_vnfd_data(csar_without_tosca_meta=False): csar_dir = ('sample_vnfpkg_no_meta_single_vnfd' if csar_without_tosca_meta else 'vnfpkgm1') unique_name = str(uuid.uuid4()) csar_temp_dir = os.path.join('/tmp', unique_name) utils.copy_csar_files(csar_temp_dir, csar_dir, csar_without_tosca_meta, read_vnfd_only=True) if csar_without_tosca_meta: file_names = ['vnfd_helloworld_single.yaml'] else: file_names = ['TOSCA-Metadata/TOSCA.meta', 'Definitions/helloworld3_types.yaml', 'Definitions/helloworld3_df_simple.yaml', 'Definitions/helloworld3_top.vnfd.yaml', 'Definitions/etsi_nfv_sol001_common_types.yaml', 'Definitions/etsi_nfv_sol001_vnfd_types.yaml'] file_path_and_data = {} for file_name in file_names: with open(os.path.join(csar_temp_dir, file_name)) as f: file_path_and_data.update({file_name: yaml.dump( yaml.safe_load(f))}) shutil.rmtree(csar_temp_dir) return file_path_and_data