tacker/tacker/tests/unit/sol_refactored/common/test_lcm_op_occ_utils.py

2503 lines
90 KiB
Python

# Copyright (C) 2021 Nippon Telegraph and Telephone Corporation
# 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 import context
from tacker.sol_refactored.common import exceptions as sol_ex
from tacker.sol_refactored.common import lcm_op_occ_utils as lcmocc_utils
from tacker.sol_refactored import objects
from tacker.sol_refactored.objects.v2 import fields
from tacker.tests import base
# instantiatedVnfInfo examples
# NOTE:
# - some identifiers are modified to make check easy.
# - some attributes which are not related to test update_lcmocc are omitted.
_inst_info_example_1 = {
# "flavourId", "vnfState", "scaleStatus", "maxScaleLevels" are omitted
# "extCpInfo": omitted
"extVirtualLinkInfo": [
{
"id": "bbf0932a-6142-4ea8-93cd-8059dba594a1",
"resourceHandle": {
"resourceId": "3529d333-dbcc-4d93-9b64-210647712569"
},
"extLinkPorts": [
{
"id": "res_id_VDU2_CP1",
"resourceHandle": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VDU2_CP1",
"vimLevelResourceType": "OS::Neutron::Port"
},
"cpInstanceId": "cp-res_id_VDU2_CP1"
},
{
"id": "res_id_VDU1_CP1_1",
"resourceHandle": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VDU1_CP1_1",
"vimLevelResourceType": "OS::Neutron::Port"
},
"cpInstanceId": "cp-res_id_VDU1_CP1_1"
}
],
# "currentVnfExtCpData": omitted
},
{
"id": "790949df-c7b3-4926-a559-3895412f1dfe",
"resourceHandle": {
"resourceId": "367e5b3b-34dc-47f2-85b8-c39e3272893a"
},
"extLinkPorts": [
{
"id": "res_id_VDU2_CP2",
"resourceHandle": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VDU2_CP2",
"vimLevelResourceType": "OS::Neutron::Port"
},
"cpInstanceId": "cp-res_id_VDU2_CP2"
},
{
"id": "res_id_VDU1_CP2_1",
"resourceHandle": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VDU1_CP2_1",
"vimLevelResourceType": "OS::Neutron::Port"
},
"cpInstanceId": "cp-res_id_VDU1_CP2_1"
}
],
# "currentVnfExtCpData": omitted
},
# following two data are for test_update_lcmocc_change_ext_conn
{
"id": "cba2e572-2cc5-4d11-af60-728615883206",
"resourceHandle": {
"resourceId": "4529d333-dbcc-4d93-9b64-210647712569"
},
"extLinkPorts": [],
"currentVnfExtCpData": [
{
"cpdId": "VDU1_CP1",
"cpConfig": {
"VDU1_CP1_1": {
"cpProtocolData": [
{
"layerProtocol": "IP_OVER_ETHERNET",
"ipOverEthernet": {
"ipAddresses": [
{
"type": "IPV4",
"numDynamicAddresses": 1
}
]
}
}
]
}
}
},
{
"cpdId": "VDU2_CP1",
"cpConfig": {
"VDU2_CP1_1": {
"cpProtocolData": [
{
"layerProtocol": "IP_OVER_ETHERNET",
"ipOverEthernet": {
"ipAddresses": [
{
"type": "IPV4",
"fixedAddresses": [
"10.10.0.102"
]
}
]
}
}
]
}
}
}
]
},
{
"id": "fc131806-8a4f-43a3-82c0-a38e87fe87bd",
"resourceHandle": {
"resourceId": "5529d333-dbcc-4d93-9b64-210647712569"
},
"extLinkPorts": [],
"currentVnfExtCpData": [
{
"cpdId": "VDU1_CP2",
"cpConfig": {
"VDU1_CP2_1": {
"cpProtocolData": [
{
"layerProtocol": "IP_OVER_ETHERNET",
"ipOverEthernet": {
"ipAddresses": [
{
"type": "IPV4",
"numDynamicAddresses": 1,
}
]
}
}
]
}
}
},
{
"cpdId": "VDU2_CP2",
"cpConfig": {
"VDU2_CP2_1": {
"cpProtocolData": [
{
"layerProtocol": "IP_OVER_ETHERNET",
"ipOverEthernet": {
"ipAddresses": [
{
"type": "IPV4",
"fixedAddresses": [
"10.10.1.102"
],
}
]
}
}
]
}
}
}
]
}
],
"extManagedVirtualLinkInfo": [
{
"id": "res_id_internalVL1",
"vnfVirtualLinkDescId": "internalVL1",
"networkResource": {
"resourceId": "res_id_internalVL1"
},
"vnfLinkPorts": [
{
"id": "res_id_VDU2_CP3",
"resourceHandle": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VDU2_CP3",
"vimLevelResourceType": "OS::Neutron::Port"
},
"cpInstanceId": "VDU2_CP3-res_id_VDU2",
"cpInstanceType": "VNFC_CP"
},
{
"id": "res_id_VDU1_CP3_1",
"resourceHandle": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VDU1_CP3_1",
"vimLevelResourceType": "OS::Neutron::Port"
},
"cpInstanceId": "VDU1_CP3-res_id_VDU1_1",
"cpInstanceType": "VNFC_CP"
}
]
}
],
"vnfcResourceInfo": [
{
"id": "res_id_VDU1_1",
"vduId": "VDU1",
"computeResource": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VDU1_1",
"vimLevelResourceType": "OS::Nova::Server"
},
"storageResourceIds": [
"res_id_VirtualStorage_1"
],
"vnfcCpInfo": [
{
"id": "VDU1_CP1-res_id_VDU1_1",
"cpdId": "VDU1_CP1",
"vnfExtCpId": "cp-res_id_VDU1_CP1_1"
},
{
"id": "VDU1_CP2-res_id_VDU1_1",
"cpdId": "VDU1_CP2",
"vnfExtCpId": "cp-res_id_VDU1_CP2_1"
},
{
"id": "VDU1_CP3-res_id_VDU1_1",
"cpdId": "VDU1_CP3",
"vnfLinkPortId": "res_id_VDU1_CP3_1"
},
{
"id": "VDU1_CP4-res_id_VDU1_1",
"cpdId": "VDU1_CP4",
"vnfLinkPortId": "res_id_VDU1_CP4_1"
},
{
"id": "VDU1_CP5-res_id_VDU1_1",
"cpdId": "VDU1_CP5",
"vnfLinkPortId": "res_id_VDU1_CP5_1"
}
],
"metadata": {
"image-VDU1-VirtualStorage": "image-VDU1"
# other attributes omitted
}
},
{
"id": "res_id_VDU2",
"vduId": "VDU2",
"computeResource": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VDU2",
"vimLevelResourceType": "OS::Nova::Server"
},
"vnfcCpInfo": [
{
"id": "VDU2_CP1-res_id_VDU2",
"cpdId": "VDU2_CP1",
"vnfExtCpId": "cp-res_id_VDU2_CP1"
},
{
"id": "VDU2_CP2-res_id_VDU2",
"cpdId": "VDU2_CP2",
"vnfExtCpId": "cp-res_id_VDU2_CP2"
},
{
"id": "VDU2_CP3-res_id_VDU2",
"cpdId": "VDU2_CP3",
"vnfLinkPortId": "res_id_VDU2_CP3"
},
{
"id": "VDU2_CP4-res_id_VDU2",
"cpdId": "VDU2_CP4",
"vnfLinkPortId": "res_id_VDU2_CP4"
},
{
"id": "VDU2_CP5-res_id_VDU2",
"cpdId": "VDU2_CP5",
"vnfLinkPortId": "res_id_VDU2_CP5"
}
],
"metadata": {
"image-VDU2": "image-VDU2"
# other attributes omitted
}
}
],
"vnfVirtualLinkResourceInfo": [
{
"id": "res_id_internalVL3",
"vnfVirtualLinkDescId": "internalVL3",
"networkResource": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_internalVL3",
"vimLevelResourceType": "OS::Neutron::Net"
},
"vnfLinkPorts": [
{
"id": "res_id_VDU2_CP5",
"resourceHandle": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VDU2_CP5",
"vimLevelResourceType": "OS::Neutron::Port"
},
"cpInstanceId": "VDU2_CP5-res_id_VDU2",
"cpInstanceType": "VNFC_CP"
},
{
"id": "res_id_VDU1_CP5_1",
"resourceHandle": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VDU1_CP5_1",
"vimLevelResourceType": "OS::Neutron::Port"
},
"cpInstanceId": "VDU1_CP5-res_id_VDU1_1",
"cpInstanceType": "VNFC_CP"
}
]
},
{
"id": "res_id_internalVL2",
"vnfVirtualLinkDescId": "internalVL2",
"networkResource": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_internalVL2",
"vimLevelResourceType": "OS::Neutron::Net"
},
"vnfLinkPorts": [
{
"id": "res_id_VDU2_CP4",
"resourceHandle": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VDU2_CP4",
"vimLevelResourceType": "OS::Neutron::Port"
},
"cpInstanceId": "VDU2_CP4-res_id_VDU2",
"cpInstanceType": "VNFC_CP"
},
{
"id": "res_id_VDU1_CP4_1",
"resourceHandle": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VDU1_CP4_1",
"vimLevelResourceType": "OS::Neutron::Port"
},
"cpInstanceId": "VDU1_CP4-res_id_VDU1_1",
"cpInstanceType": "VNFC_CP"
}
]
}
],
"virtualStorageResourceInfo": [
{
"id": "res_id_VirtualStorage_1",
"virtualStorageDescId": "VirtualStorage",
"storageResource": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VirtualStorage_1",
"vimLevelResourceType": "OS::Cinder::Volume"
}
}
],
# "vnfcInfo": omitted
}
# example_2 is added a VDU1 to example_1.
_inst_info_example_2 = {
# "flavourId", "vnfState", "scaleStatus", "maxScaleLevels" are omitted
# "extCpInfo": omitted
"extVirtualLinkInfo": [
{
"id": "bbf0932a-6142-4ea8-93cd-8059dba594a1",
"resourceHandle": {
"resourceId": "3529d333-dbcc-4d93-9b64-210647712569"
},
"extLinkPorts": [
{
"id": "res_id_VDU2_CP1",
"resourceHandle": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VDU2_CP1",
"vimLevelResourceType": "OS::Neutron::Port"
},
"cpInstanceId": "cp-res_id_VDU2_CP1"
},
{
"id": "res_id_VDU1_CP1_1",
"resourceHandle": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VDU1_CP1_1",
"vimLevelResourceType": "OS::Neutron::Port"
},
"cpInstanceId": "cp-res_id_VDU1_CP1_1"
},
{
"id": "res_id_VDU1_CP1_2",
"resourceHandle": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VDU1_CP1_2",
"vimLevelResourceType": "OS::Neutron::Port"
},
"cpInstanceId": "cp-res_id_VDU1_CP1_2"
}
],
# "currentVnfExtCpData": omitted
},
{
"id": "790949df-c7b3-4926-a559-3895412f1dfe",
"resourceHandle": {
"resourceId": "367e5b3b-34dc-47f2-85b8-c39e3272893a"
},
"extLinkPorts": [
{
"id": "res_id_VDU2_CP2",
"resourceHandle": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VDU2_CP2",
"vimLevelResourceType": "OS::Neutron::Port"
},
"cpInstanceId": "cp-res_id_VDU2_CP2"
},
{
"id": "res_id_VDU1_CP2_1",
"resourceHandle": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VDU1_CP2_1",
"vimLevelResourceType": "OS::Neutron::Port"
},
"cpInstanceId": "cp-res_id_VDU1_CP2_1"
},
{
"id": "res_id_VDU1_CP2_2",
"resourceHandle": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VDU1_CP2_2",
"vimLevelResourceType": "OS::Neutron::Port"
},
"cpInstanceId": "cp-res_id_VDU1_CP2_2"
}
],
# "currentVnfExtCpData": omitted
}
],
"extManagedVirtualLinkInfo": [
{
"id": "res_id_internalVL1",
"vnfVirtualLinkDescId": "internalVL1",
"networkResource": {
"resourceId": "res_id_internalVL1"
},
"vnfLinkPorts": [
{
"id": "res_id_VDU2_CP3",
"resourceHandle": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VDU2_CP3",
"vimLevelResourceType": "OS::Neutron::Port"
},
"cpInstanceId": "VDU2_CP3-res_id_VDU2",
"cpInstanceType": "VNFC_CP"
},
{
"id": "res_id_VDU1_CP3_1",
"resourceHandle": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VDU1_CP3_1",
"vimLevelResourceType": "OS::Neutron::Port"
},
"cpInstanceId": "VDU1_CP3-res_id_VDU1_1",
"cpInstanceType": "VNFC_CP"
},
{
"id": "res_id_VDU1_CP3_2",
"resourceHandle": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VDU1_CP3_2",
"vimLevelResourceType": "OS::Neutron::Port"
},
"cpInstanceId": "VDU1_CP3-res_id_VDU1_2",
"cpInstanceType": "VNFC_CP"
}
]
}
],
"vnfcResourceInfo": [
{
"id": "res_id_VDU1_2",
"vduId": "VDU1",
"computeResource": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VDU1_2",
"vimLevelResourceType": "OS::Nova::Server"
},
"storageResourceIds": [
"res_id_VirtualStorage_2"
],
"vnfcCpInfo": [
{
"id": "VDU1_CP1-res_id_VDU1_2",
"cpdId": "VDU1_CP1",
"vnfExtCpId": "cp-res_id_VDU1_CP1_2"
},
{
"id": "VDU1_CP2-res_id_VDU1_2",
"cpdId": "VDU1_CP2",
"vnfExtCpId": "cp-res_id_VDU1_CP2_2"
},
{
"id": "VDU1_CP3-res_id_VDU1_2",
"cpdId": "VDU1_CP3",
"vnfLinkPortId": "res_id_VDU1_CP3_2"
},
{
"id": "VDU1_CP4-res_id_VDU1_2",
"cpdId": "VDU1_CP4",
"vnfLinkPortId": "res_id_VDU1_CP4_2"
},
{
"id": "VDU1_CP5-res_id_VDU1_2",
"cpdId": "VDU1_CP5",
"vnfLinkPortId": "res_id_VDU1_CP5_2"
}
],
"metadata": {
"image-VDU1-VirtualStorage": "image-VDU1"
# other attributes omitted
}
},
{
"id": "res_id_VDU1_1",
"vduId": "VDU1",
"computeResource": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VDU1_1",
"vimLevelResourceType": "OS::Nova::Server"
},
"storageResourceIds": [
"res_id_VirtualStorage_1"
],
"vnfcCpInfo": [
{
"id": "VDU1_CP1-res_id_VDU1_1",
"cpdId": "VDU1_CP1",
"vnfExtCpId": "cp-res_id_VDU1_CP1_1"
},
{
"id": "VDU1_CP2-res_id_VDU1_1",
"cpdId": "VDU1_CP2",
"vnfExtCpId": "cp-res_id_VDU1_CP2_1"
},
{
"id": "VDU1_CP3-res_id_VDU1_1",
"cpdId": "VDU1_CP3",
"vnfLinkPortId": "res_id_VDU1_CP3_1"
},
{
"id": "VDU1_CP4-res_id_VDU1_1",
"cpdId": "VDU1_CP4",
"vnfLinkPortId": "res_id_VDU1_CP4_1"
},
{
"id": "VDU1_CP5-res_id_VDU1_1",
"cpdId": "VDU1_CP5",
"vnfLinkPortId": "res_id_VDU1_CP5_1"
}
],
"metadata": {
"image-VDU1-VirtualStorage": "image-VDU1"
# other attributes omitted
}
},
{
"id": "res_id_VDU2",
"vduId": "VDU2",
"computeResource": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VDU2",
"vimLevelResourceType": "OS::Nova::Server"
},
"vnfcCpInfo": [
{
"id": "VDU2_CP1-res_id_VDU2",
"cpdId": "VDU2_CP1",
"vnfExtCpId": "cp-res_id_VDU2_CP1"
},
{
"id": "VDU2_CP2-res_id_VDU2",
"cpdId": "VDU2_CP2",
"vnfExtCpId": "cp-res_id_VDU2_CP2"
},
{
"id": "VDU2_CP3-res_id_VDU2",
"cpdId": "VDU2_CP3",
"vnfLinkPortId": "res_id_VDU2_CP3"
},
{
"id": "VDU2_CP4-res_id_VDU2",
"cpdId": "VDU2_CP4",
"vnfLinkPortId": "res_id_VDU2_CP4"
},
{
"id": "VDU2_CP5-res_id_VDU2",
"cpdId": "VDU2_CP5",
"vnfLinkPortId": "res_id_VDU2_CP5"
}
],
"metadata": {
"image-VDU2": "image-VDU2"
# other attributes omitted
}
}
],
"vnfVirtualLinkResourceInfo": [
{
"id": "res_id_internalVL3",
"vnfVirtualLinkDescId": "internalVL3",
"networkResource": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_internalVL3",
"vimLevelResourceType": "OS::Neutron::Net"
},
"vnfLinkPorts": [
{
"id": "res_id_VDU2_CP5",
"resourceHandle": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VDU2_CP5",
"vimLevelResourceType": "OS::Neutron::Port"
},
"cpInstanceId": "VDU2_CP5-res_id_VDU2",
"cpInstanceType": "VNFC_CP"
},
{
"id": "res_id_VDU1_CP5_1",
"resourceHandle": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VDU1_CP5_1",
"vimLevelResourceType": "OS::Neutron::Port"
},
"cpInstanceId": "VDU1_CP5-res_id_VDU1_1",
"cpInstanceType": "VNFC_CP"
},
{
"id": "res_id_VDU1_CP5_2",
"resourceHandle": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VDU1_CP5_2",
"vimLevelResourceType": "OS::Neutron::Port"
},
"cpInstanceId": "VDU1_CP5-res_id_VDU1_2",
"cpInstanceType": "VNFC_CP"
}
]
},
{
"id": "res_id_internalVL2",
"vnfVirtualLinkDescId": "internalVL2",
"networkResource": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_internalVL2",
"vimLevelResourceType": "OS::Neutron::Net"
},
"vnfLinkPorts": [
{
"id": "res_id_VDU2_CP4",
"resourceHandle": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VDU2_CP4",
"vimLevelResourceType": "OS::Neutron::Port"
},
"cpInstanceId": "VDU2_CP4-res_id_VDU2",
"cpInstanceType": "VNFC_CP"
},
{
"id": "res_id_VDU1_CP4_1",
"resourceHandle": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VDU1_CP4_1",
"vimLevelResourceType": "OS::Neutron::Port"
},
"cpInstanceId": "VDU1_CP4-res_id_VDU1_1",
"cpInstanceType": "VNFC_CP"
},
{
"id": "res_id_VDU1_CP4_2",
"resourceHandle": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VDU1_CP4_2",
"vimLevelResourceType": "OS::Neutron::Port"
},
"cpInstanceId": "VDU1_CP4-res_id_VDU1_2",
"cpInstanceType": "VNFC_CP"
}
]
}
],
"virtualStorageResourceInfo": [
{
"id": "res_id_VirtualStorage_1",
"virtualStorageDescId": "VirtualStorage",
"storageResource": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VirtualStorage_1",
"vimLevelResourceType": "OS::Cinder::Volume"
}
},
{
"id": "res_id_VirtualStorage_2",
"virtualStorageDescId": "VirtualStorage",
"storageResource": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VirtualStorage_2",
"vimLevelResourceType": "OS::Cinder::Volume"
}
}
],
# "vnfcInfo": omitted
}
# example_3 is changed external virtual link ports from example_1.
_inst_info_example_3 = {
# "flavourId", "vnfState", "scaleStatus", "maxScaleLevels" are omitted
# "extCpInfo": omitted
"extVirtualLinkInfo": [
{
"id": "bbf0932a-6142-4ea8-93cd-8059dba594a1",
"resourceHandle": {
"resourceId": "3529d333-dbcc-4d93-9b64-210647712569"
},
"extLinkPorts": [
{
"id": "res_id_VDU1_CP1_1",
"resourceHandle": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VDU1_CP1_1",
"vimLevelResourceType": "OS::Neutron::Port"
},
"cpInstanceId": "cp-res_id_VDU1_CP1_1"
}
],
# "currentVnfExtCpData": omitted
},
{
"id": "2ff742fc-da6d-423a-8fba-6aa6af8da6f2",
"resourceHandle": {
"resourceId": "9113aff7-9ba2-43f4-8b1e-fff80ae001c5"
},
"extLinkPorts": [
{
"id": "res_id_VDU2_CP1_modified",
"resourceHandle": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VDU2_CP1_modified",
"vimLevelResourceType": "OS::Neutron::Port"
},
"cpInstanceId": "cp-res_id_VDU2_CP1"
},
],
# "currentVnfExtCpData": omitted
},
{
"id": "790949df-c7b3-4926-a559-3895412f1dfe",
"resourceHandle": {
"resourceId": "367e5b3b-34dc-47f2-85b8-c39e3272893a"
},
"extLinkPorts": [
{
"id": "res_id_VDU2_CP2",
"resourceHandle": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VDU2_CP2",
"vimLevelResourceType": "OS::Neutron::Port"
},
"cpInstanceId": "cp-res_id_VDU2_CP2"
},
{
"id": "res_id_VDU1_CP2_1",
"resourceHandle": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VDU1_CP2_1",
"vimLevelResourceType": "OS::Neutron::Port"
},
"cpInstanceId": "cp-res_id_VDU1_CP2_1"
}
],
# "currentVnfExtCpData": omitted
},
{ # same as _inst_info_example_1
"id": "cba2e572-2cc5-4d11-af60-728615883206",
"resourceHandle": {
"resourceId": "4529d333-dbcc-4d93-9b64-210647712569"
},
"extLinkPorts": [],
"currentVnfExtCpData": [
{
"cpdId": "VDU1_CP1",
"cpConfig": {
"VDU1_CP1_1": {
"cpProtocolData": [
{
"layerProtocol": "IP_OVER_ETHERNET",
"ipOverEthernet": {
"ipAddresses": [
{
"type": "IPV4",
"numDynamicAddresses": 1
}
]
}
}
]
}
}
},
{
"cpdId": "VDU2_CP1",
"cpConfig": {
"VDU2_CP1_1": {
"cpProtocolData": [
{
"layerProtocol": "IP_OVER_ETHERNET",
"ipOverEthernet": {
"ipAddresses": [
{
"type": "IPV4",
"fixedAddresses": [
"10.10.0.102"
]
}
]
}
}
]
}
}
}
]
},
{ # ip address of VDU2_CP2 is changed
"id": "fc131806-8a4f-43a3-82c0-a38e87fe87bd",
"resourceHandle": {
"resourceId": "5529d333-dbcc-4d93-9b64-210647712569"
},
"extLinkPorts": [],
"currentVnfExtCpData": [
{
"cpdId": "VDU1_CP2",
"cpConfig": {
"VDU1_CP2_1": {
"cpProtocolData": [
{
"layerProtocol": "IP_OVER_ETHERNET",
"ipOverEthernet": {
"ipAddresses": [
{
"type": "IPV4",
"numDynamicAddresses": 1,
}
]
}
}
]
}
}
},
{
"cpdId": "VDU2_CP2",
"cpConfig": {
"VDU2_CP2_1": {
"cpProtocolData": [
{
"layerProtocol": "IP_OVER_ETHERNET",
"ipOverEthernet": {
"ipAddresses": [
{
"type": "IPV4",
"fixedAddresses": [
"10.10.1.103"
],
}
]
}
}
]
}
}
}
]
}
],
# NOTE: vnfcCpInfo of VnfcResourceInfo is changed exactly, but it is
# not looked at update_lcmocc.
"vnfcResourceInfo": _inst_info_example_1["vnfcResourceInfo"],
# other members are same as example_1
"extManagedVirtualLinkInfo":
_inst_info_example_1["extManagedVirtualLinkInfo"],
"vnfVirtualLinkResourceInfo":
_inst_info_example_1["vnfVirtualLinkResourceInfo"],
"virtualStorageResourceInfo":
_inst_info_example_1["virtualStorageResourceInfo"],
# "vnfcInfo": omitted
}
# example_4 is for update_lcmocc test in case of heal. based on example_2.
# * VDU1_1: update server only. VDU1_2: update both server and volume.
# * ports of extManagedVirtualLink are re-created.
# NOTE: combination of the above sentences can not be happened really.
# it is the data for unit test.
_inst_info_example_4 = {
# "flavourId", "vnfState", "scaleStatus", "maxScaleLevels" are omitted
# "extCpInfo": omitted
"extVirtualLinkInfo": _inst_info_example_2["extVirtualLinkInfo"],
# network resource is not changed but ports are re-created.
# this is for check of SOL003 all=True case.
"extManagedVirtualLinkInfo": [
{
"id": "res_id_internalVL1",
"vnfVirtualLinkDescId": "internalVL1",
"networkResource": {
"resourceId": "res_id_internalVL1"
},
"vnfLinkPorts": [
{
"id": "res_id_VDU2_CP3_changed",
"resourceHandle": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VDU2_CP3_changed",
"vimLevelResourceType": "OS::Neutron::Port"
},
"cpInstanceId": "VDU2_CP3-res_id_VDU2",
"cpInstanceType": "VNFC_CP"
},
{
"id": "res_id_VDU1_CP3_1_changed",
"resourceHandle": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VDU1_CP3_1_changed",
"vimLevelResourceType": "OS::Neutron::Port"
},
"cpInstanceId": "VDU1_CP3-res_id_VDU1_1",
"cpInstanceType": "VNFC_CP"
},
{
"id": "res_id_VDU1_CP3_2_changed",
"resourceHandle": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VDU1_CP3_2_changed",
"vimLevelResourceType": "OS::Neutron::Port"
},
"cpInstanceId": "VDU1_CP3-res_id_VDU1_2",
"cpInstanceType": "VNFC_CP"
}
]
}
],
"vnfcResourceInfo": [
{
"id": "res_id_VDU1_2_new",
"vduId": "VDU1",
"computeResource": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VDU1_2_new",
"vimLevelResourceType": "OS::Nova::Server"
},
"storageResourceIds": [
"res_id_VirtualStorage_2_new"
],
"vnfcCpInfo": [
{
"id": "VDU1_CP1-res_id_VDU1_2_new",
"cpdId": "VDU1_CP1",
"vnfExtCpId": "cp-res_id_VDU1_CP1_2_new"
},
{
"id": "VDU1_CP2-res_id_VDU1_2_new",
"cpdId": "VDU1_CP2",
"vnfExtCpId": "cp-res_id_VDU1_CP2_2_new"
},
{
"id": "VDU1_CP3-res_id_VDU1_2_new",
"cpdId": "VDU1_CP3",
"vnfLinkPortId": "res_id_VDU1_CP3_2_new"
},
{
"id": "VDU1_CP4-res_id_VDU1_2_new",
"cpdId": "VDU1_CP4",
"vnfLinkPortId": "res_id_VDU1_CP4_2_new"
},
{
"id": "VDU1_CP5-res_id_VDU1_2_new",
"cpdId": "VDU1_CP5",
"vnfLinkPortId": "res_id_VDU1_CP5_2_new"
}
],
"metadata": {
"image-VDU1-VirtualStorage": "image-VDU1"
# other attributes omitted
}
},
{
"id": "res_id_VDU1_1_new",
"vduId": "VDU1",
"computeResource": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VDU1_1_new",
"vimLevelResourceType": "OS::Nova::Server"
},
"storageResourceIds": [
"res_id_VirtualStorage_1"
],
"vnfcCpInfo": [
{
"id": "VDU1_CP1-res_id_VDU1_1_new",
"cpdId": "VDU1_CP1",
"vnfExtCpId": "cp-res_id_VDU1_CP1_1_new"
},
{
"id": "VDU1_CP2-res_id_VDU1_1_new",
"cpdId": "VDU1_CP2",
"vnfExtCpId": "cp-res_id_VDU1_CP2_1_new"
},
{
"id": "VDU1_CP3-res_id_VDU1_1_new",
"cpdId": "VDU1_CP3",
"vnfLinkPortId": "res_id_VDU1_CP3_1_new"
},
{
"id": "VDU1_CP4-res_id_VDU1_1_new",
"cpdId": "VDU1_CP4",
"vnfLinkPortId": "res_id_VDU1_CP4_1_new"
},
{
"id": "VDU1_CP5-res_id_VDU1_1_new",
"cpdId": "VDU1_CP5",
"vnfLinkPortId": "res_id_VDU1_CP5_1_new"
}
],
"metadata": {
"image-VDU1-VirtualStorage": "image-VDU1"
# other attributes omitted
}
},
{
"id": "res_id_VDU2",
"vduId": "VDU2",
"computeResource": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VDU2",
"vimLevelResourceType": "OS::Nova::Server"
},
"vnfcCpInfo": [
{
"id": "VDU2_CP1-res_id_VDU2",
"cpdId": "VDU2_CP1",
"vnfExtCpId": "cp-res_id_VDU2_CP1"
},
{
"id": "VDU2_CP2-res_id_VDU2",
"cpdId": "VDU2_CP2",
"vnfExtCpId": "cp-res_id_VDU2_CP2"
},
{
"id": "VDU2_CP3-res_id_VDU2",
"cpdId": "VDU2_CP3",
"vnfLinkPortId": "res_id_VDU2_CP3"
},
{
"id": "VDU2_CP4-res_id_VDU2",
"cpdId": "VDU2_CP4",
"vnfLinkPortId": "res_id_VDU2_CP4"
},
{
"id": "VDU2_CP5-res_id_VDU2",
"cpdId": "VDU2_CP5",
"vnfLinkPortId": "res_id_VDU2_CP5"
}
],
"metadata": {
"image-VDU2": "image-VDU2"
# other attributes omitted
}
}
],
"vnfVirtualLinkResourceInfo":
_inst_info_example_2["vnfVirtualLinkResourceInfo"],
"virtualStorageResourceInfo": [
{
"id": "res_id_VirtualStorage_1",
"virtualStorageDescId": "VirtualStorage",
"storageResource": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VirtualStorage_1",
"vimLevelResourceType": "OS::Cinder::Volume"
}
},
{
"id": "res_id_VirtualStorage_2_new",
"virtualStorageDescId": "VirtualStorage",
"storageResource": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VirtualStorage_2_new",
"vimLevelResourceType": "OS::Cinder::Volume"
}
}
],
# "vnfcInfo": omitted
}
# example_5 is update VDU1 and VDU2's info from example_1.
_inst_info_example_5 = {
# "flavourId", "vnfState", "scaleStatus", "maxScaleLevels" are omitted
# "extCpInfo": omitted
"extVirtualLinkInfo": _inst_info_example_1["extVirtualLinkInfo"],
"extManagedVirtualLinkInfo":
_inst_info_example_1["extManagedVirtualLinkInfo"],
"vnfcResourceInfo": [
{
"id": "res_id_VDU1_1_update",
"vduId": "VDU1",
"computeResource": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VDU1_1_update",
"vimLevelResourceType": "OS::Nova::Server"
},
"storageResourceIds": [
"new_res_id_VirtualStorage_1"
],
"vnfcCpInfo": [
{
"id": "VDU1_CP1-res_id_VDU1_1",
"cpdId": "VDU1_CP1",
"vnfExtCpId": "cp-res_id_VDU1_CP1_1"
},
{
"id": "VDU1_CP2-res_id_VDU1_1",
"cpdId": "VDU1_CP2",
"vnfExtCpId": "cp-res_id_VDU1_CP2_1"
},
{
"id": "VDU1_CP3-res_id_VDU1_1",
"cpdId": "VDU1_CP3",
"vnfLinkPortId": "res_id_VDU1_CP3_1"
},
{
"id": "VDU1_CP4-res_id_VDU1_1",
"cpdId": "VDU1_CP4",
"vnfLinkPortId": "res_id_VDU1_CP4_1"
},
{
"id": "VDU1_CP5-res_id_VDU1_1",
"cpdId": "VDU1_CP5",
"vnfLinkPortId": "res_id_VDU1_CP5_1"
}
],
"metadata": {
"image-VDU1-VirtualStorage": "image-VDU1-update"
# other attributes omitted
}
},
{
"id": "res_id_VDU2",
"vduId": "VDU2",
"computeResource": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VDU2",
"vimLevelResourceType": "OS::Nova::Server"
},
"vnfcCpInfo": [
{
"id": "VDU2_CP1-res_id_VDU2",
"cpdId": "VDU2_CP1",
"vnfExtCpId": "cp-res_id_VDU2_CP1"
},
{
"id": "VDU2_CP2-res_id_VDU2",
"cpdId": "VDU2_CP2",
"vnfExtCpId": "cp-res_id_VDU2_CP2"
},
{
"id": "VDU2_CP3-res_id_VDU2",
"cpdId": "VDU2_CP3",
"vnfLinkPortId": "res_id_VDU2_CP3"
},
{
"id": "VDU2_CP4-res_id_VDU2",
"cpdId": "VDU2_CP4",
"vnfLinkPortId": "res_id_VDU2_CP4"
},
{
"id": "VDU2_CP5-res_id_VDU2",
"cpdId": "VDU2_CP5",
"vnfLinkPortId": "res_id_VDU2_CP5"
}
],
"metadata": {
"image-VDU2": "image-VDU2-update"
# other attributes omitted
}
}
],
"vnfVirtualLinkResourceInfo":
_inst_info_example_1["vnfVirtualLinkResourceInfo"],
"virtualStorageResourceInfo": [
{
"id": "new_res_id_VirtualStorage_1",
"virtualStorageDescId": "VirtualStorage",
"storageResource": {
"vimConnectionId": "vim_connection_id",
"resourceId": "new_res_id_VirtualStorage_1",
"vimLevelResourceType": "OS::Cinder::Volume"
}
}
]
}
# expected results
_expected_resource_changes_instantiate = {
"affectedVnfcs": [
{
"id": "res_id_VDU1_1",
"vduId": "VDU1",
"changeType": "ADDED",
"computeResource": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VDU1_1",
"vimLevelResourceType": "OS::Nova::Server"
},
"affectedVnfcCpIds": [
"VDU1_CP1-res_id_VDU1_1",
"VDU1_CP2-res_id_VDU1_1",
"VDU1_CP3-res_id_VDU1_1",
"VDU1_CP4-res_id_VDU1_1",
"VDU1_CP5-res_id_VDU1_1"
],
"addedStorageResourceIds": [
"res_id_VirtualStorage_1"
],
"metadata": {"image-VDU1-VirtualStorage": "image-VDU1"}
},
{
"id": "res_id_VDU2",
"vduId": "VDU2",
"changeType": "ADDED",
"computeResource": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VDU2",
"vimLevelResourceType": "OS::Nova::Server"
},
"affectedVnfcCpIds": [
"VDU2_CP1-res_id_VDU2",
"VDU2_CP2-res_id_VDU2",
"VDU2_CP3-res_id_VDU2",
"VDU2_CP4-res_id_VDU2",
"VDU2_CP5-res_id_VDU2"
],
"metadata": {"image-VDU2": "image-VDU2"}
}
],
"affectedVirtualLinks": [
{
"id": "res_id_internalVL1",
"vnfVirtualLinkDescId": "internalVL1",
"changeType": "LINK_PORT_ADDED",
"networkResource": {
"resourceId": "res_id_internalVL1"
},
"vnfLinkPortIds": [
"res_id_VDU1_CP3_1",
"res_id_VDU2_CP3"
]
},
{
"id": "res_id_internalVL2",
"vnfVirtualLinkDescId": "internalVL2",
"changeType": "ADDED",
"networkResource": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_internalVL2",
"vimLevelResourceType": "OS::Neutron::Net"
},
"vnfLinkPortIds": [
"res_id_VDU1_CP4_1",
"res_id_VDU2_CP4"
]
},
{
"id": "res_id_internalVL3",
"vnfVirtualLinkDescId": "internalVL3",
"changeType": "ADDED",
"networkResource": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_internalVL3",
"vimLevelResourceType": "OS::Neutron::Net"
},
"vnfLinkPortIds": [
"res_id_VDU1_CP5_1",
"res_id_VDU2_CP5"
]
}
],
"affectedExtLinkPorts": [
{
"id": "res_id_VDU1_CP1_1",
"changeType": "ADDED",
"extCpInstanceId": "cp-res_id_VDU1_CP1_1",
"resourceHandle": {
"resourceId": "res_id_VDU1_CP1_1",
"vimConnectionId": "vim_connection_id",
"vimLevelResourceType": "OS::Neutron::Port"
}
},
{
"id": "res_id_VDU1_CP2_1",
"changeType": "ADDED",
"extCpInstanceId": "cp-res_id_VDU1_CP2_1",
"resourceHandle": {
"resourceId": "res_id_VDU1_CP2_1",
"vimConnectionId": "vim_connection_id",
"vimLevelResourceType": "OS::Neutron::Port"
}
},
{
"id": "res_id_VDU2_CP1",
"changeType": "ADDED",
"extCpInstanceId": "cp-res_id_VDU2_CP1",
"resourceHandle": {
"resourceId": "res_id_VDU2_CP1",
"vimConnectionId": "vim_connection_id",
"vimLevelResourceType": "OS::Neutron::Port"
}
},
{
"id": "res_id_VDU2_CP2",
"changeType": "ADDED",
"extCpInstanceId": "cp-res_id_VDU2_CP2",
"resourceHandle": {
"resourceId": "res_id_VDU2_CP2",
"vimConnectionId": "vim_connection_id",
"vimLevelResourceType": "OS::Neutron::Port"
}
},
],
"affectedVirtualStorages": [
{
"id": "res_id_VirtualStorage_1",
"virtualStorageDescId": "VirtualStorage",
"changeType": "ADDED",
"storageResource": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VirtualStorage_1",
"vimLevelResourceType": "OS::Cinder::Volume"
}
}
]
}
_expected_resource_changes_scale_out = {
"affectedVnfcs": [
{
"id": "res_id_VDU1_2",
"vduId": "VDU1",
"changeType": "ADDED",
"computeResource": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VDU1_2",
"vimLevelResourceType": "OS::Nova::Server"
},
"affectedVnfcCpIds": [
"VDU1_CP1-res_id_VDU1_2",
"VDU1_CP2-res_id_VDU1_2",
"VDU1_CP3-res_id_VDU1_2",
"VDU1_CP4-res_id_VDU1_2",
"VDU1_CP5-res_id_VDU1_2"
],
"addedStorageResourceIds": [
"res_id_VirtualStorage_2"
],
"metadata": {"image-VDU1-VirtualStorage": "image-VDU1"}
}
],
"affectedVirtualLinks": [
{
"id": "res_id_internalVL1",
"vnfVirtualLinkDescId": "internalVL1",
"changeType": "LINK_PORT_ADDED",
"networkResource": {
"resourceId": "res_id_internalVL1"
},
"vnfLinkPortIds": [
"res_id_VDU1_CP3_2"
]
},
{
"id": "res_id_internalVL2",
"vnfVirtualLinkDescId": "internalVL2",
"changeType": "LINK_PORT_ADDED",
"networkResource": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_internalVL2",
"vimLevelResourceType": "OS::Neutron::Net"
},
"vnfLinkPortIds": [
"res_id_VDU1_CP4_2"
]
},
{
"id": "res_id_internalVL3",
"vnfVirtualLinkDescId": "internalVL3",
"changeType": "LINK_PORT_ADDED",
"networkResource": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_internalVL3",
"vimLevelResourceType": "OS::Neutron::Net"
},
"vnfLinkPortIds": [
"res_id_VDU1_CP5_2"
]
}
],
"affectedExtLinkPorts": [
{
"id": "res_id_VDU1_CP1_2",
"changeType": "ADDED",
"extCpInstanceId": "cp-res_id_VDU1_CP1_2",
"resourceHandle": {
"resourceId": "res_id_VDU1_CP1_2",
"vimConnectionId": "vim_connection_id",
"vimLevelResourceType": "OS::Neutron::Port"
}
},
{
"id": "res_id_VDU1_CP2_2",
"changeType": "ADDED",
"extCpInstanceId": "cp-res_id_VDU1_CP2_2",
"resourceHandle": {
"resourceId": "res_id_VDU1_CP2_2",
"vimConnectionId": "vim_connection_id",
"vimLevelResourceType": "OS::Neutron::Port"
}
}
],
"affectedVirtualStorages": [
{
"id": "res_id_VirtualStorage_2",
"virtualStorageDescId": "VirtualStorage",
"changeType": "ADDED",
"storageResource": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VirtualStorage_2",
"vimLevelResourceType": "OS::Cinder::Volume"
}
}
]
}
_expected_resource_changes_scale_in = {
"affectedVnfcs": [
{
"id": "res_id_VDU1_2",
"vduId": "VDU1",
"changeType": "REMOVED",
"computeResource": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VDU1_2",
"vimLevelResourceType": "OS::Nova::Server"
},
"affectedVnfcCpIds": [
"VDU1_CP1-res_id_VDU1_2",
"VDU1_CP2-res_id_VDU1_2",
"VDU1_CP3-res_id_VDU1_2",
"VDU1_CP4-res_id_VDU1_2",
"VDU1_CP5-res_id_VDU1_2"
],
"removedStorageResourceIds": [
"res_id_VirtualStorage_2"
],
"metadata": {"image-VDU1-VirtualStorage": "image-VDU1"}
}
],
"affectedVirtualLinks": [
{
"id": "res_id_internalVL1",
"vnfVirtualLinkDescId": "internalVL1",
"changeType": "LINK_PORT_REMOVED",
"networkResource": {
"resourceId": "res_id_internalVL1"
},
"vnfLinkPortIds": [
"res_id_VDU1_CP3_2"
]
},
{
"id": "res_id_internalVL2",
"vnfVirtualLinkDescId": "internalVL2",
"changeType": "LINK_PORT_REMOVED",
"networkResource": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_internalVL2",
"vimLevelResourceType": "OS::Neutron::Net"
},
"vnfLinkPortIds": [
"res_id_VDU1_CP4_2"
]
},
{
"id": "res_id_internalVL3",
"vnfVirtualLinkDescId": "internalVL3",
"changeType": "LINK_PORT_REMOVED",
"networkResource": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_internalVL3",
"vimLevelResourceType": "OS::Neutron::Net"
},
"vnfLinkPortIds": [
"res_id_VDU1_CP5_2"
]
}
],
"affectedExtLinkPorts": [
{
"id": "res_id_VDU1_CP1_2",
"changeType": "REMOVED",
"extCpInstanceId": "cp-res_id_VDU1_CP1_2",
"resourceHandle": {
"resourceId": "res_id_VDU1_CP1_2",
"vimConnectionId": "vim_connection_id",
"vimLevelResourceType": "OS::Neutron::Port"
}
},
{
"id": "res_id_VDU1_CP2_2",
"changeType": "REMOVED",
"extCpInstanceId": "cp-res_id_VDU1_CP2_2",
"resourceHandle": {
"resourceId": "res_id_VDU1_CP2_2",
"vimConnectionId": "vim_connection_id",
"vimLevelResourceType": "OS::Neutron::Port"
}
}
],
"affectedVirtualStorages": [
{
"id": "res_id_VirtualStorage_2",
"virtualStorageDescId": "VirtualStorage",
"changeType": "REMOVED",
"storageResource": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VirtualStorage_2",
"vimLevelResourceType": "OS::Cinder::Volume"
}
}
]
}
_expected_resource_changes_terminate = {
"affectedVnfcs": [
{
"id": "res_id_VDU1_1",
"vduId": "VDU1",
"changeType": "REMOVED",
"computeResource": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VDU1_1",
"vimLevelResourceType": "OS::Nova::Server"
},
"affectedVnfcCpIds": [
"VDU1_CP1-res_id_VDU1_1",
"VDU1_CP2-res_id_VDU1_1",
"VDU1_CP3-res_id_VDU1_1",
"VDU1_CP4-res_id_VDU1_1",
"VDU1_CP5-res_id_VDU1_1"
],
"removedStorageResourceIds": [
"res_id_VirtualStorage_1"
],
"metadata": {"image-VDU1-VirtualStorage": "image-VDU1"}
},
{
"id": "res_id_VDU2",
"vduId": "VDU2",
"changeType": "REMOVED",
"computeResource": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VDU2",
"vimLevelResourceType": "OS::Nova::Server"
},
"affectedVnfcCpIds": [
"VDU2_CP1-res_id_VDU2",
"VDU2_CP2-res_id_VDU2",
"VDU2_CP3-res_id_VDU2",
"VDU2_CP4-res_id_VDU2",
"VDU2_CP5-res_id_VDU2"
],
"metadata": {"image-VDU2": "image-VDU2"}
}
],
"affectedVirtualLinks": [
{
"id": "res_id_internalVL1",
"vnfVirtualLinkDescId": "internalVL1",
"changeType": "LINK_PORT_REMOVED",
"networkResource": {
"resourceId": "res_id_internalVL1"
},
"vnfLinkPortIds": [
"res_id_VDU1_CP3_1",
"res_id_VDU2_CP3"
]
},
{
"id": "res_id_internalVL2",
"vnfVirtualLinkDescId": "internalVL2",
"changeType": "REMOVED",
"networkResource": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_internalVL2",
"vimLevelResourceType": "OS::Neutron::Net"
},
"vnfLinkPortIds": [
"res_id_VDU1_CP4_1",
"res_id_VDU2_CP4"
]
},
{
"id": "res_id_internalVL3",
"vnfVirtualLinkDescId": "internalVL3",
"changeType": "REMOVED",
"networkResource": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_internalVL3",
"vimLevelResourceType": "OS::Neutron::Net"
},
"vnfLinkPortIds": [
"res_id_VDU1_CP5_1",
"res_id_VDU2_CP5"
]
}
],
"affectedExtLinkPorts": [
{
"id": "res_id_VDU1_CP1_1",
"changeType": "REMOVED",
"extCpInstanceId": "cp-res_id_VDU1_CP1_1",
"resourceHandle": {
"resourceId": "res_id_VDU1_CP1_1",
"vimConnectionId": "vim_connection_id",
"vimLevelResourceType": "OS::Neutron::Port"
}
},
{
"id": "res_id_VDU1_CP2_1",
"changeType": "REMOVED",
"extCpInstanceId": "cp-res_id_VDU1_CP2_1",
"resourceHandle": {
"resourceId": "res_id_VDU1_CP2_1",
"vimConnectionId": "vim_connection_id",
"vimLevelResourceType": "OS::Neutron::Port"
}
},
{
"id": "res_id_VDU2_CP1",
"changeType": "REMOVED",
"extCpInstanceId": "cp-res_id_VDU2_CP1",
"resourceHandle": {
"resourceId": "res_id_VDU2_CP1",
"vimConnectionId": "vim_connection_id",
"vimLevelResourceType": "OS::Neutron::Port"
}
},
{
"id": "res_id_VDU2_CP2",
"changeType": "REMOVED",
"extCpInstanceId": "cp-res_id_VDU2_CP2",
"resourceHandle": {
"resourceId": "res_id_VDU2_CP2",
"vimConnectionId": "vim_connection_id",
"vimLevelResourceType": "OS::Neutron::Port"
}
}
],
"affectedVirtualStorages": [
{
"id": "res_id_VirtualStorage_1",
"virtualStorageDescId": "VirtualStorage",
"changeType": "REMOVED",
"storageResource": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VirtualStorage_1",
"vimLevelResourceType": "OS::Cinder::Volume"
}
}
]
}
# update_lcmocc modifies an "Individual VNF instance" example
_modify_inst_saved_example = {
"id": "1098e2dc-d954-484e-b417-e594ff03c55b",
"vnfInstanceName": "instance_name",
"vnfInstanceDescription": "description",
"vnfdId": "a93b7f96-f0e1-49f2-b3f0-75f5b4a94d0f",
"vnfProvider": "provider",
"vnfProductName": "product name",
"vnfSoftwareVersion": "software version",
"vnfdVersion": "vnfd version",
"instantiationState": "INSTANTIATED",
"vnfConfigurableProperties": {
"vnfproperties": "example"
},
"metadata": {
"metadata": "example"
},
"extensions": {
"extensions": "example"
},
"vimConnectionInfo": {
"vim1": {
"vimType": "ETSINFV.OPENSTACK_KEYSTONE.V_3",
"vimId": "ca925611-f020-4b0e-a56d-3fd5c6d5bc3d",
"interfaceInfo": {"endpoint": "http://localhost/identity/v3"},
"accessInfo": {
"username": "nfv_user",
"region": "RegionOne",
"password": "devstack",
"project": "nfv",
"projectDomain": "Default",
"userDomain": "Default"
},
"extra": {
"key": "value"
}
}
},
"instantiatedVnfInfo": {
"vnfcInfo": [
{
"id": "VDU1-vnfc_res_info_id_VDU1",
"vnfcConfigurableProperties": {"key": "value"}
},
{
"id": "VDU2-vnfc_res_info_id_VDU2",
"vnfcConfigurableProperties": {"key": "value"}
}
]
}
}
_modify_inst_example = {
"id": "1098e2dc-d954-484e-b417-e594ff03c55b",
"vnfInstanceName": "instance_name_1",
"vnfdId": "a93b7f96-f0e1-49f2-b3f0-75f5b4a94dff",
"vnfProvider": "provider",
"vnfProductName": "product name",
"vnfSoftwareVersion": "software version_1",
"vnfdVersion": "vnfd version_1",
"metadata": {
"metadata": "example_1"
},
"extensions": {
"extensions": "example"
},
"vimConnectionInfo": {
"vim1": {
"vimType": "ETSINFV.OPENSTACK_KEYSTONE.V_3",
"vimId": "ca925611-f020-4b0e-a56d-3fd5c6d5bc3d",
"interfaceInfo": {"endpoint": "http://localhost/identity/v3"},
"accessInfo": {
"username": "nfv_user",
"region": "RegionOne",
"password": "devstack",
"project": "nfv",
"projectDomain": "Default",
"userDomain": "Default"
},
"extra": {
"key": "value",
"key_add": "value"
}
}
},
"instantiatedVnfInfo": {
"vnfcInfo": [
{
"id": "VDU1-vnfc_res_info_id_VDU1",
"vnfcConfigurableProperties": {
"key": "value_mod",
"key_add": "value"
}
},
{
"id": "VDU2-vnfc_res_info_id_VDU2",
"vnfcConfigurableProperties": {}
}
]
}
}
_expected_changedInfo = {
"vnfInstanceName": "instance_name_1",
"vnfdId": "a93b7f96-f0e1-49f2-b3f0-75f5b4a94dff",
"vnfSoftwareVersion": "software version_1",
"vnfdVersion": "vnfd version_1",
"metadata": {
"metadata": "example_1"
},
"vimConnectionInfo": {
"vim1": {
"vimType": "ETSINFV.OPENSTACK_KEYSTONE.V_3",
"vimId": "ca925611-f020-4b0e-a56d-3fd5c6d5bc3d",
"interfaceInfo": {"endpoint": "http://localhost/identity/v3"},
"accessInfo": {
"username": "nfv_user",
"region": "RegionOne",
"password": "devstack",
"project": "nfv",
"projectDomain": "Default",
"userDomain": "Default"
},
"extra": {
"key": "value",
"key_add": "value"
}
}
},
"vnfcInfoModifications": [
{
"id": "VDU1-vnfc_res_info_id_VDU1",
"vnfcConfigurableProperties": {
"key": "value_mod",
"key_add": "value"
}
},
{
"id": "VDU2-vnfc_res_info_id_VDU2",
"vnfcConfigurableProperties": {}
}
]
}
_expected_resource_changes_change_ext_conn = {
"affectedExtLinkPorts": [
{
"id": "res_id_VDU2_CP1",
"changeType": "REMOVED",
"extCpInstanceId": "cp-res_id_VDU2_CP1",
"resourceHandle": {
"resourceId": "res_id_VDU2_CP1",
"vimConnectionId": "vim_connection_id",
"vimLevelResourceType": "OS::Neutron::Port"
}
},
{
"id": "res_id_VDU2_CP1_modified",
"changeType": "ADDED",
"extCpInstanceId": "cp-res_id_VDU2_CP1",
"resourceHandle": {
"resourceId": "res_id_VDU2_CP1_modified",
"vimConnectionId": "vim_connection_id",
"vimLevelResourceType": "OS::Neutron::Port"
}
}
]
}
_expected_changed_ext_connectivity = [
# sort by id
_inst_info_example_3['extVirtualLinkInfo'][1],
_inst_info_example_3['extVirtualLinkInfo'][0],
_inst_info_example_3['extVirtualLinkInfo'][4]
]
_expected_resource_changes_heal = {
"affectedVnfcs": [
{
"id": "res_id_VDU1_1",
"vduId": "VDU1",
"changeType": "REMOVED",
"computeResource": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VDU1_1",
"vimLevelResourceType": "OS::Nova::Server"
},
"affectedVnfcCpIds": [
"VDU1_CP1-res_id_VDU1_1",
"VDU1_CP2-res_id_VDU1_1",
"VDU1_CP3-res_id_VDU1_1",
"VDU1_CP4-res_id_VDU1_1",
"VDU1_CP5-res_id_VDU1_1"
],
"metadata": {"image-VDU1-VirtualStorage": "image-VDU1"}
},
{
"id": "res_id_VDU1_1_new",
"vduId": "VDU1",
"changeType": "ADDED",
"computeResource": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VDU1_1_new",
"vimLevelResourceType": "OS::Nova::Server"
},
"affectedVnfcCpIds": [
"VDU1_CP1-res_id_VDU1_1_new",
"VDU1_CP2-res_id_VDU1_1_new",
"VDU1_CP3-res_id_VDU1_1_new",
"VDU1_CP4-res_id_VDU1_1_new",
"VDU1_CP5-res_id_VDU1_1_new"
],
"metadata": {"image-VDU1-VirtualStorage": "image-VDU1"}
},
{
"id": "res_id_VDU1_2",
"vduId": "VDU1",
"changeType": "REMOVED",
"computeResource": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VDU1_2",
"vimLevelResourceType": "OS::Nova::Server"
},
"affectedVnfcCpIds": [
"VDU1_CP1-res_id_VDU1_2",
"VDU1_CP2-res_id_VDU1_2",
"VDU1_CP3-res_id_VDU1_2",
"VDU1_CP4-res_id_VDU1_2",
"VDU1_CP5-res_id_VDU1_2"
],
"removedStorageResourceIds": [
"res_id_VirtualStorage_2"
],
"metadata": {"image-VDU1-VirtualStorage": "image-VDU1"}
},
{
"id": "res_id_VDU1_2_new",
"vduId": "VDU1",
"changeType": "ADDED",
"computeResource": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VDU1_2_new",
"vimLevelResourceType": "OS::Nova::Server"
},
"affectedVnfcCpIds": [
"VDU1_CP1-res_id_VDU1_2_new",
"VDU1_CP2-res_id_VDU1_2_new",
"VDU1_CP3-res_id_VDU1_2_new",
"VDU1_CP4-res_id_VDU1_2_new",
"VDU1_CP5-res_id_VDU1_2_new"
],
"addedStorageResourceIds": [
"res_id_VirtualStorage_2_new"
],
"metadata": {"image-VDU1-VirtualStorage": "image-VDU1"}
},
],
"affectedVirtualLinks": [
# NOTE: id is same but expected LINK_PORT_ADDED is first based on the
# code.
{
"id": "res_id_internalVL1",
"vnfVirtualLinkDescId": "internalVL1",
"changeType": "LINK_PORT_ADDED",
"networkResource": {
"resourceId": "res_id_internalVL1"
},
"vnfLinkPortIds": [
"res_id_VDU1_CP3_1_changed",
"res_id_VDU1_CP3_2_changed",
"res_id_VDU2_CP3_changed"
]
},
{
"id": "res_id_internalVL1",
"vnfVirtualLinkDescId": "internalVL1",
"changeType": "LINK_PORT_REMOVED",
"networkResource": {
"resourceId": "res_id_internalVL1"
},
"vnfLinkPortIds": [
"res_id_VDU1_CP3_1",
"res_id_VDU1_CP3_2",
"res_id_VDU2_CP3"
]
}
],
"affectedVirtualStorages": [
{
"id": "res_id_VirtualStorage_2",
"virtualStorageDescId": "VirtualStorage",
"changeType": "REMOVED",
"storageResource": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VirtualStorage_2",
"vimLevelResourceType": "OS::Cinder::Volume"
}
},
{
"id": "res_id_VirtualStorage_2_new",
"virtualStorageDescId": "VirtualStorage",
"changeType": "ADDED",
"storageResource": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VirtualStorage_2_new",
"vimLevelResourceType": "OS::Cinder::Volume"
}
}
]
}
_expected_resource_changes_change_vnfpkg = {
"affectedVnfcs": [
{
"id": "res_id_VDU1_1",
"vduId": "VDU1",
"changeType": "REMOVED",
"computeResource": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VDU1_1",
"vimLevelResourceType": "OS::Nova::Server"
},
"affectedVnfcCpIds": [
"VDU1_CP1-res_id_VDU1_1",
"VDU1_CP2-res_id_VDU1_1",
"VDU1_CP3-res_id_VDU1_1",
"VDU1_CP4-res_id_VDU1_1",
"VDU1_CP5-res_id_VDU1_1"
],
"removedStorageResourceIds": [
"res_id_VirtualStorage_1"
],
"metadata": {"image-VDU1-VirtualStorage": "image-VDU1"}
},
{
"id": "res_id_VDU1_1_update",
"vduId": "VDU1",
"changeType": "ADDED",
"computeResource": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VDU1_1_update",
"vimLevelResourceType": "OS::Nova::Server"
},
"affectedVnfcCpIds": [
"VDU1_CP1-res_id_VDU1_1",
"VDU1_CP2-res_id_VDU1_1",
"VDU1_CP3-res_id_VDU1_1",
"VDU1_CP4-res_id_VDU1_1",
"VDU1_CP5-res_id_VDU1_1"
],
"addedStorageResourceIds": [
"new_res_id_VirtualStorage_1"
],
"metadata": {"image-VDU1-VirtualStorage": "image-VDU1-update"}
},
{
"id": "res_id_VDU2",
"vduId": "VDU2",
"changeType": "MODIFIED",
"computeResource": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VDU2",
"vimLevelResourceType": "OS::Nova::Server"
},
"affectedVnfcCpIds": [
"VDU2_CP1-res_id_VDU2",
"VDU2_CP2-res_id_VDU2",
"VDU2_CP3-res_id_VDU2",
"VDU2_CP4-res_id_VDU2",
"VDU2_CP5-res_id_VDU2"
],
"metadata": {"image-VDU2": "image-VDU2-update"}
}
],
"affectedVirtualStorages": [
{
"id": "new_res_id_VirtualStorage_1",
"virtualStorageDescId": "VirtualStorage",
"changeType": "ADDED",
"storageResource": {
"vimConnectionId": "vim_connection_id",
"resourceId": "new_res_id_VirtualStorage_1",
"vimLevelResourceType": "OS::Cinder::Volume"
}
},
{
"id": "res_id_VirtualStorage_1",
"virtualStorageDescId": "VirtualStorage",
"changeType": "REMOVED",
"storageResource": {
"vimConnectionId": "vim_connection_id",
"resourceId": "res_id_VirtualStorage_1",
"vimLevelResourceType": "OS::Cinder::Volume"
}
}
]
}
# lcmocc_info_example
_lcmocc_modify_value = {
'id': 'test-1',
'vnfInstanceId': 'instance-1',
'operation': 'MODIFY_INFO',
'operationState': 'PROCESSING',
'isAutomaticInvocation': False,
'startTime': '2021-01-22 13:41:03+00:00'
}
_lcmocc_inst_value = {
'id': 'test-2',
'vnfInstanceId': 'instance-2',
'operation': 'INSTANTIATE',
'operationState': 'COMPLETED',
'isAutomaticInvocation': False,
'startTime': '2021-01-23 13:41:03+00:00',
'resourceChanges': _expected_resource_changes_instantiate,
'changedInfo': _expected_changedInfo
}
_lcmocc_inst_error_value = {
'id': 'test-3',
'vnfInstanceId': 'instance-3',
'operation': 'INSTANTIATE',
'operationState': 'FAILED_TEMP',
'isAutomaticInvocation': False,
'startTime': '2021-01-23 13:41:03+00:00',
'error': {
'status': 1,
'detail': 'error_detail'
}
}
class TestLcmOpOccUtils(base.BaseTestCase):
def setUp(self):
super(TestLcmOpOccUtils, self).setUp()
objects.register_all()
self.context = context.get_admin_context()
def _sort_resource_changes(self, result):
# sort lists before compare with an expected_result since
# order of list items is unpredictable.
# note that an expected_result is already sorted.
def _get_key(obj):
return obj['id']
if 'affectedVnfcs' in result:
result['affectedVnfcs'].sort(key=_get_key)
for vnfc in result['affectedVnfcs']:
if 'affectedVnfcCpIds' in vnfc:
vnfc['affectedVnfcCpIds'].sort()
if 'removedStorageResourceIds' in vnfc:
vnfc['removedStorageResourceIds'].sort()
if 'affectedVirtualLinks' in result:
result['affectedVirtualLinks'].sort(key=_get_key)
for vl in result['affectedVirtualLinks']:
if 'vnfLinkPortIds' in vl:
vl['vnfLinkPortIds'].sort()
if 'affectedExtLinkPorts' in result:
result['affectedExtLinkPorts'].sort(key=_get_key)
if 'affectedVirtualStorages' in result:
result['affectedVirtualStorages'].sort(key=_get_key)
return result
def test_update_lcmocc_instantiate(self):
# prepare
inst_saved = objects.VnfInstanceV2()
inst = objects.VnfInstanceV2()
inst.instantiatedVnfInfo = (
objects.VnfInstanceV2_InstantiatedVnfInfo.from_dict(
_inst_info_example_1))
lcmocc = objects.VnfLcmOpOccV2(
operation=fields.LcmOperationType.INSTANTIATE)
# execute update_lcmocc
lcmocc_utils.update_lcmocc(lcmocc, inst_saved, inst)
# check resourceChanges
lcmocc = lcmocc.to_dict()
self.assertEqual(
_expected_resource_changes_instantiate,
self._sort_resource_changes(lcmocc['resourceChanges']))
def test_update_lcmocc_scale_out(self):
# prepare
inst_saved = objects.VnfInstanceV2()
inst_saved.instantiatedVnfInfo = (
objects.VnfInstanceV2_InstantiatedVnfInfo.from_dict(
_inst_info_example_1))
inst = objects.VnfInstanceV2()
inst.instantiatedVnfInfo = (
objects.VnfInstanceV2_InstantiatedVnfInfo.from_dict(
_inst_info_example_2))
lcmocc = objects.VnfLcmOpOccV2(
operation=fields.LcmOperationType.SCALE)
# execute update_lcmocc
lcmocc_utils.update_lcmocc(lcmocc, inst_saved, inst)
# check resourceChanges
lcmocc = lcmocc.to_dict()
self.assertEqual(
_expected_resource_changes_scale_out,
self._sort_resource_changes(lcmocc['resourceChanges']))
def test_update_lcmocc_scale_in(self):
# prepare
inst_saved = objects.VnfInstanceV2()
inst_saved.instantiatedVnfInfo = (
objects.VnfInstanceV2_InstantiatedVnfInfo.from_dict(
_inst_info_example_2))
inst = objects.VnfInstanceV2()
inst.instantiatedVnfInfo = (
objects.VnfInstanceV2_InstantiatedVnfInfo.from_dict(
_inst_info_example_1))
lcmocc = objects.VnfLcmOpOccV2(
operation=fields.LcmOperationType.SCALE)
# execute update_lcmocc
lcmocc_utils.update_lcmocc(lcmocc, inst_saved, inst)
# check resourceChanges
lcmocc = lcmocc.to_dict()
self.assertEqual(_expected_resource_changes_scale_in,
self._sort_resource_changes(lcmocc['resourceChanges']))
def test_update_lcmocc_terminate(self):
# prepare
inst_saved = objects.VnfInstanceV2()
inst_saved.instantiatedVnfInfo = (
objects.VnfInstanceV2_InstantiatedVnfInfo.from_dict(
_inst_info_example_1))
inst = objects.VnfInstanceV2()
inst.instantiatedVnfInfo = objects.VnfInstanceV2_InstantiatedVnfInfo(
flavourId="SAMPLE_VNFD_ID",
vnfState='STOPPED')
lcmocc = objects.VnfLcmOpOccV2(
operation=fields.LcmOperationType.TERMINATE)
# execute update_lcmocc
lcmocc_utils.update_lcmocc(lcmocc, inst_saved, inst)
# check resourceChanges
lcmocc = lcmocc.to_dict()
self.assertEqual(_expected_resource_changes_terminate,
self._sort_resource_changes(lcmocc['resourceChanges']))
def test_update_lcmocc_modify(self):
# prepare
inst_saved = objects.VnfInstanceV2.from_dict(
_modify_inst_saved_example)
inst = objects.VnfInstanceV2.from_dict(_modify_inst_example)
lcmocc = objects.VnfLcmOpOccV2(
operation=fields.LcmOperationType.MODIFY_INFO)
# execute update_lcmocc
lcmocc_utils.update_lcmocc(lcmocc, inst_saved, inst)
# check changedInfo
lcmocc = lcmocc.to_dict()
self.assertEqual(_expected_changedInfo, lcmocc['changedInfo'])
def test_update_lcmocc_change_ext_conn(self):
# prepare
inst_saved = objects.VnfInstanceV2()
inst_saved.instantiatedVnfInfo = (
objects.VnfInstanceV2_InstantiatedVnfInfo.from_dict(
_inst_info_example_1))
inst = objects.VnfInstanceV2()
inst.instantiatedVnfInfo = (
objects.VnfInstanceV2_InstantiatedVnfInfo.from_dict(
_inst_info_example_3))
lcmocc = objects.VnfLcmOpOccV2(
operation=fields.LcmOperationType.CHANGE_EXT_CONN)
# execute update_lcmocc
lcmocc_utils.update_lcmocc(lcmocc, inst_saved, inst)
# check resourceChanges
lcmocc = lcmocc.to_dict()
self.assertEqual(
_expected_resource_changes_change_ext_conn,
self._sort_resource_changes(lcmocc['resourceChanges']))
self.assertEqual(
_expected_changed_ext_connectivity,
sorted(lcmocc['changedExtConnectivity'], key=lambda x: x['id']))
def test_update_lcmocc_heal(self):
# NOTE: from the view point of update_lcmocc unit test coverage,
# it is enough to check server and/or volume update.
# prepare
inst_saved = objects.VnfInstanceV2()
inst_saved.instantiatedVnfInfo = (
objects.VnfInstanceV2_InstantiatedVnfInfo.from_dict(
_inst_info_example_2))
inst = objects.VnfInstanceV2()
inst.instantiatedVnfInfo = (
objects.VnfInstanceV2_InstantiatedVnfInfo.from_dict(
_inst_info_example_4))
lcmocc = objects.VnfLcmOpOccV2(
operation=fields.LcmOperationType.HEAL)
# execute update_lcmocc
lcmocc_utils.update_lcmocc(lcmocc, inst_saved, inst)
# check resourceChanges
lcmocc = lcmocc.to_dict()
self.assertEqual(
_expected_resource_changes_heal,
self._sort_resource_changes(lcmocc['resourceChanges']))
def test_update_lcmocc_change_vnfpkg(self):
# prepare
inst_saved = objects.VnfInstanceV2()
inst_saved.instantiatedVnfInfo = (
objects.VnfInstanceV2_InstantiatedVnfInfo.from_dict(
_inst_info_example_1))
inst_saved.vnfdId = 'old_vnfd_id'
inst = objects.VnfInstanceV2()
inst.instantiatedVnfInfo = (
objects.VnfInstanceV2_InstantiatedVnfInfo.from_dict(
_inst_info_example_5))
lcmocc = objects.VnfLcmOpOccV2(operation='CHANGE_VNFPKG')
# execute update_lcmocc
lcmocc_utils.update_lcmocc(lcmocc, inst_saved, inst)
# check resourceChanges
lcmocc = lcmocc.to_dict()
self.assertEqual(
_expected_resource_changes_change_vnfpkg,
self._sort_resource_changes(lcmocc['resourceChanges']))
@mock.patch.object(objects.base.TackerPersistentObject, 'get_by_id')
def test_get_lcmocc(self, mock_lcmocc):
mock_lcmocc.return_value = objects.VnfLcmOpOccV2(
operation='INSTANTIATE')
expected_result = objects.VnfLcmOpOccV2(
operation='INSTANTIATE')
result = lcmocc_utils.get_lcmocc(context, 'lcmocc_id')
self.assertEqual(expected_result.operation, result.operation)
@mock.patch.object(objects.base.TackerPersistentObject, 'get_by_id')
def test_get_lcmocc_not_exist_lcmocc_id(self, mock_lcmocc):
mock_lcmocc.return_value = None
lcmocc_id = 'f5aa2eb2-6805-439d-b93d-bb0db8d96e3b'
ex = self.assertRaises(
sol_ex.VnfLcmOpOccNotFound,
lcmocc_utils.get_lcmocc, context, lcmocc_id)
expected_detail = f'VnfLcmOpOcc {lcmocc_id} not found.'
self.assertEqual(expected_detail, ex.detail)
@mock.patch.object(objects.base.TackerPersistentObject, 'get_all')
def test_get_lcmocc_all(self, mock_lcmocc):
mock_lcmocc.return_value = [objects.VnfLcmOpOccV2(
operation='INSTANTIATE')]
expected_result = [objects.VnfLcmOpOccV2(
operation='INSTANTIATE')]
result = lcmocc_utils.get_lcmocc_all(context)
self.assertEqual(expected_result[0].operation, result[0].operation)
def test_make_lcmocc_links(self):
lcmocc = objects.VnfLcmOpOccV2(
id='test-1', vnfInstanceId='instance-1', operation='INSTANTIATE')
endpoint = 'http://127.0.0.1:9890'
expected_result = objects.VnfLcmOpOccV2_Links()
expected_result.self = objects.Link(
href=f'{endpoint}/vnflcm/v2/vnf_lcm_op_occs/{lcmocc.id}')
expected_result.vnfInstance = objects.Link(
href=f'{endpoint}/vnflcm/v2/vnf_instances/{lcmocc.vnfInstanceId}')
expected_result.retry = objects.Link(
href=f'{endpoint}/vnflcm/v2/vnf_lcm_op_occs/{lcmocc.id}/retry')
expected_result.rollback = objects.Link(
href=f'{endpoint}/vnflcm/v2/vnf_lcm_op_occs/{lcmocc.id}/rollback')
expected_result.fail = objects.Link(
href=f'{endpoint}/vnflcm/v2/vnf_lcm_op_occs/{lcmocc.id}/fail')
result = lcmocc_utils.make_lcmocc_links(lcmocc, endpoint)
self.assertEqual(expected_result.self.href, result.self.href)
self.assertEqual(expected_result.vnfInstance.href,
result.vnfInstance.href)
self.assertEqual(expected_result.retry.href, result.retry.href)
self.assertEqual(expected_result.rollback.href, result.rollback.href)
self.assertEqual(expected_result.fail.href, result.fail.href)
def test_make_lcmocc_notif_data(self):
subsc_short = objects.LccnSubscriptionV2(
id='sub-1', verbosity='SHORT')
subsc_full = objects.LccnSubscriptionV2(
id='sub-1', verbosity='FULL')
lcmocc_modify = objects.VnfLcmOpOccV2.from_dict(_lcmocc_modify_value)
lcmocc_inst = objects.VnfLcmOpOccV2.from_dict(_lcmocc_inst_value)
lcmocc_inst_error = objects.VnfLcmOpOccV2.from_dict(
_lcmocc_inst_error_value)
endpoint = 'http://127.0.0.1:9890'
# execute modify lcmocc
modify_result = lcmocc_utils.make_lcmocc_notif_data(
subsc_short, lcmocc_modify, endpoint)
# execute inst lcmocc
inst_result = lcmocc_utils.make_lcmocc_notif_data(
subsc_full, lcmocc_inst, endpoint)
inst_result_error = lcmocc_utils.make_lcmocc_notif_data(
subsc_short, lcmocc_inst_error, endpoint)
self.assertEqual('START', modify_result.notificationStatus)
self.assertIsNotNone(inst_result.affectedVnfcs)
self.assertIsNotNone(inst_result.changedInfo)
self.assertNotIn('error', inst_result)
self.assertEqual('error_detail', inst_result_error.error.detail)
@mock.patch.object(objects.base.TackerPersistentObject, 'get_by_filter')
def test_get_inst_lcmocc(self, mock_value):
inst = objects.VnfInstanceV2(id='test-instance')
value_1 = {
'id': 'test-1',
'vnfInstanceId': 'instance-1',
'operation': 'INSTANTIATE',
'operationState': 'COMPLETED',
'startTime': '2021-01-22 13:41:03+00:00'
}
value_2 = {
'id': 'test-2',
'vnfInstanceId': 'instance-2',
'operation': 'INSTANTIATE',
'operationState': 'COMPLETED',
'startTime': '2021-01-23 13:41:03+00:00'
}
mock_value.return_value = [
objects.VnfLcmOpOccV2.from_dict(value_1),
objects.VnfLcmOpOccV2.from_dict(value_2)
]
expected_result = objects.VnfLcmOpOccV2.from_dict(value_2)
result = lcmocc_utils.get_inst_lcmocc(context, inst)
self.assertEqual(expected_result.id, result.id)
@mock.patch.object(objects.base.TackerPersistentObject, 'get_by_filter')
@mock.patch.object(objects.base.TackerPersistentObject, 'get_by_id')
def test_get_grant_req_and_grant(self, mock_grant, mock_grant_reqs):
lcmocc_modify = objects.VnfLcmOpOccV2.from_dict(_lcmocc_modify_value)
lcmocc_inst = objects.VnfLcmOpOccV2.from_dict(_lcmocc_inst_value)
# execute modify lcmocc
modify_grant_req, modify_grant = lcmocc_utils.get_grant_req_and_grant(
context, lcmocc_modify)
self.assertIsNone(modify_grant_req)
self.assertIsNone(modify_grant)
# execute inst lcmocc
lcmocc_inst.grantId = 'grant-1'
mock_grant_reqs.return_value = [objects.GrantRequestV1(
vnfInstanceId='inst-1', vnfLcmOpOccId='lcmocc-1',
vnfdId='vnfd-1', operation='INSTANTIATE',
isAutomaticInvocation=False)]
mock_grant.return_value = objects.GrantV1(
id='grant-1', vnfInstanceId='inst-1', vnfLcmOpOccId='lcmocc-1')
inst_grant_req, inst_grant = lcmocc_utils.get_grant_req_and_grant(
context, lcmocc_inst)
self.assertEqual('inst-1', inst_grant_req.vnfInstanceId)
self.assertEqual('grant-1', inst_grant.id)
@mock.patch.object(objects.base.TackerPersistentObject,
'get_by_filter')
@mock.patch.object(objects.base.TackerPersistentObject, 'get_by_id')
def test_get_grant_req_and_grant_error(self, mock_grant_reqs, mock_grant):
lcmocc_modify = objects.VnfLcmOpOccV2.from_dict(_lcmocc_modify_value)
lcmocc_inst = objects.VnfLcmOpOccV2.from_dict(_lcmocc_inst_value)
# execute modify lcmocc
modify_grant_req, modify_grant = lcmocc_utils.get_grant_req_and_grant(
context, lcmocc_modify)
self.assertIsNone(modify_grant_req)
self.assertIsNone(modify_grant)
# execute inst lcmocc
lcmocc_inst.grantId = 'grant-1'
mock_grant_reqs.return_value = None
mock_grant.return_value = objects.GrantV1(
id='grant-1', vnfInstanceId='inst-1', vnfLcmOpOccId='lcmocc-1')
self.assertRaises(
sol_ex.GrantRequestOrGrantNotFound,
lcmocc_utils.get_grant_req_and_grant, context, lcmocc_inst)