Compliance Test Code Improvement

We provide improvements to the test code of Compliance Test:

* Improved getting of OpOcc ID for Scale Test cases causing different
OpOcc ID to be returned.
* Returned copy.deepcopy() function for INSTANTIATION_BODY so that
the original copy of INSTANTIATION_BODY is retained in the next
test cases.
* Resolved the issue of random race condition occurrences when
getting OpOcc ID.

Change-Id: I9a99aa5a720360cbc765322033ecb256ed983fb3
This commit is contained in:
Aldinson Esto 2022-04-08 14:23:46 +09:00 committed by Aldinson C. Esto
parent 3156895dee
commit c869af7df7
3 changed files with 150 additions and 55 deletions

View File

@ -13,6 +13,7 @@
# License for the specific language governing permissions and limitations
# under the License.
import copy
import json
import os
import time
@ -36,6 +37,7 @@ VNFINS_GET_IND_LCM_OP_OCCS_PATH = '/vnflcm/v1/vnf_lcm_op_occs/%s'
VNFINS_CREATE_SUBSC_PATH = '/vnflcm/v1/subscriptions'
VNFINS_DEL_SUBSC_PATH = '/vnflcm/v1/subscriptions/%s'
VNFINS_SCALE_PATH = '/vnflcm/v1/vnf_instances/%s/scale'
VNFINS_ROLLBACK_PATH = '/vnflcm/v1/vnf_lcm_op_occs/%s/rollback'
INSTANTIATION_BODY = {
'flavourId': 'simple',
@ -251,7 +253,8 @@ class BaseComplTest(base.BaseTackerTest):
@classmethod
def _instantiate_vnf_instance(cls, vnfid):
body = INSTANTIATION_BODY
body = copy.deepcopy(INSTANTIATION_BODY)
body['flavourId'] = 'simple'
body['extVirtualLinks'][0]['resourceId'] = cls.net0_id
body['vimConnectionInfo'][0]['id'] = uuidutils.generate_uuid()
body['vimConnectionInfo'][0]['vimId'] = cls.vimid
@ -280,9 +283,27 @@ class BaseComplTest(base.BaseTackerTest):
return resbody[0]['id']
@classmethod
def _get_vnf_instance_id_for_scalein(cls):
res, resbody = cls.http_client.do_request(VNFINSS_PATH, 'GET')
vnf_id = None
for entry in resbody:
vnf_dict = entry
if (vnf_dict['instantiationState'] == 'INSTANTIATED'):
vnf_id = vnf_dict['id']
lcm_id = None
scale_type = 'SCALE_OUT'
lcm_id = cls._get_lcm_op_occs_id_for_scale(vnf_id, scale_type,
lcm='SCALE')
if (lcm_id is not None):
break
return vnf_id
@classmethod
def _instantiate_vnf_instance_for_scale(cls, vnfid):
body = INSTANTIATION_BODY
body = copy.deepcopy(INSTANTIATION_BODY)
body['flavourId'] = 'default'
body['extVirtualLinks'][0]['resourceId'] = cls.net0_id
body['vimConnectionInfo'][0]['id'] = uuidutils.generate_uuid()
@ -299,7 +320,7 @@ class BaseComplTest(base.BaseTackerTest):
@classmethod
def _instantiate_error_vnf_instance(cls, vnfid):
body = INSTANTIATION_BODY
body = copy.deepcopy(INSTANTIATION_BODY)
body['flavorId'] = 'sample'
body['extVirtualLinks'][0]['resourceId'] = cls.net0_id
body['vimConnectionInfo'][0]['id'] = uuidutils.generate_uuid()
@ -312,7 +333,9 @@ class BaseComplTest(base.BaseTackerTest):
cls.http_client.do_request(VNFINS_INST_PATH % vnfid,
'POST', body=jsonutils.dumps(body))
cls._wait_vnf_status(vnfid, 'instantiationState', 'INSTANTIATED')
# cls._wait_vnf_status(vnfid, 'instantiationState', 'INSTANTIATED')
lcmid = cls._get_lcm_op_occs_id(vnfid, lcm='INSTANTIATE')
cls._wait_lcm_status(lcmid, value='FAILED_TEMP')
@classmethod
def _get_lcm_op_occs_id(cls, vnfid, lcm='INSTANTIATE'):
@ -329,6 +352,25 @@ class BaseComplTest(base.BaseTackerTest):
return lcmid
@classmethod
def _get_lcm_op_occs_id_for_scale(cls, vnfid, scale_type, lcm='SCALE'):
res, resbody = cls.http_client.do_request(
VNFINS_GET_LCM_OP_OCCS_PATH, 'GET')
lcmid = None
for entry in resbody:
lcm_dict = entry
if ((lcm_dict['vnfInstanceId'] == vnfid) and
(lcm_dict['operation'] == lcm)):
lcmid = lcm_dict['id']
resp, body = cls.http_client.do_request(
VNFINS_GET_IND_LCM_OP_OCCS_PATH % lcmid, 'GET')
param = json.loads(body['operationParams'])
if ((param['type'] == scale_type)):
break
return lcmid
@classmethod
def _create_subscription(cls, vnfdid):
body = SUBSCRIPTION_BODY
@ -360,13 +402,15 @@ class BaseComplTest(base.BaseTackerTest):
VNFINS_SCALE_PATH % vnfid,
'POST', body=jsonutils.dumps(body))
print("scaleout called")
print(res_scale)
print(resbody)
lcmid = cls._get_lcm_op_occs_id(vnfid, lcm='SCALE')
res = cls._wait_lcm_status(lcmid)
return res, lcmid
@classmethod
def _rollback_instance(cls, lcmid):
cls.http_client.do_request(VNFINS_ROLLBACK_PATH % lcmid, 'POST')
cls._wait_lcm_status(lcmid, value='ROLLED_BACK')
@classmethod
def _wait_lcm_status(cls, lcmid, value='COMPLETED', expire=600):
start_time = int(time.time())

View File

@ -13,6 +13,9 @@
# License for the specific language governing permissions and limitations
# under the License.
import copy
import time
from oslo_serialization import jsonutils
from oslo_utils import uuidutils
from tacker.tests.compliance import base as rootbase
@ -123,6 +126,8 @@ class IndividualVNFInstanceTest(BaseVNFLifecycleManagementTest):
def test_modify_information_about_individual_vnf_instance(self):
# Pre-conditions: none
res, vnf = self._create_vnf_instance(self.vnfpkginfos[0].vnfdid)
self._instantiate_vnf_instance(vnf['id'])
vnfid = vnf['id']
variables = ['vnfInstanceId:' + vnfid]
@ -135,8 +140,15 @@ class IndividualVNFInstanceTest(BaseVNFLifecycleManagementTest):
body=jsonutils.dumps(body))
# Post-Conditions:
self._delete_vnf_instance(vnfid)
lcmid = None
while(lcmid is None):
lcmid = self._get_lcm_op_occs_id(vnf['id'], lcm='MODIFY_INFO')
time.sleep(5)
res = self._wait_lcm_status(lcmid)
self._terminate_vnf_instance(vnf['id'])
self._delete_vnf_instance(vnf['id'])
self.assertEqual(0, res)
self.assertEqual(0, rc)
@ -153,7 +165,7 @@ class InstantiateVNFTaskTest(BaseVNFLifecycleManagementTest):
variables = ['vnfInstanceId:' + vnf['id']]
body = rootbase.INSTANTIATION_BODY
body = copy.deepcopy(rootbase.INSTANTIATION_BODY)
body['extVirtualLinks'][0]['resourceId'] = self.net0_id
body['vimConnectionInfo'][0]['id'] = uuidutils.generate_uuid()
@ -216,41 +228,47 @@ class ScaleVNFTaskTest(BaseVNFLifecycleManagementScaleTest):
variables = ['vnfInstanceId:' + vnf['id']]
body = rootbase.SCALE_BODY
body['type'] = 'SCALE_OUT'
scale_type = 'SCALE_OUT'
rc, output = self._run('POST Scale a vnfInstance',
variables=variables,
body=jsonutils.dumps(body),
filename='scaleVnfRequest.json')
res = self._get_responses_from_output(output)
# Post-Conditions:
lcmid = self._get_lcm_op_occs_id(vnf['id'], lcm='SCALE')
lcmid = None
while(lcmid is None):
lcmid = self._get_lcm_op_occs_id_for_scale(vnf['id'], scale_type,
lcm='SCALE')
time.sleep(5)
res = self._wait_lcm_status(lcmid)
self.assertEqual(0, res)
self.assertEqual(0, rc)
def test_post_reduce_by_scalein(self):
vnf_id = self._get_vnf_instance_id()
vnf_id = self._get_vnf_instance_id_for_scalein()
body = rootbase.SCALE_BODY
body['type'] = 'SCALE_IN'
scale_type = 'SCALE_IN'
rc, output = self._run('POST Scale a vnfInstance',
variables=['vnfInstanceId:' + vnf_id],
body=jsonutils.dumps(body),
filename='scaleVnfRequest.json')
res = self._get_responses_from_output(output)
# Post-Conditions:
lcmid = self._get_lcm_op_occs_id(vnf_id, lcm='SCALE')
lcmid = None
while(lcmid is None):
lcmid = self._get_lcm_op_occs_id_for_scale(vnf_id, scale_type,
lcm='SCALE')
time.sleep(5)
res = self._wait_lcm_status(lcmid)
self.assertEqual(0, res)
self._terminate_vnf_instance(vnf_id)
self._delete_vnf_instance(vnf_id)
self.assertEqual(0, res)
self.assertEqual(0, rc)
@ -339,12 +357,15 @@ class HealVNFTaskTest(BaseVNFLifecycleManagementTest):
filename=' healVnfRequest.json')
# Post-Conditions:
lcmid = self._get_lcm_op_occs_id(vnf['id'], lcm='HEAL')
lcmid = None
while(lcmid is None):
lcmid = self._get_lcm_op_occs_id(vnf['id'], lcm='HEAL')
time.sleep(5)
res = self._wait_lcm_status(lcmid)
self.assertEqual(0, res)
self._terminate_vnf_instance(vnf['id'])
self._delete_vnf_instance(vnf['id'])
self.assertEqual(0, res)
self.assertEqual(0, rc)
@ -359,7 +380,11 @@ class RetryOperationTaskTest(BaseVNFLifecycleManagementTest):
# Pre-conditions: none
res, vnf = self._create_vnf_instance(self.vnfpkginfos[0].vnfdid)
self._instantiate_error_vnf_instance(vnf['id'])
lcmid = self._get_lcm_op_occs_id(vnf['id'])
lcmid = None
while(lcmid is None):
lcmid = self._get_lcm_op_occs_id(vnf['id'])
time.sleep(5)
variables = ['vnfLcmOpOccId:' + lcmid]
@ -368,10 +393,9 @@ class RetryOperationTaskTest(BaseVNFLifecycleManagementTest):
# Post-Conditions:
res = self._wait_lcm_status(lcmid, value='FAILED_TEMP')
self.assertEqual(0, res)
self._terminate_vnf_instance(vnf['id'])
self._rollback_instance(lcmid)
self._delete_vnf_instance(vnf['id'])
self.assertEqual(0, res)
self.assertEqual(1, rc)
@ -404,10 +428,13 @@ class ChangeExternalVNFConnectivityTaskTest(BaseVNFLifecycleManagementTest):
filename='changeExtVnfConnectivityRequest.json')
# Post-Conditions:
lcmid = self._get_lcm_op_occs_id(vnf['id'], lcm='CHANGE_EXT_CONN')
lcmid = None
while(lcmid is None):
lcmid = self._get_lcm_op_occs_id(vnf['id'], lcm='CHANGE_EXT_CONN')
time.sleep(5)
res = self._wait_lcm_status(lcmid)
self.assertEqual(0, res)
self._terminate_vnf_instance(vnf['id'])
self._delete_vnf_instance(vnf['id'])
self.assertEqual(0, res)
self.assertEqual(0, rc)

View File

@ -13,6 +13,9 @@
# License for the specific language governing permissions and limitations
# under the License.
import copy
import time
from oslo_serialization import jsonutils
from oslo_utils import uuidutils
from tacker.tests.compliance import base as rootbase
@ -123,6 +126,8 @@ class IndividualVNFInstanceTest(BaseVNFLifecycleManagementTest):
def test_modify_information_about_individual_vnf_instance(self):
# Pre-conditions: none
res, vnf = self._create_vnf_instance(self.vnfpkginfos[0].vnfdid)
self._instantiate_vnf_instance(vnf['id'])
vnfid = vnf['id']
variables = ['vnfInstanceId:' + vnfid]
@ -135,8 +140,15 @@ class IndividualVNFInstanceTest(BaseVNFLifecycleManagementTest):
body=jsonutils.dumps(body))
# Post-Conditions:
self._delete_vnf_instance(vnfid)
lcmid = None
while(lcmid is None):
lcmid = self._get_lcm_op_occs_id(vnf['id'], lcm='MODIFY_INFO')
time.sleep(5)
res = self._wait_lcm_status(lcmid)
self._terminate_vnf_instance(vnf['id'])
self._delete_vnf_instance(vnf['id'])
self.assertEqual(0, res)
self.assertEqual(0, rc)
@ -153,7 +165,7 @@ class InstantiateVNFTaskTest(BaseVNFLifecycleManagementTest):
variables = ['vnfInstanceId:' + vnf['id']]
body = rootbase.INSTANTIATION_BODY
body = copy.deepcopy(rootbase.INSTANTIATION_BODY)
body['extVirtualLinks'][0]['resourceId'] = self.net0_id
body['vimConnectionInfo'][0]['id'] = uuidutils.generate_uuid()
@ -302,7 +314,6 @@ class IndividualSubscriptionTest(BaseVNFLifecycleManagementTest):
class ScaleVNFTaskTest(BaseVNFLifecycleManagementScaleTest):
@classmethod
def setUpClass(cls):
cls.resource = 'ScaleVNFTask'
@ -318,41 +329,47 @@ class ScaleVNFTaskTest(BaseVNFLifecycleManagementScaleTest):
variables = ['vnfInstanceId:' + vnf['id']]
body = rootbase.SCALE_BODY
body['type'] = 'SCALE_OUT'
scale_type = 'SCALE_OUT'
rc, output = self._run('POST Scale a vnfInstance',
variables=variables,
body=jsonutils.dumps(body),
filename='scaleVnfRequest.json')
res = self._get_responses_from_output(output)
# Post-Conditions:
lcmid = self._get_lcm_op_occs_id(vnf['id'], lcm='SCALE')
lcmid = None
while(lcmid is None):
lcmid = self._get_lcm_op_occs_id_for_scale(vnf['id'], scale_type,
lcm='SCALE')
time.sleep(5)
res = self._wait_lcm_status(lcmid)
self.assertEqual(0, res)
self.assertEqual(0, rc)
def test_post_reduce_by_scalein(self):
vnf_id = self._get_vnf_instance_id()
vnf_id = self._get_vnf_instance_id_for_scalein()
body = rootbase.SCALE_BODY
body['type'] = 'SCALE_IN'
scale_type = 'SCALE_IN'
rc, output = self._run('POST Scale a vnfInstance',
variables=['vnfInstanceId:' + vnf_id],
body=jsonutils.dumps(body),
filename='scaleVnfRequest.json')
res = self._get_responses_from_output(output)
# Post-Conditions:
lcmid = self._get_lcm_op_occs_id(vnf_id, lcm='SCALE')
lcmid = None
while(lcmid is None):
lcmid = self._get_lcm_op_occs_id_for_scale(vnf_id, scale_type,
lcm='SCALE')
time.sleep(5)
res = self._wait_lcm_status(lcmid)
self.assertEqual(0, res)
self._terminate_vnf_instance(vnf_id)
self._delete_vnf_instance(vnf_id)
self.assertEqual(0, res)
self.assertEqual(0, rc)
@ -380,12 +397,15 @@ class HealVNFTaskTest(BaseVNFLifecycleManagementTest):
filename=' healVnfRequest.json')
# Post-Conditions:
lcmid = self._get_lcm_op_occs_id(vnf['id'], lcm='HEAL')
lcmid = None
while(lcmid is None):
lcmid = self._get_lcm_op_occs_id(vnf['id'], lcm='HEAL')
time.sleep(5)
res = self._wait_lcm_status(lcmid)
self.assertEqual(0, res)
self._terminate_vnf_instance(vnf['id'])
self._delete_vnf_instance(vnf['id'])
self.assertEqual(0, res)
self.assertEqual(0, rc)
@ -418,12 +438,15 @@ class ChangeExternalVNFConnectivityTaskTest(BaseVNFLifecycleManagementTest):
filename='changeExtVnfConnectivityRequest.json')
# Post-Conditions:
lcmid = self._get_lcm_op_occs_id(vnf['id'], lcm='CHANGE_EXT_CONN')
lcmid = None
while(lcmid is None):
lcmid = self._get_lcm_op_occs_id(vnf['id'], lcm='CHANGE_EXT_CONN')
time.sleep(5)
res = self._wait_lcm_status(lcmid)
self.assertEqual(0, res)
self._terminate_vnf_instance(vnf['id'])
self._delete_vnf_instance(vnf['id'])
self.assertEqual(0, res)
self.assertEqual(0, rc)
@ -438,7 +461,11 @@ class RetryOperationTaskTest(BaseVNFLifecycleManagementTest):
# Pre-conditions: none
res, vnf = self._create_vnf_instance(self.vnfpkginfos[0].vnfdid)
self._instantiate_error_vnf_instance(vnf['id'])
lcmid = self._get_lcm_op_occs_id(vnf['id'])
lcmid = None
while(lcmid is None):
lcmid = self._get_lcm_op_occs_id(vnf['id'])
time.sleep(5)
variables = ['vnfLcmOpOccId:' + lcmid]
@ -447,10 +474,9 @@ class RetryOperationTaskTest(BaseVNFLifecycleManagementTest):
# Post-Conditions:
res = self._wait_lcm_status(lcmid, value='FAILED_TEMP')
self.assertEqual(0, res)
self._terminate_vnf_instance(vnf['id'])
self._rollback_instance(lcmid)
self._delete_vnf_instance(vnf['id'])
self.assertEqual(0, res)
self.assertEqual(1, rc)
@ -474,8 +500,6 @@ class RollbackOperationTaskTest(BaseVNFLifecycleManagementTest):
# Post-Conditions:
res = self._wait_lcm_status(lcmid, value='ROLLED_BACK')
self.assertEqual(0, res)
self._terminate_vnf_instance(vnf['id'])
self._delete_vnf_instance(vnf['id'])
self.assertEqual(0, res)
self.assertEqual(0, rc)