tacker/tacker/tests/unit/vnflcm/test_sync_resource.py

351 lines
14 KiB
Python

# 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.
import ddt
from tacker.api.vnflcm.v1 import sync_resource as sync
from tacker.conductor.conductorrpc import vnf_pkgm_rpc
from tacker import context
from tacker.db.nfvo import nfvo_db
from tacker.glance_store import store as glance_store
from tacker import objects
from tacker.tests.unit import base
from tacker.tests.unit.vnflcm import fakes as vnflcm_fakes
from tacker.tests.unit.vnfpkgm import fakes as vnfpkgm_fakes
from tacker.tests import uuidsentinel
import tacker.vnfm.nfvo_client as nfvo_client
from unittest import mock
from webob import exc
@ddt.ddt
class TestSyncVnfPackage(base.TestCase):
def setUp(self):
super(TestSyncVnfPackage, self).setUp()
self.context = context.ContextBase(
uuidsentinel.user_id,
uuidsentinel.project_id,
is_admin=True)
self.vim = nfvo_db.Vim()
def tearDown(self):
super(TestSyncVnfPackage, self).tearDown()
self.addCleanup(mock.patch.stopall)
@mock.patch.object(glance_store, 'store_csar')
@mock.patch.object(objects.vnf_package_vnfd.VnfPackageVnfd,
'get_by_id')
@mock.patch.object(objects.vnf_package, '_vnf_package_create')
@mock.patch.object(objects.vnf_package.VnfPackage, 'save')
@mock.patch.object(objects.vnf_package.VnfPackage, '_from_db_object')
@mock.patch.object(nfvo_client.VnfPackageRequest, 'download_vnf_packages')
@mock.patch.object(vnf_pkgm_rpc.VNFPackageRPCAPI,
"upload_vnf_package_content")
def test_package_and_package_vnfd_creation_successful(self,
mock_upload_vnf_package_content,
mock_nfvo_download_vnf_packages,
mock_from_db_vnf_package,
mock_save_vnf_package,
mock_vnf_package,
mock_get_by_id,
mock_glance_store):
# glance_store mock Settings
mock_glance_store.return_value = 'location', 0, 'checksum',\
'multihash', 'loc_meta'
updates = {'additionalArtifacts': [
{
'artifactPath': 'sample1_file.yaml',
'checksum': {
'hash':
'53b504e608eef3d19a\
22413bf6ee72f42091fbb5213e6a876a3a22f6c3c94fe1',
'algorithm': 'SHA-256'
}
},
{
'artifactPath': 'sample2_file.yaml',
'checksum': {
'hash':
'43b504e608eef3d19a\
22413bf6ee72f42091fbb5213e6a876a3a22f6c3c94fe1',
'algorithm': 'SHA-256'
}
}
]}
vnf_package_info = vnfpkgm_fakes.index_response(
remove_attrs=['userDefinedData'],
vnf_package_updates=updates)[0]
exp_vnf_package_vnfd = \
vnflcm_fakes.fake_vnf_package_vnfd_model_dict(**updates)
mock_get_by_id.return_value = exp_vnf_package_vnfd
vnf_package_vnfd = sync.SyncVnfPackage.create_package(
self.context, vnf_package_info)
# Expected value setting
self.assertEqual(exp_vnf_package_vnfd.get('package_uuid'),
vnf_package_vnfd.get('package_uuid'))
self.assertEqual(exp_vnf_package_vnfd.get('vnfd_id'),
vnf_package_vnfd.get('vnfd_id'))
self.assertEqual(exp_vnf_package_vnfd.get('vnf_provider'),
vnf_package_vnfd.get('vnf_provider'))
self.assertEqual(exp_vnf_package_vnfd.get('vnf_product_name'),
vnf_package_vnfd.get('vnf_product_name'))
self.assertEqual(exp_vnf_package_vnfd.get('vnf_software_version'),
vnf_package_vnfd.get('vnf_software_version'))
self.assertEqual(exp_vnf_package_vnfd.get('vnfd_version'),
vnf_package_vnfd.get('vnfd_version'))
# Check if a mock is called even once
mock_upload_vnf_package_content.assert_called()
mock_nfvo_download_vnf_packages.assert_called()
mock_from_db_vnf_package.assert_called()
mock_save_vnf_package.assert_called()
mock_vnf_package.assert_called()
mock_get_by_id.assert_called()
mock_glance_store.assert_called()
@mock.patch.object(objects.vnf_package, '_vnf_package_create')
def test_package_and_package_vnfd_creation_package_create_err(self,
mock_vnf_package):
# vnf_package mock Settings
mock_vnf_package.side_effect = Exception
# SyncVnfPackage.create_package
vnf_package_info = vnfpkgm_fakes.index_response()[0]
self.assertRaises(
exc.HTTPInternalServerError,
sync.SyncVnfPackage.create_package,
self.context,
vnf_package_info)
# Check if a mock is called even once
mock_vnf_package.assert_called()
@mock.patch.object(objects.vnf_package, '_vnf_package_create')
@mock.patch.object(objects.vnf_package.VnfPackage, '_from_db_object')
@mock.patch.object(nfvo_client.VnfPackageRequest, 'download_vnf_packages')
def test_package_and_package_vnfd_creation_undefinedexcep(self,
mock_nfvo_download_vnf_packages,
mock_from_db_vnf_package,
mock_vnf_package):
# VnfPackageRequest.download_vnf_packages mock Settings
mock_nfvo_download_vnf_packages.side_effect = \
nfvo_client.UndefinedExternalSettingException(
"Vnf package the external setting to 'base_url' undefined.")
# SyncVnfPackage.create_package
vnf_package_info = vnfpkgm_fakes.index_response()[0]
self.assertRaises(
exc.HTTPNotFound,
sync.SyncVnfPackage.create_package,
self.context,
vnf_package_info)
# Check if a mock is called even once
mock_vnf_package.assert_called()
mock_from_db_vnf_package.assert_called()
mock_nfvo_download_vnf_packages.assert_called()
@mock.patch.object(objects.vnf_package, '_vnf_package_create')
@mock.patch.object(objects.vnf_package.VnfPackage, '_from_db_object')
@mock.patch.object(nfvo_client.VnfPackageRequest, 'download_vnf_packages')
def test_package_and_package_vnfd_creation_falieddownloadexcep(self,
mock_nfvo_download_vnf_packages,
mock_from_db_vnf_package,
mock_vnf_package):
# VnfPackageRequest.download_vnf_packages mock Settings
vnf_package_zip = ''
mock_nfvo_download_vnf_packages.side_effect = \
nfvo_client.FaliedDownloadContentException(
"Failed response content, vnf_package_zip={}".format(
vnf_package_zip))
# SyncVnfPackage.create_package
vnf_package_info = vnfpkgm_fakes.index_response()[0]
self.assertRaises(
exc.HTTPInternalServerError,
sync.SyncVnfPackage.create_package,
self.context,
vnf_package_info)
# Check if a mock is called even once
mock_vnf_package.assert_called()
mock_from_db_vnf_package.assert_called()
mock_nfvo_download_vnf_packages.assert_called()
@mock.patch.object(objects.vnf_package, '_vnf_package_create')
@mock.patch.object(objects.vnf_package.VnfPackage, '_from_db_object')
@mock.patch.object(nfvo_client.VnfPackageRequest, 'download_vnf_packages')
def test_package_and_package_vnfd_creation_exception(self,
mock_nfvo_download_vnf_packages,
mock_from_db_vnf_package,
mock_vnf_package):
# VnfPackageRequest.download_vnf_packages mock Settings
mock_nfvo_download_vnf_packages.side_effect = Exception
# SyncVnfPackage.create_package
vnf_package_info = vnfpkgm_fakes.index_response()[0]
self.assertRaises(
exc.HTTPInternalServerError,
sync.SyncVnfPackage.create_package,
self.context,
vnf_package_info)
# Check if a mock is called even once
mock_vnf_package.assert_called()
mock_from_db_vnf_package.assert_called()
mock_nfvo_download_vnf_packages.assert_called()
@mock.patch.object(glance_store, 'store_csar')
@mock.patch.object(objects.vnf_package, '_vnf_package_create')
@mock.patch.object(objects.vnf_package.VnfPackage, '_from_db_object')
@mock.patch.object(nfvo_client.VnfPackageRequest, 'download_vnf_packages')
def test_package_and_package_vnfd_creation_store_csar_err(self,
mock_nfvo_download_vnf_packages,
mock_from_db_vnf_package,
mock_vnf_package,
mock_glance_store):
# glance_store mock Settings
mock_glance_store.side_effect = Exception
# SyncVnfPackage.create_package
vnf_package_info = vnfpkgm_fakes.index_response()[0]
self.assertRaises(
exc.HTTPInternalServerError,
sync.SyncVnfPackage.create_package,
self.context,
vnf_package_info)
# Check if a mock is called even once
mock_vnf_package.assert_called()
mock_from_db_vnf_package.assert_called()
mock_nfvo_download_vnf_packages.assert_called()
mock_glance_store.assert_called()
@mock.patch.object(glance_store, 'store_csar')
@mock.patch.object(objects.vnf_package, '_vnf_package_create')
@mock.patch.object(objects.vnf_package.VnfPackage, 'save')
@mock.patch.object(objects.vnf_package.VnfPackage, '_from_db_object')
@mock.patch.object(nfvo_client.VnfPackageRequest, 'download_vnf_packages')
def test_package_and_package_vnfd_creation_package_upde_err(self,
mock_nfvo_download_vnf_packages,
mock_from_db_vnf_package,
mock_save_vnf_package,
mock_vnf_package,
mock_glance_store):
# glance_store mock Settings
mock_glance_store.return_value = 'location', 0, 'checksum',\
'multihash', 'loc_meta'
# vnf_package mock Settings
mock_save_vnf_package.side_effect = Exception
# SyncVnfPackage.create_package
vnf_package_info = vnfpkgm_fakes.index_response()[0]
self.assertRaises(
exc.HTTPInternalServerError,
sync.SyncVnfPackage.create_package,
self.context,
vnf_package_info)
# Check if a mock is called even once
mock_nfvo_download_vnf_packages.assert_called()
mock_from_db_vnf_package.assert_called()
mock_save_vnf_package.assert_called()
mock_vnf_package.assert_called()
mock_glance_store.assert_called()
@mock.patch.object(glance_store, 'store_csar')
@mock.patch.object(vnf_pkgm_rpc.VNFPackageRPCAPI,
'upload_vnf_package_content')
@mock.patch.object(objects.vnf_package, '_vnf_package_create')
@mock.patch.object(objects.vnf_package.VnfPackage, 'save')
@mock.patch.object(objects.vnf_package.VnfPackage, '_from_db_object')
@mock.patch.object(nfvo_client.VnfPackageRequest, 'download_vnf_packages')
def test_package_and_package_vnfd_creation_rpc_err(self,
mock_nfvo_download_vnf_packages,
mock_from_db_vnf_package,
mock_save_vnf_package,
mock_vnf_package,
mock_upload_vnf_package_content,
mock_glance_store):
# glance_store mock Settings
mock_glance_store.return_value = 'location', 0, 'checksum',\
'multihash', 'loc_meta'
mock_upload_vnf_package_content.side_effect = Exception
# SyncVnfPackage.create_package
vnf_package_info = vnfpkgm_fakes.index_response()[0]
self.assertRaises(
exc.HTTPInternalServerError,
sync.SyncVnfPackage.create_package,
self.context,
vnf_package_info)
# Check if a mock is called even once
mock_nfvo_download_vnf_packages.assert_called()
mock_from_db_vnf_package.assert_called()
mock_save_vnf_package.assert_called()
mock_vnf_package.assert_called()
mock_upload_vnf_package_content.assert_called()
mock_glance_store.assert_called()
@mock.patch.object(glance_store, 'store_csar')
@mock.patch.object(objects.vnf_package_vnfd.VnfPackageVnfd,
'get_by_id')
@mock.patch.object(objects.vnf_package, '_vnf_package_create')
@mock.patch.object(objects.vnf_package.VnfPackage, 'save')
@mock.patch.object(objects.vnf_package.VnfPackage, '_from_db_object')
@mock.patch.object(nfvo_client.VnfPackageRequest, 'download_vnf_packages')
def test_package_and_get_package_vnfd_err(self,
mock_nfvo_download_vnf_packages,
mock_from_db_vnf_package,
mock_save_vnf_package,
mock_vnf_package,
mock_get_by_id,
mock_glance_store):
# glance_store mock Settings
mock_glance_store.return_value = 'location', 0, 'checksum',\
'multihash', 'loc_meta'
# vnf_package_vnfd mock Settings
mock_get_by_id.side_effect = Exception
# SyncVnfPackage.create_package
vnf_package_info = vnfpkgm_fakes.index_response()[0]
self.assertRaises(
exc.HTTPInternalServerError,
sync.SyncVnfPackage.create_package,
self.context,
vnf_package_info)
# Check if a mock is called even once
mock_nfvo_download_vnf_packages.assert_called()
mock_from_db_vnf_package.assert_called()
mock_save_vnf_package.assert_called()
mock_vnf_package.assert_called()
mock_get_by_id.assert_called()
mock_glance_store.assert_called()