tacker/tacker/tests/unit/objects/fakes.py
Aldinson Esto 87ea725784 Enhancement of get VNF LCM operation occurrence
- Added support for getting Individual VNF LCM
operation occurrence by its ID

- The query information is enhanced by improving
filtering expressions and operators

- Attributes are also added including (but not
limited to):
  * grant_id
  * _links
  * >retry
  * >fail
  * changedExtConnectivity

- This patch has 2 BP features (Get VNFM LCM Operation
Occurence and attributes of Change External Connectivity
are also added). Since both features are related, they are
merged to one patch. This is why this patch have 2 BPs.

- Filtering for the following attributes:
operationParams, error, resourceChanges and
changedInfo is only limited to the parent
attribute. Currently, child attributes/nested
attributes are not searchable.

Implements: blueprint support-fundamental-lcm
Implements: blueprint support-change-external-connectivity
Spec: https://specs.openstack.org/openstack/tacker-specs/specs/wallaby/support-fundamental-vnf-lcm-based-on-ETSI-NFV.html
Spec: https://specs.openstack.org/openstack/tacker-specs/specs/wallaby/support-change-external-VNF-connectivity-operation.html
Change-Id: Ie9b07c203807d08857be65298d9128b026a8fd37
2021-03-26 03:01:10 +00:00

535 lines
17 KiB
Python

# Copyright (C) 2019 NTT DATA
# 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.
import copy
import datetime
import iso8601
from tacker.db.db_sqlalchemy import models
from tacker.tests import constants
from tacker.tests import uuidsentinel
vnf_package_data = {'algorithm': None, 'hash': None,
'location_glance_store': None,
'onboarding_state': 'CREATED',
'operational_state': 'DISABLED',
'tenant_id': uuidsentinel.tenant_id,
'usage_state': 'NOT_IN_USE',
'user_data': {'abc': 'xyz'},
'created_at': datetime.datetime(
2019, 8, 8, 0, 0, 0, tzinfo=iso8601.UTC),
'deleted': False,
'size': 0
}
software_image = {
'software_image_id': uuidsentinel.software_image_id,
'name': 'test', 'provider': 'test', 'version': 'test',
'algorithm': 'sha-256',
'hash': 'b9c3036539fd7a5f87a1bf38eb05fdde8b556a1'
'a7e664dbeda90ed3cd74b4f9d',
'container_format': 'test', 'disk_format': 'qcow2', 'min_disk': 1,
'min_ram': 2, 'size': 1, 'image_path': 'test',
'metadata': {'key1': 'value1'}
}
artifact_data = {
'file_name': 'test', 'type': 'test',
'algorithm': 'sha-256',
'hash': 'b9c3036539fd7a5f87a1bf38eb05fdde8b556a1'
'a7e664dbeda90ed3cd74b4f9d',
'metadata': {'key1': 'value1'}
}
artifacts = {
'json_data': 'test data',
'type': 'tosca.artifacts.nfv.SwImage',
'algorithm': 'sha512', 'hash': uuidsentinel.hash}
filter = {
"usageState": ["NOT_IN_USE"],
"vnfPkgId": ["f04857cb-abdc-405f-8254-01501f3fa059"],
"vnfdId": ["b1bb0ce7-5555-0001-95ed-4840d70a1209"],
"vnfProductsFromProviders": [
{
"vnfProvider": "xxxxx",
"vnfProducts": [
{
"vnfProductName": "artifactVNF",
"versions": [
{
"vnfSoftwareVersion": "1.0",
"vnfdVersions": ["v2.2"]
}
]
}
]
},
{
"vnfProvider": "xxxxx",
"vnfProducts": [
{
"vnfProductName": "artifactVNF",
"versions": [
{
"vnfSoftwareVersion": "1.0",
"vnfdVersions": ["v2.2"]
}
]
}
]
}
],
"notificationTypes": ["VnfLcmOperationOccurrenceNotification"],
"operationalState": ["ENABLED"]
}
subscription_data = {
'id': "c3e5ea85-8e3d-42df-a636-3b7857cbd7f9",
'callback_uri': "fake_url",
'created_at': "2020-06-11 09:39:58"
}
vnfd_data = {
"tenant_id": uuidsentinel.tenant_id,
'name': 'test',
'description': 'test_description',
'mgmt_driver': 'test_mgmt_driver'
}
vnfd_attribute = {
'key': 'test_key',
'value': 'test_value',
}
lcm_op_occs_data = {
"tenant_id": uuidsentinel.tenant_id,
'operation_state': 'PROCESSING',
'state_entered_time': datetime.datetime(1900, 1, 1, 1, 1, 1,
tzinfo=iso8601.UTC),
'start_time': datetime.datetime(1900, 1, 1, 1, 1, 1,
tzinfo=iso8601.UTC),
'operation': 'MODIFY_INFO',
'is_automatic_invocation': 0,
'is_cancel_pending': 0,
}
vim_data = {
'id': uuidsentinel.vim_id,
'type': 'test_type',
"tenant_id": uuidsentinel.tenant_id,
'name': "test_name",
'description': "test_description",
'placement_attr': "test_placement_attr",
'shared': 0,
'status': "REACHABLE",
'is_default': 0
}
fake_vnf_package_response = copy.deepcopy(vnf_package_data)
fake_vnf_package_response.pop('user_data')
fake_vnf_package_response.update({'id': uuidsentinel.package_uuid})
vnf_deployment_flavour = {'flavour_id': 'simple',
'flavour_description': 'simple flavour description',
'instantiation_levels': {
'levels': {
'instantiation_level_1': {
'description': 'Smallest size',
'scale_info': {
'worker_instance': {
'scale_level': 0
}
}
},
'instantiation_level_2': {
'description': 'Largest size',
'scale_info': {
'worker_instance': {
'scale_level': 2
}
}
}
},
'default_level': 'instantiation_level_1'
},
'created_at': datetime.datetime(
2019, 8, 8, 0, 0, 0, tzinfo=iso8601.UTC),
}
vnf_artifacts = {
'artifact_path': 'scripts/install.sh',
'_metadata': {},
'algorithm': 'sha-256',
'hash': 'd0e7828293355a07c2dccaaa765c80b507e60e6167067c950dc2e6b0da0dbd8b',
'created_at': datetime.datetime(2020, 6, 29, 0, 0, 0, tzinfo=iso8601.UTC),
}
def fake_vnf_package_vnfd_dict(**updates):
vnf_pkg_vnfd = {
'package_uuid': uuidsentinel.package_uuid,
'vnfd_id': uuidsentinel.vnfd_id,
'vnf_provider': 'test vnf provider',
'vnf_product_name': 'Sample VNF',
'vnf_software_version': '1.0',
'vnfd_version': '1.0'
}
if updates:
vnf_pkg_vnfd.update(updates)
return vnf_pkg_vnfd
def return_vnf_package_vnfd_data():
model_obj = models.VnfPackageVnfd()
model_obj.update(fake_vnf_package_vnfd_dict())
return model_obj
def get_vnf_package_vnfd_data(vnf_package_id, vnfd_id):
return {
'package_uuid': vnf_package_id,
'vnfd_id': vnfd_id,
'vnf_provider': 'test vnf provider',
'vnf_product_name': 'Sample VNF',
'vnf_software_version': '1.0',
"vnf_pkg_id": uuidsentinel.vnf_pkg_id,
'vnfd_version': '1.0',
}
def get_vnf_instance_data(vnfd_id):
return {
"vnf_software_version": "1.0",
"vnf_product_name": "Sample VNF",
"vnf_instance_name": 'Sample VNF Instance',
"vnf_instance_description": 'Sample vnf_instance_description',
"instantiation_state": "NOT_INSTANTIATED",
"vnf_provider": "test vnf provider",
"vnfd_id": vnfd_id,
"vnfd_version": "1.0",
"tenant_id": uuidsentinel.tenant_id,
"vnf_pkg_id": uuidsentinel.vnf_pkg_id,
"vnf_metadata": {"key": "value"},
}
def get_vnf_instance_data_with_id(vnfd_id):
return {
"id": uuidsentinel.tenant_id,
"vnf_software_version": "1.0",
"vnf_product_name": "Sample VNF",
"vnf_instance_name": 'Sample VNF Instance',
"vnf_instance_description": 'Sample vnf_instance_description',
"instantiation_state": "NOT_INSTANTIATED",
"vnf_provider": "test vnf provider",
"vnfd_id": vnfd_id,
"vnfd_version": "1.0",
"tenant_id": uuidsentinel.tenant_id,
"vnf_pkg_id": uuidsentinel.vnf_pkg_id,
"vnf_metadata": {"key": "value"},
}
def get_lcm_op_occs_data(id, vnf_instance_id):
return {
"id": id,
"tenant_id": uuidsentinel.tenant_id,
'operation_state': 'PROCESSING',
'state_entered_time': datetime.datetime(1900, 1, 1, 1, 1, 1,
tzinfo=iso8601.UTC),
'start_time': datetime.datetime(1900, 1, 1, 1, 1, 1,
tzinfo=iso8601.UTC),
'vnf_instance_id': vnf_instance_id,
'operation': 'MODIFY_INFO',
'is_automatic_invocation': 0,
'is_cancel_pending': 0,
}
def fake_vnf_instance_model_dict(**updates):
vnf_instance = {
'deleted': False,
'deleted_at': None,
'updated_at': None,
'created_at': datetime.datetime(1900, 1, 1, 1, 1, 1,
tzinfo=iso8601.UTC),
'vnf_product_name': 'Sample VNF',
'vnf_instance_name': 'Sample VNF',
'vnf_instance_description': None,
'vnf_provider': 'test vnf provider',
'vnf_software_version': '1.0',
'vnfd_id': uuidsentinel.vnfd_id,
'vnfd_version': '1.0',
'instantiation_state': 'NOT_INSTANTIATED',
'vim_connection_info': [],
'tenant_id': '33f8dbdae36142eebf214c1869eb4e4c',
'vnf_pkg_id': uuidsentinel.vnf_pkg_id,
'id': constants.UUID,
'vnf_metadata': {"key": "value"},
}
if updates:
vnf_instance.update(updates)
return vnf_instance
def fake_vnf_resource_data(instance_id):
return {
'vnf_instance_id': instance_id,
'resource_name': "test",
'resource_type': "image",
'resource_identifier': uuidsentinel.image_id,
'resource_status': "status"
}
def vnf_pack_vnfd_data(vnf_pack_id):
return {
'package_uuid': vnf_pack_id,
'vnfd_id': uuidsentinel.vnfd_id,
'vnf_provider': 'test_provider',
'vnf_product_name': 'test_product_name',
'vnf_software_version': 'test_version',
'vnfd_version': 'test_vnfd_version',
}
def vnf_pack_artifact_data(vnf_pack_id):
return {
'package_uuid': vnf_pack_id,
'artifact_path': 'scripts/install.sh',
'algorithm': 'sha-256',
'hash': 'd0e7828293355a07c2dccaaa765c80b507e'
'60e6167067c950dc2e6b0da0dbd8b',
'_metadata': {}
}
ip_address = [{
'type': 'IPV4',
'is_dynamic': True
}]
ip_over_ethernet_address_info = {
'mac_address': 'fake_mac',
'ip_addresses': ip_address,
}
cp_protocol_info = {
'layer_protocol': 'IP_OVER_ETHERNET',
'ip_over_ethernet': ip_over_ethernet_address_info,
}
vnf_external_cp_info = {
'id': uuidsentinel.external_cp_id,
'cpd_id': uuidsentinel.cpd_id,
'ext_link_port_id': uuidsentinel.ext_link_port_id
}
resource_handle_info = {
'resource_id': uuidsentinel.resource_id,
'vim_level_resource_type': 'TEST'
}
ext_link_port_info = {
'id': uuidsentinel.ext_link_port_id,
'resource_handle': resource_handle_info,
'cp_instance_id': uuidsentinel.cp_instance_id,
}
ext_virtual_link_info = {
'id': uuidsentinel.virtual_link_id,
'resource_handle': resource_handle_info,
'ext_link_ports': [ext_link_port_info],
}
vnf_link_ports = {
'id': uuidsentinel.vnf_link_ports_id,
'resource_handle': resource_handle_info,
'cp_instance_id': uuidsentinel.cp_instance_id
}
ext_managed_virtual_link_info = {
'id': uuidsentinel.ext_managed_virtual_link_id,
'vnf_virtual_link_desc_id': uuidsentinel.vnf_virtual_link_desc_id,
'network_resource': resource_handle_info,
'vnf_link_ports': [vnf_link_ports],
}
vnfc_resource_info = {
'id': uuidsentinel.resource_info_id,
'vdu_id': 'vdu1',
'compute_resource': None,
'storage_resource_ids': [uuidsentinel.id1, uuidsentinel.id2],
'reservation_id': uuidsentinel.reservation_id,
'vnfc_cp_info': None,
'metadata': {'key': 'value'}
}
vnfc_cp_info = {
'id': uuidsentinel.cp_instance_id,
'cpd_id': uuidsentinel.cpd_id,
'vnf_ext_cp_id': uuidsentinel.vnf_ext_cp_id,
'cp_protocol_info': [cp_protocol_info],
'vnf_link_port_id': uuidsentinel.vnf_link_port_id,
}
vnfc_resource_info = {
'id': uuidsentinel.resource_info_id,
'vdu_id': uuidsentinel.vdu_id,
'compute_resource': resource_handle_info,
'storage_resource_ids': [uuidsentinel.id1, uuidsentinel.id2],
'reservation_id': uuidsentinel.reservation_id,
'vnfc_cp_info': [vnfc_cp_info],
'metadata': {'key': 'value'}
}
ip_address_info = {
'type': 'IPV4',
'subnet_id': uuidsentinel.subnet_id,
'is_dynamic': False,
'addresses': ['10.10.1', '10.10.2'],
}
vnf_virtual_link_resource_info = {
'id': uuidsentinel.virtual_link_resource_id,
'vnf_virtual_link_desc_id': uuidsentinel.vnf_virtual_link_desc_id,
'network_resource': resource_handle_info,
'vnf_link_ports': vnf_link_ports,
}
virtual_storage_resource_info = {
'id': uuidsentinel.virtual_storage_resource_id,
'virtual_storage_desc_id': uuidsentinel.virtual_storage_desc_id,
'storage_resource': resource_handle_info,
}
vnf_ext_cp_info = {
'id': uuidsentinel.id,
'cpd_id': 'CP1',
'cp_protocol_info': [cp_protocol_info],
'associated_vnfc_cp_id': uuidsentinel.associated_vnfc_cp_id
}
def get_instantiated_vnf_info():
instantiated_vnf_info = {
'flavour_id': uuidsentinel.flavour_id,
'vnf_state': 'STARTED',
'instance_id': uuidsentinel.instance_id
}
return instantiated_vnf_info
instantiated_vnf_info = {
'ext_cp_info': [vnf_ext_cp_info],
'flavour_id': uuidsentinel.flavour_id,
'vnf_state': 'STARTED',
'vnf_instance_id': uuidsentinel.vnf_instance_id
}
def vnf_resource_model_object(vnf_resource):
resource_dict = {
'id': vnf_resource.id,
'vnf_instance_id': vnf_resource.vnf_instance_id,
'resource_name': vnf_resource.resource_name,
'resource_type': vnf_resource.resource_type,
'resource_identifier': vnf_resource.resource_identifier,
'resource_status': vnf_resource.resource_status
}
vnf_resource_db_obj = models.VnfResource()
vnf_resource_db_obj.update(resource_dict)
return vnf_resource_db_obj
def vnf_instance_model_object(vnf_instance):
instance_dict = {
'id': vnf_instance.id,
'vnf_instance_name': vnf_instance.vnf_instance_name,
'vnf_instance_description': vnf_instance.vnf_instance_description,
'instantiation_state': vnf_instance.instantiation_state,
'task_state': vnf_instance.task_state,
'vnfd_id': vnf_instance.vnfd_id,
'vnf_provider': vnf_instance.vnf_provider,
'vnf_product_name': vnf_instance.vnf_product_name,
'vnf_software_version': vnf_instance.vnf_software_version,
'vnfd_version': vnf_instance.vnfd_version,
'vim_connection_info': vnf_instance.vim_connection_info,
'tenant_id': vnf_instance.tenant_id,
'created_at': vnf_instance.created_at,
'vnf_pkg_id': vnf_instance.vnf_pkg_id,
'vnf_metadata': vnf_instance.vnf_metadata,
}
vnf_instance_db_obj = models.VnfInstance()
vnf_instance_db_obj.update(instance_dict)
return vnf_instance_db_obj
def get_changed_info_data():
return {
"vnf_instance_name": "",
"vnf_instance_description": "",
"metadata": {"test:": "test_value"},
"vnf_configurable_properties": {"test": "test_value"},
"vnfc_info_modifications_delete_ids": ["test1"],
"vnfd_id": "2c69a161-0000-4b0f-bcf8-391f8fc76600",
"vnf_provider": "NEC",
"vnf_product_name": "MME",
"vnf_software_version": "1.0",
"vnfd_version": "MME_1.0"
}
def get_vnf(vnfd_id, vim_id):
return {
'tenant_id': uuidsentinel.tenant_id,
'name': "test_name",
'vnfd_id': vnfd_id,
'mgmt_ip_address': "test_mgmt_ip_address",
'status': "ACTIVE",
'description': "test_description",
'placement_attr': "test_placement_attr",
'vim_id': vim_id
}
def get_changed_ext_conn_data():
return [{
"id": uuidsentinel.change_ext_conn_id,
"resource_handle": {
"vim_connection_id": uuidsentinel.vim_connection_id,
"resource_id": uuidsentinel.vl_resource_id,
"vim_level_resource_type": "OS::Neutron::Net",
},
"ext_link_ports": [{
"id": uuidsentinel.ext_link_ports_id,
"resource_handle": {
"vim_connection_id": uuidsentinel.vim_connection_id,
"resource_id": uuidsentinel.port_resource_id,
"vim_level_resource_type": "OS::Neutron::Port",
},
"cp_instance_id": uuidsentinel.cp_instance_id,
}]
}]