def test_instantiate_vnf_with_short_notation(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 instantiate_vnf_req_dict = fakes.get_dummy_instantiate_vnf_request() 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') base_path = os.path.dirname(os.path.abspath(__file__)) sample_vnf_package_zip = os.path.join( base_path, "../../etc/samples/" "sample_vnf_package_csar_with_short_notation.zip") extracted_zip_path = fake_csar zipfile.ZipFile(sample_vnf_package_zip, 'r').extractall(extracted_zip_path) self._mock_vnf_manager(vnf_resource_count=2) driver = vnflcm_driver.VnfLcmDriver() driver.instantiate_vnf(self.context, vnf_instance_obj, instantiate_vnf_req_obj) self.assertEqual(2, mock_create.call_count) self.assertEqual("INSTANTIATED", vnf_instance_obj.instantiation_state) shutil.rmtree(fake_csar)
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') self._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 test_instantiate_vnf_with_short_notation(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 instantiate_vnf_req_dict = fakes.get_dummy_instantiate_vnf_request() 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') self._copy_csar_files(fake_csar, "sample_vnf_package_csar_with_short_notation") self._mock_vnf_manager(vnf_resource_count=2) driver = vnflcm_driver.VnfLcmDriver() driver.instantiate_vnf(self.context, vnf_instance_obj, instantiate_vnf_req_obj) self.assertEqual(2, mock_create.call_count) self.assertEqual("INSTANTIATED", vnf_instance_obj.instantiation_state) shutil.rmtree(fake_csar)
def test_create_with_name_and_description( self, mock_get_by_id, mock_vnf_instance_create): mock_get_by_id.return_value = fakes.return_vnf_package_vnfd() updates = {'vnf_instance_description': 'SampleVnf Description', 'vnf_instance_name': 'SampleVnf'} mock_vnf_instance_create.return_value =\ fakes.return_vnf_instance_model(**updates) body = {'vnfdId': uuidsentinel.vnfd_id, "vnfInstanceName": "SampleVnf", "vnfInstanceDescription": "SampleVnf Description"} req = fake_request.HTTPRequest.blank('/vnf_instances') req.body = jsonutils.dump_as_bytes(body) req.headers['Content-Type'] = 'application/json' req.method = 'POST' # Call Create API resp = req.get_response(self.app) self.assertEqual(http_client.CREATED, resp.status_code) updates = {"vnfInstanceName": "SampleVnf", "vnfInstanceDescription": "SampleVnf Description"} expected_vnf = fakes.fake_vnf_instance_response(**updates) location_header = ('http://localhost/vnflcm/v1/vnf_instances/%s' % resp.json['id']) self.assertEqual(expected_vnf, resp.json) self.assertEqual(location_header, resp.headers['location'])
def test_instantiate_vnf_with_ext_virtual_links(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 req_body = fakes.get_instantiate_vnf_request_with_ext_virtual_links() instantiate_vnf_req_dict = utils.convert_camelcase_to_snakecase( req_body) 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') self._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 test_instantiate_with_non_existing_region_vim( self, mock_vnf_package_get_by_id, mock_vnf_package_vnfd_get_by_id, mock_vnf_instance_get_by_id, mock_get_vim): mock_vnf_instance_get_by_id.return_value =\ fakes.return_vnf_instance_model() mock_vnf_package_vnfd_get_by_id.return_value = \ fakes.return_vnf_package_vnfd() mock_vnf_package_get_by_id.return_value = \ fakes.return_vnf_package_with_deployment_flavour() mock_get_vim.side_effect = nfvo.VimRegionNotFoundException body = {"flavourId": "simple", "vimConnectionInfo": [ {'id': uuidsentinel.vim_connection_id, 'vimId': uuidsentinel.vim_id, 'vimType': 'openstack', 'accessInfo': {"region": 'region_non_existing'}} ]} req = fake_request.HTTPRequest.blank( '/vnf_instances/%s/instantiate' % uuidsentinel.vnf_instance_id) req.body = jsonutils.dump_as_bytes(body) req.headers['Content-Type'] = 'application/json' req.method = 'POST' # Call Instantiate API resp = req.get_response(self.app) self.assertEqual(http_client.BAD_REQUEST, resp.status_code) self.assertEqual("Region not found for the VimConnection: %s" % uuidsentinel.vim_id, resp.json['badRequest']['message'])
def test_instantiate_with_vim_connection( self, mock_instantiate, mock_vnf_package_get_by_id, mock_vnf_package_vnfd_get_by_id, mock_save, mock_vnf_instance_get_by_id, mock_get_vim): mock_vnf_instance_get_by_id.return_value =\ fakes.return_vnf_instance_model() mock_vnf_package_vnfd_get_by_id.return_value = \ fakes.return_vnf_package_vnfd() mock_vnf_package_get_by_id.return_value = \ fakes.return_vnf_package_with_deployment_flavour() body = {"flavourId": "simple", "vimConnectionInfo": [ {"id": uuidsentinel.vim_connection_id, "vimId": uuidsentinel.vim_id, "vimType": 'openstack'} ]} req = fake_request.HTTPRequest.blank( '/vnf_instances/%s/instantiate' % uuidsentinel.vnf_instance_id) req.body = jsonutils.dump_as_bytes(body) req.headers['Content-Type'] = 'application/json' req.method = 'POST' # Call Instantiate API resp = req.get_response(self.app) self.assertEqual(http_client.ACCEPTED, resp.status_code) mock_instantiate.assert_called_once()
def test_instantiate_with_non_existing_instantiation_level( self, mock_instantiate, mock_vnf_package_get_by_id, mock_vnf_package_vnfd_get_by_id, mock_vnf_instance_get_by_id): mock_vnf_instance_get_by_id.return_value =\ fakes.return_vnf_instance_model() mock_vnf_package_vnfd_get_by_id.return_value = \ fakes.return_vnf_package_vnfd() mock_vnf_package_get_by_id.return_value = \ fakes.return_vnf_package_with_deployment_flavour() body = {"flavourId": "simple", "instantiationLevelId": "non-existing"} req = fake_request.HTTPRequest.blank( '/vnf_instances/%s/instantiate' % uuidsentinel.vnf_instance_id) req.body = jsonutils.dump_as_bytes(body) req.headers['Content-Type'] = 'application/json' req.method = 'POST' # Call Instantiate API resp = req.get_response(self.app) self.assertEqual(http_client.BAD_REQUEST, resp.status_code) self.assertEqual("No instantiation level with id 'non-existing'.", resp.json['badRequest']['message'])
def test_instantiate_with_no_inst_level_in_flavour( self, mock_instantiate, mock_vnf_package_get_by_id, mock_vnf_package_vnfd_get_by_id, mock_save, mock_vnf_instance_get_by_id, mock_get_vim): mock_vnf_instance_get_by_id.return_value =\ fakes.return_vnf_instance_model() mock_vnf_package_vnfd_get_by_id.return_value = \ fakes.return_vnf_package_vnfd() vnf_package = fakes.return_vnf_package_with_deployment_flavour() vnf_package.vnf_deployment_flavours[0].instantiation_levels = None mock_vnf_package_get_by_id.return_value = vnf_package # No instantiation level in deployment flavour but it's passed in the # request body = {"flavourId": "simple", "instantiationLevelId": "instantiation_level_1"} req = fake_request.HTTPRequest.blank( '/vnf_instances/%s/instantiate' % uuidsentinel.vnf_instance_id) req.body = jsonutils.dump_as_bytes(body) req.headers['Content-Type'] = 'application/json' req.method = 'POST' # Call Instantiate API resp = req.get_response(self.app) self.assertEqual(http_client.BAD_REQUEST, resp.status_code) self.assertEqual("No instantiation level with id " "'instantiation_level_1'.", resp.json['badRequest']['message'])
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') self._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 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') base_path = os.path.dirname(os.path.abspath(__file__)) sample_vnf_package_zip = os.path.join( base_path, "../../etc/samples/sample_vnf_package_csar.zip") extracted_zip_path = fake_csar zipfile.ZipFile(sample_vnf_package_zip, 'r').extractall(extracted_zip_path) 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 test_instantiate_vnf_infra_fails_to_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') base_path = os.path.dirname(os.path.abspath(__file__)) sample_vnf_package_zip = os.path.join( base_path, "../../etc/samples/sample_vnf_package_csar.zip") extracted_zip_path = fake_csar zipfile.ZipFile(sample_vnf_package_zip, 'r').extractall(extracted_zip_path) self._mock_vnf_manager(fail_method_name="instantiate_vnf") driver = vnflcm_driver.VnfLcmDriver() error = self.assertRaises(exceptions.VnfInstantiationFailed, driver.instantiate_vnf, self.context, vnf_instance_obj, instantiate_vnf_req_obj) expected_error = ("Vnf instantiation failed for vnf %s, error: " "instantiate_vnf failed") self.assertEqual(expected_error % vnf_instance_obj.id, str(error)) self.assertEqual("NOT_INSTANTIATED", vnf_instance_obj.instantiation_state) self.assertEqual(2, mock_vnf_instance_save.call_count) self.assertEqual(2, self._vnf_manager.invoke.call_count) shutil.rmtree(fake_csar)
def test_instantiate_with_default_vim_not_configured( self, mock_vnf_package_get_by_id, mock_vnf_package_vnfd_get_by_id, mock_vnf_instance_get_by_id, mock_get_vim): mock_vnf_instance_get_by_id.return_value =\ fakes.return_vnf_instance_model() mock_vnf_package_vnfd_get_by_id.return_value = \ fakes.return_vnf_package_vnfd() mock_vnf_package_get_by_id.return_value = \ fakes.return_vnf_package_with_deployment_flavour() mock_get_vim.side_effect = nfvo.VimDefaultNotDefined body = {"flavourId": "simple"} req = fake_request.HTTPRequest.blank( '/vnf_instances/%s/instantiate' % uuidsentinel.vnf_instance_id) req.body = jsonutils.dump_as_bytes(body) req.headers['Content-Type'] = 'application/json' req.method = 'POST' # Call Instantiate API resp = req.get_response(self.app) self.assertEqual(http_client.BAD_REQUEST, resp.status_code) self.assertEqual("Default VIM is not defined.", resp.json['badRequest']['message'])