improve UT coverage of tacker-server related files
improve UT coverage for: api/vnflcm |-controller.py api/vnfpkgm |-controller.py contuctor |-vnf_lcm_rpc.py Implements: blueprint improve-server-related-coverage Change-Id: I49c9c67d6c8fd5c7b5fe161190308b29400fe83b
This commit is contained in:
parent
b48de67c22
commit
550b39277f
|
@ -0,0 +1,133 @@
|
||||||
|
# Copyright (C) 2021 FUJITSU
|
||||||
|
# All Rights Reserved.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
# not use this file except in compliance with the License. You may obtain
|
||||||
|
# a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
# License for the specific language governing permissions and limitations
|
||||||
|
# under the License.
|
||||||
|
|
||||||
|
from unittest import mock
|
||||||
|
|
||||||
|
from tacker.common.rpc import BackingOffClient
|
||||||
|
from tacker.conductor.conductorrpc import vnf_lcm_rpc
|
||||||
|
from tacker.tests import base
|
||||||
|
|
||||||
|
|
||||||
|
class VnfLcmRPCTestCase(base.BaseTestCase):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
super(VnfLcmRPCTestCase, self).setUp()
|
||||||
|
self.context = self.fake_admin_context()
|
||||||
|
self.rpc_api = vnf_lcm_rpc.VNFLcmRPCAPI()
|
||||||
|
self.cctxt_mock = mock.MagicMock()
|
||||||
|
|
||||||
|
@mock.patch.object(BackingOffClient, 'prepare')
|
||||||
|
def test_instantiate(self, prepare_mock):
|
||||||
|
vnf_instance = ""
|
||||||
|
vnf = ""
|
||||||
|
instantiate_vnf = ""
|
||||||
|
vnf_lcm_op_occs_id = ""
|
||||||
|
prepare_mock.return_value = self.cctxt_mock
|
||||||
|
self.rpc_api.instantiate(
|
||||||
|
self.context, vnf_instance,
|
||||||
|
vnf, instantiate_vnf, vnf_lcm_op_occs_id)
|
||||||
|
prepare_mock.assert_called()
|
||||||
|
self.cctxt_mock.cast.assert_called_once_with(
|
||||||
|
self.context, 'instantiate',
|
||||||
|
vnf_instance=vnf_instance,
|
||||||
|
vnf_dict=vnf,
|
||||||
|
instantiate_vnf=instantiate_vnf,
|
||||||
|
vnf_lcm_op_occs_id=vnf_lcm_op_occs_id)
|
||||||
|
|
||||||
|
@mock.patch.object(BackingOffClient, 'prepare')
|
||||||
|
def test_terminate(self, prepare_mock):
|
||||||
|
vnf_instance = ""
|
||||||
|
vnf = ""
|
||||||
|
terminate_vnf_req = ""
|
||||||
|
vnf_lcm_op_occs_id = ""
|
||||||
|
prepare_mock.return_value = self.cctxt_mock
|
||||||
|
self.rpc_api.terminate(
|
||||||
|
self.context, terminate_vnf_req,
|
||||||
|
vnf, terminate_vnf_req, vnf_lcm_op_occs_id)
|
||||||
|
prepare_mock.assert_called()
|
||||||
|
self.cctxt_mock.cast.assert_called_once_with(
|
||||||
|
self.context, 'terminate',
|
||||||
|
vnf_instance=vnf_instance,
|
||||||
|
vnf_dict=vnf,
|
||||||
|
terminate_vnf_req=terminate_vnf_req,
|
||||||
|
vnf_lcm_op_occs_id=vnf_lcm_op_occs_id)
|
||||||
|
|
||||||
|
@mock.patch.object(BackingOffClient, 'prepare')
|
||||||
|
def test_heal(self, prepare_mock):
|
||||||
|
vnf_instance = ""
|
||||||
|
vnf = ""
|
||||||
|
heal_vnf_request = ""
|
||||||
|
vnf_lcm_op_occs_id = ""
|
||||||
|
prepare_mock.return_value = self.cctxt_mock
|
||||||
|
self.rpc_api.heal(
|
||||||
|
self.context, heal_vnf_request,
|
||||||
|
vnf, heal_vnf_request, vnf_lcm_op_occs_id)
|
||||||
|
prepare_mock.assert_called()
|
||||||
|
self.cctxt_mock.cast.assert_called_once_with(
|
||||||
|
self.context, 'heal',
|
||||||
|
vnf_instance=vnf_instance,
|
||||||
|
vnf_dict=vnf,
|
||||||
|
heal_vnf_request=heal_vnf_request,
|
||||||
|
vnf_lcm_op_occs_id=vnf_lcm_op_occs_id)
|
||||||
|
|
||||||
|
@mock.patch.object(BackingOffClient, 'prepare')
|
||||||
|
def test_scale(self, prepare_mock):
|
||||||
|
vnf_info = ""
|
||||||
|
vnf_instance = ""
|
||||||
|
scale_vnf_request = ""
|
||||||
|
prepare_mock.return_value = self.cctxt_mock
|
||||||
|
self.rpc_api.scale(
|
||||||
|
self.context, vnf_info,
|
||||||
|
vnf_instance, scale_vnf_request)
|
||||||
|
prepare_mock.assert_called()
|
||||||
|
self.cctxt_mock.cast.assert_called_once_with(
|
||||||
|
self.context, 'scale',
|
||||||
|
vnf_info=vnf_info,
|
||||||
|
vnf_instance=vnf_instance,
|
||||||
|
scale_vnf_request=scale_vnf_request)
|
||||||
|
|
||||||
|
@mock.patch.object(BackingOffClient, 'prepare')
|
||||||
|
def test_update(self, prepare_mock):
|
||||||
|
vnf_lcm_opoccs = ""
|
||||||
|
body_data = ""
|
||||||
|
vnfd_pkg_data = ""
|
||||||
|
vnfd_id = ""
|
||||||
|
prepare_mock.return_value = self.cctxt_mock
|
||||||
|
self.rpc_api.update(
|
||||||
|
self.context, vnf_lcm_opoccs,
|
||||||
|
body_data, vnfd_pkg_data, vnfd_id)
|
||||||
|
prepare_mock.assert_called()
|
||||||
|
self.cctxt_mock.cast.assert_called_once_with(
|
||||||
|
self.context, 'update',
|
||||||
|
vnf_lcm_opoccs=vnf_lcm_opoccs,
|
||||||
|
body_data=body_data,
|
||||||
|
vnfd_pkg_data=vnfd_pkg_data,
|
||||||
|
vnfd_id=vnfd_id)
|
||||||
|
|
||||||
|
@mock.patch.object(BackingOffClient, 'prepare')
|
||||||
|
def test_rollback(self, prepare_mock):
|
||||||
|
vnf_info = ""
|
||||||
|
vnf_instance = ""
|
||||||
|
operation_params = ""
|
||||||
|
prepare_mock.return_value = self.cctxt_mock
|
||||||
|
self.rpc_api.rollback(
|
||||||
|
self.context, vnf_info,
|
||||||
|
vnf_instance, operation_params)
|
||||||
|
prepare_mock.assert_called()
|
||||||
|
self.cctxt_mock.cast.assert_called_once_with(
|
||||||
|
self.context, 'rollback',
|
||||||
|
vnf_info=vnf_info,
|
||||||
|
vnf_instance=vnf_instance,
|
||||||
|
operation_params=operation_params)
|
|
@ -4068,3 +4068,57 @@ class TestController(base.TestCase):
|
||||||
|
|
||||||
resp = req.get_response(self.app)
|
resp = req.get_response(self.app)
|
||||||
self.assertEqual(500, resp.status_code)
|
self.assertEqual(500, resp.status_code)
|
||||||
|
|
||||||
|
@mock.patch.object(vim_client.VimClient, "get_vim")
|
||||||
|
@mock.patch('tacker.api.vnflcm.v1.controller.'
|
||||||
|
'VnfLcmController._update_package_usage_state')
|
||||||
|
@mock.patch.object(objects.VnfPackage, 'get_by_id')
|
||||||
|
@mock.patch.object(objects.vnf_package.VnfPackage, 'save')
|
||||||
|
@mock.patch.object(TackerManager, 'get_service_plugins',
|
||||||
|
return_value={'VNFM':
|
||||||
|
test_nfvo_plugin.FakeVNFMPlugin()})
|
||||||
|
@mock.patch.object(objects.vnf_instance, '_vnf_instance_create')
|
||||||
|
@mock.patch.object(objects.vnf_package_vnfd.VnfPackageVnfd, 'get_by_id')
|
||||||
|
def test_create_using_internal_methods(
|
||||||
|
self, mock_get_by_id,
|
||||||
|
mock_vnf_instance_create,
|
||||||
|
mock_get_service_plugins,
|
||||||
|
mock_package_save,
|
||||||
|
mock_vnf_package_get_by_id,
|
||||||
|
mock_update_package_usage_state,
|
||||||
|
mock_get_vim):
|
||||||
|
mock_get_vim.return_value = self.vim_info
|
||||||
|
mock_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()
|
||||||
|
|
||||||
|
updates = {'vnfd_id': uuidsentinel.vnfd_id,
|
||||||
|
'vnf_instance_description': 'SampleVnf Description',
|
||||||
|
'vnf_instance_name': 'SampleVnf',
|
||||||
|
'vnf_pkg_id': uuidsentinel.vnf_pkg_id,
|
||||||
|
'vnf_metadata': {"key": "value"}}
|
||||||
|
|
||||||
|
mock_vnf_instance_create.return_value =\
|
||||||
|
fakes.return_vnf_instance_model(**updates)
|
||||||
|
|
||||||
|
body = {'vnfdId': uuidsentinel.vnfd_id,
|
||||||
|
"vnfInstanceName": "SampleVnf",
|
||||||
|
"vnfInstanceDescription": "SampleVnf Description",
|
||||||
|
'metadata': {"key": "value"}}
|
||||||
|
req = fake_request.HTTPRequest.blank('/vnf_instances')
|
||||||
|
req.body = jsonutils.dump_as_bytes(body)
|
||||||
|
req.headers['Content-Type'] = 'application/json'
|
||||||
|
req.method = 'POST'
|
||||||
|
req.environ['tacker.context'] = self.context
|
||||||
|
|
||||||
|
# Call Create API
|
||||||
|
resp = req.get_response(self.app)
|
||||||
|
|
||||||
|
self.assertEqual(500, resp.status_code)
|
||||||
|
|
||||||
|
expected_vnf = {'tackerFault': {'code': 500,
|
||||||
|
'message': 'Unexpected API Error. Please report this at '
|
||||||
|
'http://bugs.launchpad.net/tacker/ and attach the '
|
||||||
|
'Tacker API log if possible.\n'
|
||||||
|
"<class 'webob.exc.HTTPInternalServerError'>"}}
|
||||||
|
self.assertEqual(expected_vnf, resp.json)
|
||||||
|
|
|
@ -992,7 +992,8 @@ class TestController(base.TestCase):
|
||||||
|
|
||||||
def test_fetch_vnf_package_content_valid_range(self):
|
def test_fetch_vnf_package_content_valid_range(self):
|
||||||
request = fake_request.HTTPRequest.blank(
|
request = fake_request.HTTPRequest.blank(
|
||||||
'/vnf_packages/%s/package_content/')
|
'/vnf_packages/%s/package_content/'
|
||||||
|
% constants.UUID)
|
||||||
request.headers["Range"] = 'bytes=10-99'
|
request.headers["Range"] = 'bytes=10-99'
|
||||||
range_ = self.controller._get_range_from_request(request, 120)
|
range_ = self.controller._get_range_from_request(request, 120)
|
||||||
self.assertEqual(10, range_.start)
|
self.assertEqual(10, range_.start)
|
||||||
|
@ -1000,7 +1001,8 @@ class TestController(base.TestCase):
|
||||||
|
|
||||||
def test_fetch_vnf_package_content_invalid_range(self):
|
def test_fetch_vnf_package_content_invalid_range(self):
|
||||||
request = fake_request.HTTPRequest.blank(
|
request = fake_request.HTTPRequest.blank(
|
||||||
'/vnf_packages/%s/package_content/')
|
'/vnf_packages/%s/package_content/'
|
||||||
|
% constants.UUID)
|
||||||
request.headers["Range"] = 'bytes=150-'
|
request.headers["Range"] = 'bytes=150-'
|
||||||
self.assertRaises(exc.HTTPRequestRangeNotSatisfiable,
|
self.assertRaises(exc.HTTPRequestRangeNotSatisfiable,
|
||||||
self.controller._get_range_from_request,
|
self.controller._get_range_from_request,
|
||||||
|
@ -1008,12 +1010,96 @@ class TestController(base.TestCase):
|
||||||
|
|
||||||
def test_fetch_vnf_package_content_invalid_multiple_range(self):
|
def test_fetch_vnf_package_content_invalid_multiple_range(self):
|
||||||
request = fake_request.HTTPRequest.blank(
|
request = fake_request.HTTPRequest.blank(
|
||||||
'/vnf_packages/%s/package_content/')
|
'/vnf_packages/%s/package_content/'
|
||||||
|
% constants.UUID)
|
||||||
request.headers["Range"] = 'bytes=10-20,21-30'
|
request.headers["Range"] = 'bytes=10-20,21-30'
|
||||||
self.assertRaises(exc.HTTPBadRequest,
|
self.assertRaises(exc.HTTPBadRequest,
|
||||||
self.controller._get_range_from_request, request,
|
self.controller._get_range_from_request, request,
|
||||||
120)
|
120)
|
||||||
|
|
||||||
|
@mock.patch.object(controller.VnfPkgmController, "_download")
|
||||||
|
@mock.patch.object(controller.VnfPkgmController, "_get_range_from_request")
|
||||||
|
@mock.patch.object(glance_store, 'get_csar_size')
|
||||||
|
@mock.patch.object(controller.VnfPkgmController, '_get_vnf_package')
|
||||||
|
@mock.patch.object(vnf_package.VnfPackage, 'save')
|
||||||
|
def test_fetch_vnf_package_content(
|
||||||
|
self,
|
||||||
|
mock_save,
|
||||||
|
mock_get_vnf_package,
|
||||||
|
mock_get_csar_size,
|
||||||
|
mock_get_range,
|
||||||
|
mock_download):
|
||||||
|
request = fake_request.HTTPRequest.blank(
|
||||||
|
'/vnf_packages/%s/package_content/'
|
||||||
|
% constants.UUID)
|
||||||
|
request.headers["Range"] = 'bytes=10-20,21-30'
|
||||||
|
request.response = ""
|
||||||
|
mock_get_vnf_package.return_value = fakes.return_vnfpkg_obj()
|
||||||
|
mock_get_csar_size.return_value = 1000
|
||||||
|
mock_get_range.return_value = "10-20, 21-30"
|
||||||
|
mock_download.return_value = "Response"
|
||||||
|
id = constants.UUID
|
||||||
|
result = self.controller.fetch_vnf_package_content(request, id)
|
||||||
|
self.assertEqual(result, "Response")
|
||||||
|
mock_get_csar_size.assert_called_once_with(
|
||||||
|
id, fakes.return_vnfpkg_obj().location_glance_store)
|
||||||
|
mock_get_vnf_package.assert_called_once_with(
|
||||||
|
id, request)
|
||||||
|
mock_get_range.assert_called_once_with(
|
||||||
|
request, 1000)
|
||||||
|
|
||||||
|
@mock.patch.object(controller.VnfPkgmController, '_get_vnf_package')
|
||||||
|
def test_fetch_vnf_package_content_invalid_onboarding(
|
||||||
|
self, mock_get):
|
||||||
|
request = fake_request.HTTPRequest.blank(
|
||||||
|
'/vnf_packages/%s/package_content/'
|
||||||
|
% constants.UUID)
|
||||||
|
request.headers["Range"] = 'bytes=10-20,21-30'
|
||||||
|
request.response = ""
|
||||||
|
pkgobj = fakes.return_vnfpkg_obj()
|
||||||
|
pkgobj.onboarding_state = fields.PackageOnboardingStateType.PROCESSING
|
||||||
|
mock_get.return_value = pkgobj
|
||||||
|
id = constants.UUID
|
||||||
|
self.assertRaises(exc.HTTPConflict,
|
||||||
|
self.controller.fetch_vnf_package_content, request,
|
||||||
|
id)
|
||||||
|
|
||||||
|
@mock.patch.object(controller.VnfPkgmController, '_get_vnf_package')
|
||||||
|
def test_fetch_vnf_package_content_not_present(self, mock_get):
|
||||||
|
request = fake_request.HTTPRequest.blank(
|
||||||
|
'/vnf_packages/%s/package_content/'
|
||||||
|
% constants.UUID)
|
||||||
|
request.headers["Range"] = 'bytes=10-20,21-30'
|
||||||
|
request.response = ""
|
||||||
|
pkgobj = fakes.return_vnfpkg_obj()
|
||||||
|
mock_get.return_value = pkgobj
|
||||||
|
id = constants.UUID
|
||||||
|
self.assertRaises(exc.HTTPNotFound,
|
||||||
|
self.controller.fetch_vnf_package_content, request,
|
||||||
|
id)
|
||||||
|
|
||||||
|
@mock.patch.object(controller.VnfPkgmController, "_download")
|
||||||
|
@mock.patch.object(controller.VnfPkgmController, "_get_range_from_request")
|
||||||
|
@mock.patch.object(controller.VnfPkgmController, '_get_vnf_package')
|
||||||
|
def test_fetch_vnf_package_content_with_size(
|
||||||
|
self,
|
||||||
|
mock_get,
|
||||||
|
mock_get_range,
|
||||||
|
mock_download):
|
||||||
|
request = fake_request.HTTPRequest.blank(
|
||||||
|
'/vnf_packages/%s/package_content/'
|
||||||
|
% constants.UUID)
|
||||||
|
request.headers["Range"] = 'bytes=10-20,21-30'
|
||||||
|
request.response = ""
|
||||||
|
pkgobj = fakes.return_vnfpkg_obj()
|
||||||
|
pkgobj.size = 1000
|
||||||
|
mock_get_range.return_value = "10-20, 21-30"
|
||||||
|
mock_download.return_value = 1000
|
||||||
|
mock_get.return_value = pkgobj
|
||||||
|
id = constants.UUID
|
||||||
|
result = self.controller.fetch_vnf_package_content(request, id)
|
||||||
|
self.assertEqual(result, 1000)
|
||||||
|
|
||||||
def test_fetch_vnf_package_artifacts_with_invalid_uuid(
|
def test_fetch_vnf_package_artifacts_with_invalid_uuid(
|
||||||
self):
|
self):
|
||||||
# invalid_uuid
|
# invalid_uuid
|
||||||
|
|
Loading…
Reference in New Issue