Merge "Improve the sol-vnflcm job"

This commit is contained in:
Zuul
2025-01-10 04:56:45 +00:00
committed by Gerrit Code Review
5 changed files with 636 additions and 1318 deletions
+186 -103
View File
@@ -26,6 +26,7 @@ from tacker.objects import fields
from tacker.tests.functional import base
from tacker.tests.functional.common.fake_server import FakeServerManager
from tacker.tests.functional.common import logging_utils
from tacker.tests.functional.sol.vnflcm import fake_vnflcm
from tacker.tests import utils
from tacker.vnfm.infra_drivers.openstack import constants as infra_cnst
@@ -188,7 +189,7 @@ def _list_vnf_package(tacker_client, **kwargs):
def _create_instantiate_vnf_request_body(flavour_id,
instantiation_level_id=None, vim_id=None, ext_vl=None,
add_params=None):
ext_managed_vl=None, add_params=None):
request_body = {"flavourId": flavour_id}
if instantiation_level_id:
@@ -197,6 +198,9 @@ def _create_instantiate_vnf_request_body(flavour_id,
if ext_vl:
request_body["extVirtualLinks"] = ext_vl
if ext_managed_vl:
request_body["extManagedVirtualLinks"] = ext_managed_vl
if vim_id:
request_body["vimConnectionInfo"] = [
{"id": uuidutils.generate_uuid(),
@@ -218,6 +222,7 @@ class BaseVnfLcmTest(base.BaseTackerTest):
# can set it false. For example, BaseVnfLcmMultiTenantTest which
# create their own servers for two different tenants.
prepare_fake_server = True
prepare_network = True
@classmethod
def setUpClass(cls):
@@ -258,14 +263,16 @@ class BaseVnfLcmTest(base.BaseTackerTest):
self.vim = self.get_vim(vim_list, 'VIM0')
if not self.vim:
assert False, "vim_list is Empty: Default VIM is missing"
result = self._create_network_settings()
self.ext_networks = result.get('ext_networks')
self.ext_vl = result.get('ext_vl')
self.ext_mngd_networks = result.get('ext_mngd_networks')
self.ext_link_ports = result.get('ext_link_ports')
self.ext_subnets = result.get('ext_subnets')
self.changed_ext_networks = result.get('changed_ext_networks')
self.changed_ext_subnets = result.get('changed_ext_subnets')
if self.prepare_network:
result = self._create_network_settings()
self.ext_networks = result.get('ext_networks')
self.ext_vl = result.get('ext_vl')
self.ext_mngd_networks = result.get('ext_mngd_networks')
self.ext_link_ports = result.get('ext_link_ports')
self.ext_subnets = result.get('ext_subnets')
self.changed_ext_networks = result.get('changed_ext_networks')
self.changed_ext_subnets = result.get('changed_ext_subnets')
@classmethod
def _prepare_start_fake_server(cls, fake_server,
@@ -401,10 +408,10 @@ class BaseVnfLcmTest(base.BaseTackerTest):
resource_details = self._get_heat_resource(stack_id,
resource_name,
h_client)
image = self._get_image_id_from_resource_attributes(
image = self._get_image_from_resource_attributes(
resource_details)
if image:
image_id_list.append(image.id)
image_id_list.append(image['id'])
return image_id_list
@@ -479,7 +486,8 @@ class BaseVnfLcmTest(base.BaseTackerTest):
def _create_vnf_instance_from_body(self, request_body, http_client=None):
if http_client is None:
http_client = self.http_client
request_body['vnfInstanceName'] = self._testMethodName
if not request_body.get('vnfInstanceName'):
request_body['vnfInstanceName'] = self._testMethodName
resp, response_body = http_client.do_request(
self.base_vnf_instances_url,
"POST",
@@ -488,19 +496,31 @@ class BaseVnfLcmTest(base.BaseTackerTest):
return resp, response_body
def _delete_vnf_instance(self, id, http_client=None):
timeout = VNF_TERMINATE_TIMEOUT
if http_client is None:
http_client = self.http_client
url = os.path.join(self.base_vnf_instances_url, id)
resp, body = http_client.do_request(url, "DELETE")
start_time = int(time.time())
while True:
resp, body = self.http_client.do_request(url, "DELETE")
if resp.status_code in (204, 404):
break
if ((int(time.time()) - start_time) > timeout):
error = "Failed to delete vnf instance %s"
self.fail(error % id)
return resp, body
def _show_vnf_instance(self, id, http_client=None):
def _show_vnf_instance(self, id, http_client=None, expected_result=None):
if http_client is None:
http_client = self.http_client
show_url = os.path.join(self.base_vnf_instances_url, id)
resp, vnf_instance = http_client.do_request(show_url, "GET")
if expected_result:
self.assertDictSupersetOf(expected_result, vnf_instance)
return resp, vnf_instance
def _list_vnf_instance(self, http_client=None, **kwargs):
@@ -511,27 +531,6 @@ class BaseVnfLcmTest(base.BaseTackerTest):
return resp, vnf_instances
def _wait_vnf_instance(self, id,
http_client=None,
instantiation_state=fields.VnfInstanceState.INSTANTIATED,
timeout=VNF_INSTANTIATE_TIMEOUT):
if http_client is None:
http_client = self.http_client
start_time = int(time.time())
while True:
resp, body = self._show_vnf_instance(id, http_client)
if body['instantiationState'] == instantiation_state:
break
if ((int(time.time()) - start_time) > timeout):
error = ("Vnf instance %(id)s status is %(current)s, "
"expected status should be %(expected)s")
self.fail(error % {"id": id,
"current": body['instantiationState'],
"expected": instantiation_state})
time.sleep(5)
def _instantiate_vnf_instance(self, id, request_body, http_client=None):
if http_client is None:
http_client = self.http_client
@@ -643,29 +642,7 @@ class BaseVnfLcmTest(base.BaseTackerTest):
return resp, response_body
def _wait_terminate_vnf_instance(self, id, timeout=None, http_client=None):
if http_client is None:
http_client = self.http_client
start_time = int(time.time())
self._wait_vnf_instance(id,
http_client,
instantiation_state=fields.VnfInstanceState.NOT_INSTANTIATED,
timeout=timeout)
# If gracefulTerminationTimeout is set, check whether vnf
# instantiation_state is set to NOT_INSTANTIATED after
# gracefulTerminationTimeout seconds.
if timeout and int(time.time()) - start_time < timeout:
self.fail("Vnf is terminated before graceful termination"
"timeout period")
else:
return
# wait for status completion
time.sleep(VNF_DELETE_COMPLETION_WAIT)
def _get_heat_stack(self, vnf_instance_id, h_client=None,
def _get_heat_stack(self, vnf_instance, h_client=None,
prefix_id='vnflcm_'):
if h_client is None:
h_client = self.h_client
@@ -674,16 +651,16 @@ class BaseVnfLcmTest(base.BaseTackerTest):
except Exception:
return None
target_stack_name = prefix_id + vnf_instance_id
target_stakcs = list(
target_stack_name = prefix_id + vnf_instance['id']
target_stacks = list(
filter(
lambda x: x.stack_name == target_stack_name,
stacks))
if len(target_stakcs) == 0:
if len(target_stacks) == 0:
return None
return target_stakcs[0]
return target_stacks[0]
def _delete_heat_stack(self, stack_id, h_client=None):
if h_client is None:
@@ -748,6 +725,53 @@ class BaseVnfLcmTest(base.BaseTackerTest):
return resource
def _get_fixed_ips(self, vnf_instance, request_body):
res_name = None
for extvirlink in request_body['extVirtualLinks']:
if 'extCps' not in extvirlink:
continue
for extcps in extvirlink['extCps']:
if 'cpdId' in extcps:
if res_name is None:
res_name = list()
res_name.append(extcps['cpdId'])
break
if res_name is None:
return []
stack = self._get_heat_stack(vnf_instance)
stack_id = stack.id
stack_resource = self._get_heat_resource_list(stack_id, nested_depth=2)
releations = dict()
for elmt in stack_resource:
if elmt.resource_type != 'OS::Neutron::Port':
continue
if elmt.resource_name not in res_name:
continue
parent = getattr(elmt, 'parent_resource', None)
releations[parent] = elmt.resource_name
details = list()
for (parent_name, resource_name) in releations.items():
for elmt in stack_resource:
if parent_name is None:
detail_stack = self._get_heat_resource(
stack_id, resource_name)
elif parent_name != elmt.resource_name:
continue
else:
detail_stack = self._get_heat_resource(
elmt.physical_resource_id, resource_name)
details.append(detail_stack)
ans_list = list()
for detail in details:
ans_list.append(detail.attributes['fixed_ips'])
return ans_list
def _get_heat_stack_template(self, stack_id, nested_depth=0,
h_client=None):
if h_client is None:
@@ -759,13 +783,13 @@ class BaseVnfLcmTest(base.BaseTackerTest):
return template
def _get_image_id_from_resource_attributes(self, stack_resource_details):
def _get_image_from_resource_attributes(self, stack_resource_details):
if stack_resource_details is None:
return None
if not hasattr(stack_resource_details, 'attributes'):
return None
return stack_resource_details.attributes.get('image', {}).get('id')
return stack_resource_details.attributes.get('image', {})
def _get_vnfc_instance_id_list(
self,
@@ -849,12 +873,12 @@ class BaseVnfLcmTest(base.BaseTackerTest):
def assert_heat_stack_status(
self,
vnf_instance_id,
vnf_instance,
h_client=None,
expected_stack_status=infra_cnst.STACK_CREATE_COMPLETE):
if h_client is None:
h_client = self.h_client
stack = self._get_heat_stack(vnf_instance_id, h_client)
stack = self._get_heat_stack(vnf_instance, h_client)
self.assertEqual(
expected_stack_status,
stack.stack_status)
@@ -863,7 +887,7 @@ class BaseVnfLcmTest(base.BaseTackerTest):
self,
vnf_instance,
h_client=None,
expected_glance_image=None,
expected_glance_image_status=None,
expected_resource_status=None):
if h_client is None:
@@ -873,12 +897,13 @@ class BaseVnfLcmTest(base.BaseTackerTest):
resource_details = self._get_heat_resource(stack_id,
resource_name,
h_client)
image = self._get_image_id_from_resource_attributes(
resource_details)
image = self._get_image_from_resource_attributes(resource_details)
if image:
self.assertEqual(expected_glance_image, image.status)
image_detail = self._get_glance_image(image['id'])
self.assertEqual(expected_glance_image_status,
image_detail['status'])
stack = self._get_heat_stack(vnf_instance['id'], h_client)
stack = self._get_heat_stack(vnf_instance, h_client)
resources = self._get_heat_resource_list(stack.id,
nested_depth=2, h_client=h_client)
self.assertIsNotNone(resources)
@@ -889,7 +914,7 @@ class BaseVnfLcmTest(base.BaseTackerTest):
resource.resource_status)
# FT-checkpoint: Glance-image
if expected_glance_image:
if expected_glance_image_status:
assert_glance_image(stack.id, resource.resource_name,
h_client)
@@ -966,26 +991,6 @@ class BaseVnfLcmTest(base.BaseTackerTest):
time.sleep(RETRY_WAIT_TIME)
def _wait_stack_update(self, vnf_instance_id, expected_status,
h_client=None):
if h_client is None:
h_client = self.h_client
timeout = VNF_HEAL_TIMEOUT
start_time = int(time.time())
while True:
stack = self._get_heat_stack(vnf_instance_id, h_client)
if stack.stack_status == expected_status:
break
if ((int(time.time()) - start_time) > timeout):
error = ("Stack %(id)s status is %(current)s, expected status "
"should be %(expected)s")
self.fail(error % {"vnf_instance_name": vnf_instance_id,
"current": stack.status,
"expected": expected_status})
time.sleep(RETRY_WAIT_TIME)
def assert_create_vnf(self, resp, vnf_instance,
fake_server_manager=None):
if fake_server_manager is None:
@@ -1047,12 +1052,13 @@ class BaseVnfLcmTest(base.BaseTackerTest):
resp, vnf_instance = self._show_vnf_instance(vnf_instance_id,
http_client)
self.assert_vnf_state(vnf_instance)
self.assert_instantiation_state(vnf_instance)
self.assert_heat_stack_status(vnf_instance['id'], h_client)
self.assert_heat_stack_status(vnf_instance, h_client)
self.assert_heat_resource_status(
vnf_instance,
h_client,
expected_glance_image='active',
expected_glance_image_status='active',
expected_resource_status='CREATE_COMPLETE')
# FT-checkpoint: Notification
@@ -1099,7 +1105,7 @@ class BaseVnfLcmTest(base.BaseTackerTest):
self.assert_instantiation_state(vnf_instance)
self.assert_heat_stack_status(
vnf_instance['id'],
vnf_instance,
h_client,
expected_stack_status=expected_stack_status)
@@ -1158,7 +1164,7 @@ class BaseVnfLcmTest(base.BaseTackerTest):
fields.VnfInstanceState.NOT_INSTANTIATED)
# FT-checkpoint: Heat stack status.
stack = self._get_heat_stack(vnf_instance_id, h_client)
stack = self._get_heat_stack(vnf_instance, h_client)
self.assertIsNone(stack)
self.assert_heat_resource_status_is_none(
@@ -1225,7 +1231,7 @@ class BaseVnfLcmTest(base.BaseTackerTest):
self.assertIsNotNone(status.get('scaleLevel'))
self.assert_heat_stack_status(
vnf_instance['id'],
vnf_instance,
h_client,
expected_stack_status=expected_stack_status)
@@ -1255,6 +1261,61 @@ class BaseVnfLcmTest(base.BaseTackerTest):
if expected_show_res:
self._assert_show_res(vnf_instance, expected_show_res)
def assert_change_ext_conn_vnf(
self,
resp,
request_body,
vnf_instance_id,
before_fixed_ips=None,
http_client=None,
h_client=None,
fake_server_manager=None):
if http_client is None:
http_client = self.http_client
if h_client is None:
h_client = self.h_client
if fake_server_manager is None:
fake_server_manager = FAKE_SERVER_MANAGER
self.assertEqual(202, resp.status_code)
resp, vnf_instance = self._show_vnf_instance(vnf_instance_id,
http_client)
self.assert_vnf_state(vnf_instance)
self.assert_instantiation_state(vnf_instance)
self.assert_heat_stack_status(
vnf_instance,
h_client,
expected_stack_status='UPDATE_COMPLETE')
if before_fixed_ips:
after_fixed_ips = self._get_fixed_ips(vnf_instance, request_body)
self.assertNotEqual(before_fixed_ips, after_fixed_ips)
# FT-checkpoint: Notification
callback_url = os.path.join(
MOCK_NOTIFY_CALLBACK_URL,
self._testMethodName)
notify_mock_responses = self._filter_notify_history(callback_url,
vnf_instance_id, fake_server_manager=fake_server_manager)
self.assertEqual(3, len(notify_mock_responses))
self.assert_notification_mock_response(
notify_mock_responses[0],
'VnfLcmOperationOccurrenceNotification',
'STARTING')
self.assert_notification_mock_response(
notify_mock_responses[1],
'VnfLcmOperationOccurrenceNotification',
'PROCESSING')
self.assert_notification_mock_response(
notify_mock_responses[2],
'VnfLcmOperationOccurrenceNotification',
'COMPLETED')
def assert_rollback_vnf(self, resp, vnf_instance_id,
fake_server_manager=None):
self.assertEqual(202, resp.status_code)
@@ -1346,10 +1407,11 @@ class BaseVnfLcmTest(base.BaseTackerTest):
self.assert_vnf_state(vnf_instance)
self.assert_instantiation_state(vnf_instance)
self.assert_heat_stack_status(
vnf_instance['id'],
h_client,
expected_stack_status=expected_stack_status)
if expected_stack_status:
self.assert_heat_stack_status(
vnf_instance,
h_client,
expected_stack_status=expected_stack_status)
# FT-checkpoint: Notification
callback_url = os.path.join(
@@ -1486,6 +1548,27 @@ class BaseVnfLcmTest(base.BaseTackerTest):
self.assertIsNotNone(_links.get('self'))
self.assertIsNotNone(_links.get('self').get('href'))
def register_subscription(self):
callback_url = os.path.join(MOCK_NOTIFY_CALLBACK_URL,
self._testMethodName)
request_body = fake_vnflcm.Subscription.make_create_request_body(
'http://localhost:{}{}'.format(
FAKE_SERVER_MANAGER.SERVER_PORT,
callback_url))
resp, response_body = self._register_subscription(request_body)
self.assertEqual(201, resp.status_code)
self.assert_http_header_location_for_subscription(resp.headers)
self.assert_notification_get(callback_url)
subscription_id = response_body.get('id')
return subscription_id
def assert_subscription_deletion(self, sub_id):
resp, _ = self._delete_subscription(sub_id)
self.assertEqual(204, resp.status_code)
resp, _ = self._show_subscription(sub_id)
self.assertEqual(404, resp.status_code)
def _filter_notify_history(self, callback_url, vnf_instance_id,
fake_server_manager=None):
if fake_server_manager is None:
@@ -1498,13 +1581,13 @@ class BaseVnfLcmTest(base.BaseTackerTest):
h for h in notify_histories
if h.request_body.get('vnfInstanceId') == vnf_instance_id]
def _get_heat_stack_show(self, vnf_instance_id, resource_name=None,
def _get_heat_stack_show(self, vnf_instance, resource_name=None,
h_client=None):
"""Retrieve image name of the resource from stack"""
if h_client is None:
h_client = self.h_client
try:
stack = self._get_heat_stack(vnf_instance_id, h_client)
stack = self._get_heat_stack(vnf_instance, h_client)
stack_info = h_client.stacks.get(stack.id)
stack_dict = stack_info.to_dict()
resource_dict = json.loads(stack_dict['parameters']['nfv'])
File diff suppressed because it is too large Load Diff
@@ -13,263 +13,48 @@
# License for the specific language governing permissions and limitations
# under the License.
import os
import time
from oslo_serialization import jsonutils
from oslo_utils import uuidutils
from sqlalchemy import desc
from sqlalchemy.orm import joinedload
from tacker.common import exceptions
from tacker import context as t_context
from tacker.db import api as db_api
from tacker.db.db_sqlalchemy import api
from tacker.db.db_sqlalchemy import models
from tacker.objects import fields
from tacker.tests.functional import base
from tacker.tests.functional.sol.vnflcm import base as vnflcm_base
from tacker.tests import utils
VNF_PACKAGE_UPLOAD_TIMEOUT = 300
VNF_INSTANTIATE_TIMEOUT = 600
VNF_TERMINATE_TIMEOUT = 600
RETRY_WAIT_TIME = 5
class VnfLcmTestNoop(vnflcm_base.BaseVnfLcmTest):
def _create_and_upload_vnf_package(tacker_client, csar_package_name,
user_defined_data):
# create vnf package
body = jsonutils.dumps({"userDefinedData": user_defined_data})
resp, vnf_package = tacker_client.do_request(
'/vnfpkgm/v1/vnf_packages', "POST", body=body)
# upload vnf package
file_path = utils.test_etc_sample("etsi/nfv", csar_package_name)
# Generating unique vnfd id. This is required when multiple workers
# are running concurrently. The call below creates a new temporary
# CSAR with unique vnfd id.
file_path, uniqueid = utils.create_csar_with_unique_vnfd_id(file_path)
with open(file_path, 'rb') as file_object:
resp, resp_body = tacker_client.do_request(
'/vnfpkgm/v1/vnf_packages/{id}/package_content'.format(
id=vnf_package['id']),
"PUT", body=file_object, content_type='application/zip')
# wait for onboard
timeout = VNF_PACKAGE_UPLOAD_TIMEOUT
start_time = int(time.time())
show_url = os.path.join('/vnfpkgm/v1/vnf_packages', vnf_package['id'])
vnfd_id = None
while True:
resp, body = tacker_client.do_request(show_url, "GET")
if body['onboardingState'] == "ONBOARDED":
vnfd_id = body['vnfdId']
break
if ((int(time.time()) - start_time) > timeout):
raise Exception("Failed to onboard vnf package")
time.sleep(1)
# remove temporarily created CSAR file
os.remove(file_path)
return vnf_package['id'], vnfd_id
class VnfLcmTest(base.BaseTackerTest):
prepare_network = False
@classmethod
def setUpClass(cls):
cls.tacker_client = base.BaseTackerTest.tacker_http_client()
cls.vnf_package, cls.vnfd_id = \
_create_and_upload_vnf_package(
cls.tacker_client, "test_inst_terminate_vnf_with_vnflcmnoop",
{"key": "file_functional"})
csar_path, _ = vnflcm_base._create_csar_with_unique_vnfd_id(
utils.test_etc_sample("etsi/nfv",
"test_inst_terminate_vnf_with_vnflcmnoop"))
cls.vnf_package, cls.vnfd_id = (
vnflcm_base._create_and_upload_vnf_package(
cls.tacker_client, {"key": "file_functional"},
csar_path))
super(VnfLcmTest, cls).setUpClass()
super(VnfLcmTestNoop, cls).setUpClass()
@classmethod
def tearDownClass(cls):
# Update vnf package operational state to DISABLED
update_req_body = jsonutils.dumps({
"operationalState": "DISABLED"})
base_path = "/vnfpkgm/v1/vnf_packages"
# Update operational state to DISABLED and delete vnf package
for package_id in [cls.vnf_package]:
resp, resp_body = cls.tacker_client.do_request(
'{base_path}/{id}'.format(id=package_id,
base_path=base_path),
"PATCH", content_type='application/json',
body=update_req_body)
vnflcm_base._delete_vnf_package(cls.tacker_client, package_id)
# Delete vnf package
url = '/vnfpkgm/v1/vnf_packages/%s' % package_id
cls.tacker_client.do_request(url, "DELETE")
super(VnfLcmTest, cls).tearDownClass()
super(VnfLcmTestNoop, cls).tearDownClass()
def setUp(self):
super(VnfLcmTest, self).setUp()
self.base_url = "/vnflcm/v1/vnf_instances"
self.context = t_context.get_admin_context()
vim_list = self.client.list_vims()
if not vim_list:
self.skipTest("Vims are not configured")
vim_id = 'VIM0'
vim = self.get_vim(vim_list, vim_id)
if not vim:
self.skipTest("Openstack VIM '%s' is missing" % vim_id)
self.vim_id = vim['id']
def _instantiate_vnf_instance_request(
self, flavour_id, vim_id=None, additional_param=None):
request_body = {"flavourId": flavour_id}
if vim_id:
request_body["vimConnectionInfo"] = [
{"id": uuidutils.generate_uuid(),
"vimId": vim_id,
"vimType": "openstack"}]
if additional_param:
request_body["additionalParams"] = additional_param
return request_body
def _create_vnf_instance(self, vnfd_id, vnf_instance_name=None,
vnf_instance_description=None):
request_body = {'vnfdId': vnfd_id}
if vnf_instance_name:
request_body['vnfInstanceName'] = vnf_instance_name
if vnf_instance_description:
request_body['vnfInstanceDescription'] = vnf_instance_description
resp, response_body = self.http_client.do_request(
self.base_url, "POST", body=jsonutils.dumps(request_body))
return resp, response_body
def _delete_wait_vnf_instance(self, id):
timeout = VNF_TERMINATE_TIMEOUT
url = os.path.join(self.base_url, id)
start_time = int(time.time())
while True:
resp, body = self.http_client.do_request(url, "DELETE")
if 204 == resp.status_code:
break
if ((int(time.time()) - start_time) > timeout):
error = "Failed to delete vnf instance %s"
self.fail(error % id)
time.sleep(RETRY_WAIT_TIME)
def _delete_vnf_instance(self, id):
self._delete_wait_vnf_instance(id)
# verify vnf instance is deleted
url = os.path.join(self.base_url, id)
resp, body = self.http_client.do_request(url, "GET")
self.assertEqual(404, resp.status_code)
def _show_vnf_instance(self, id, expected_result=None):
show_url = os.path.join(self.base_url, id)
resp, vnf_instance = self.http_client.do_request(show_url, "GET")
self.assertEqual(200, resp.status_code)
if expected_result:
self.assertDictSupersetOf(expected_result, vnf_instance)
return vnf_instance
def _vnf_instance_wait(
self, id,
instantiation_state=fields.VnfInstanceState.INSTANTIATED,
timeout=VNF_INSTANTIATE_TIMEOUT):
show_url = os.path.join(self.base_url, id)
start_time = int(time.time())
while True:
resp, body = self.http_client.do_request(show_url, "GET")
if body['instantiationState'] == instantiation_state:
break
if ((int(time.time()) - start_time) > timeout):
error = ("Vnf instance %(id)s status is %(current)s, "
"expected status should be %(expected)s")
self.fail(error % {"id": id,
"current": body['instantiationState'],
"expected": instantiation_state})
time.sleep(RETRY_WAIT_TIME)
def _instantiate_vnf_instance(self, id, request_body):
url = os.path.join(self.base_url, id, "instantiate")
resp, body = self.http_client.do_request(
url, "POST", body=jsonutils.dumps(request_body))
self.assertEqual(202, resp.status_code)
self._vnf_instance_wait(id)
def _terminate_vnf_instance(self, id, request_body):
url = os.path.join(self.base_url, id, "terminate")
resp, body = self.http_client.do_request(
url, "POST", body=jsonutils.dumps(request_body))
self.assertEqual(202, resp.status_code)
timeout = request_body.get('gracefulTerminationTimeout')
start_time = int(time.time())
self._vnf_instance_wait(
id, instantiation_state=fields.VnfInstanceState.NOT_INSTANTIATED,
timeout=VNF_TERMINATE_TIMEOUT)
# If gracefulTerminationTimeout is set, check whether vnf
# instantiation_state is set to NOT_INSTANTIATED after
# gracefulTerminationTimeout seconds.
if timeout and int(time.time()) - start_time < timeout:
self.fail("Vnf is terminated before graceful termination "
"timeout period")
@db_api.context_manager.reader
def _vnf_notify_get_by_id(self, context, vnf_instance_id,
columns_to_join=None):
query = api.model_query(
context, models.VnfLcmOpOccs,
read_deleted="no", project_only=True).filter_by(
vnf_instance_id=vnf_instance_id).order_by(
desc("created_at"))
if columns_to_join:
for column in columns_to_join:
query = query.options(joinedload(column))
result = query.first()
if not result:
raise exceptions.VnfInstanceNotFound(id=vnf_instance_id)
return result
def _wait_vnflcm_op_occs(
self, context, vnf_instance_id, type, timeout,
operation_state='COMPLETED'):
start_time = int(time.time())
while True:
vnflcm_op_occ = self._vnf_notify_get_by_id(
context, vnf_instance_id)
if vnflcm_op_occ.operation_state == operation_state:
break
if ((int(time.time()) - start_time) > timeout):
raise Exception("Failed to wait {} instance".format(type))
time.sleep(RETRY_WAIT_TIME)
super(VnfLcmTestNoop, self).setUp()
def test_instantiate_terminate_vnf_with_vnflcmnoop(self):
# Create subscription and register it.
subscription_id = self.register_subscription()
self.addCleanup(self._delete_subscription, subscription_id)
# create vnf instance
vnf_instance_name = "vnf_with_instantiation_level-%s" % \
uuidutils.generate_uuid()
@@ -281,26 +66,25 @@ class VnfLcmTest(base.BaseTackerTest):
self.assertIsNotNone(vnf_instance['id'])
self.assertEqual(201, resp.status_code)
# instantiate vnf instance
request_body = self._instantiate_vnf_instance_request(
"simple", vim_id=self.vim_id)
self._instantiate_vnf_instance(vnf_instance['id'], request_body)
self._wait_vnflcm_op_occs(self.context, vnf_instance['id'],
'instantiate', VNF_INSTANTIATE_TIMEOUT)
request_body = vnflcm_base._create_instantiate_vnf_request_body(
"simple", vim_id=self.vim['id'])
resp, _ = self._instantiate_vnf_instance(vnf_instance["id"],
request_body)
self.assertEqual(202, resp.status_code)
self._wait_lcm_done('COMPLETED', vnf_instance_id=vnf_instance["id"])
# show vnf instance
vnf_instance = self._show_vnf_instance(vnf_instance['id'])
_, vnf_instance = self._show_vnf_instance(vnf_instance['id'])
self.assertEqual(vnf_instance['instantiationState'], 'INSTANTIATED')
vnflcm_op_occ_ins = self._vnf_notify_get_by_id(
self.context, vnf_instance['id'], columns_to_join=None)
self.assertEqual(vnflcm_op_occ_ins.operation, 'INSTANTIATE')
# terminate vnf instance
terminate_req_body = {
"terminationType": fields.VnfInstanceTerminationType.FORCEFUL,
}
self._terminate_vnf_instance(vnf_instance['id'], terminate_req_body)
self._wait_vnflcm_op_occs(self.context, vnf_instance['id'],
'terminate', VNF_TERMINATE_TIMEOUT)
vnflcm_op_occ_term = self._vnf_notify_get_by_id(
self.context, vnf_instance['id'], columns_to_join=None)
self.assertEqual(vnflcm_op_occ_term.operation, 'TERMINATE')
resp, _ = self._terminate_vnf_instance(
vnf_instance['id'], terminate_req_body)
self.assertEqual(202, resp.status_code)
self._wait_lcm_done('COMPLETED', vnf_instance_id=vnf_instance["id"])
# delete vnf instance
self._delete_vnf_instance(vnf_instance['id'])
@@ -117,20 +117,7 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
- Delete subscription
"""
# Create subscription and register it.
callback_url = os.path.join(vnflcm_base.MOCK_NOTIFY_CALLBACK_URL,
self._testMethodName)
request_body = fake_vnflcm.Subscription.make_create_request_body(
'http://localhost:{}{}'.format(
vnflcm_base.FAKE_SERVER_MANAGER.SERVER_PORT,
callback_url))
resp, response_body = self._register_subscription(request_body)
self.assertEqual(201, resp.status_code)
self.assert_http_header_location_for_subscription(resp.headers)
self.assert_notification_get(callback_url)
subscription_id = response_body.get('id')
self.addCleanup(
self._delete_subscription,
subscription_id)
subscription_id = self.register_subscription()
# Pre Setting: Create vnf package.
sample_name = 'functional5'
@@ -152,7 +139,6 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
vnf_instance_id = vnf_instance['id']
self._wait_lcm_done(vnf_instance_id=vnf_instance_id)
self.assert_create_vnf(resp, vnf_instance, vnf_package_id)
self.addCleanup(self._delete_vnf_instance, vnf_instance_id)
# Instantiate vnf instance
request_body = fake_vnflcm.VnfInstances.\
@@ -170,7 +156,7 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
expected_show_res=expected_show_res)
# Scale-out vnf instance
stack = self._get_heat_stack(vnf_instance_id)
stack = self._get_heat_stack(vnf_instance)
pre_stack_resource_list = self._get_heat_resource_list(stack.id, 2)
request_body = fake_vnflcm.VnfInstances.make_scale_request_body(
@@ -190,7 +176,7 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
expected_show_res=expected_show_res)
# Scale-in vnf instance
stack = self._get_heat_stack(vnf_instance_id)
stack = self._get_heat_stack(vnf_instance)
pre_stack_resource_list = self._get_heat_resource_list(stack.id, 2)
request_body = (fake_vnflcm.VnfInstances
@@ -210,7 +196,7 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
expected_show_res=expected_show_res)
# Terminate VNF
stack = self._get_heat_stack(vnf_instance_id)
stack = self._get_heat_stack(vnf_instance)
resources_list = self._get_heat_resource_list(stack.id)
resource_name_list = [r.resource_name for r in resources_list]
glance_image_id_list = self._get_glance_image_list_from_stack_resource(
@@ -229,11 +215,7 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
self.assert_delete_vnf(resp, vnf_instance_id, vnf_package_id)
# Subscription delete
resp, response_body = self._delete_subscription(subscription_id)
self.assertEqual(204, resp.status_code)
resp, _ = self._show_subscription(subscription_id)
self.assertEqual(404, resp.status_code)
self.assert_subscription_deletion(subscription_id)
def test_inst_scaling_heal(self):
"""Test basic life cycle operations with sample VNFD.
@@ -253,20 +235,7 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
- Delete subscription
"""
# Create subscription and register it.
callback_url = os.path.join(vnflcm_base.MOCK_NOTIFY_CALLBACK_URL,
self._testMethodName)
request_body = fake_vnflcm.Subscription.make_create_request_body(
'http://localhost:{}{}'.format(
vnflcm_base.FAKE_SERVER_MANAGER.SERVER_PORT,
callback_url))
resp, response_body = self._register_subscription(request_body)
self.assertEqual(201, resp.status_code)
self.assert_http_header_location_for_subscription(resp.headers)
self.assert_notification_get(callback_url)
subscription_id = response_body.get('id')
self.addCleanup(
self._delete_subscription,
subscription_id)
subscription_id = self.register_subscription()
# Pre Setting: Create vnf package.
sample_name = 'functional5'
@@ -288,7 +257,6 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
vnf_instance_id = vnf_instance['id']
self._wait_lcm_done(vnf_instance_id=vnf_instance_id)
self.assert_create_vnf(resp, vnf_instance, vnf_package_id)
self.addCleanup(self._delete_vnf_instance, vnf_instance_id)
# Instantiate vnf instance
request_body = fake_vnflcm.VnfInstances.\
@@ -306,7 +274,7 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
expected_show_res=expected_show_res)
# Scale-out vnf instance
stack = self._get_heat_stack(vnf_instance_id)
stack = self._get_heat_stack(vnf_instance)
pre_stack_resource_list = self._get_heat_resource_list(stack.id, 2)
request_body = fake_vnflcm.VnfInstances.make_scale_request_body(
'SCALE_OUT')
@@ -325,7 +293,7 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
# Heal vnf (do not specify vnfc_instace_id)
# pre check heat status.
self.assert_heat_stack_status(vnf_instance_id)
self.assert_heat_stack_status(vnf_instance)
# Heal
request_body = fake_vnflcm.VnfInstances.make_heal_request_body()
resp, _ = self._heal_vnf_instance(vnf_instance_id, request_body)
@@ -341,7 +309,7 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
expected_show_res=expected_show_res)
# Scale-in vnf instance
stack = self._get_heat_stack(vnf_instance_id)
stack = self._get_heat_stack(vnf_instance)
pre_stack_resource_list = self._get_heat_resource_list(stack.id, 2)
request_body = (fake_vnflcm.VnfInstances
.make_scale_request_body('SCALE_IN'))
@@ -359,7 +327,7 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
expected_show_res=expected_show_res)
# Terminate VNF
stack = self._get_heat_stack(vnf_instance_id)
stack = self._get_heat_stack(vnf_instance)
resources_list = self._get_heat_resource_list(stack.id)
resource_name_list = [r.resource_name for r in resources_list]
glance_image_id_list = self._get_glance_image_list_from_stack_resource(
@@ -378,11 +346,7 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
self.assert_delete_vnf(resp, vnf_instance_id, vnf_package_id)
# Subscription delete
resp, response_body = self._delete_subscription(subscription_id)
self.assertEqual(204, resp.status_code)
resp, _ = self._show_subscription(subscription_id)
self.assertEqual(404, resp.status_code)
self.assert_subscription_deletion(subscription_id)
def test_notification_no_virtual_storage(self):
"""Test notification when virtual storage absent in VNFD.
@@ -398,20 +362,7 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
- Delete subscription
"""
# Create subscription and register it.
callback_url = os.path.join(vnflcm_base.MOCK_NOTIFY_CALLBACK_URL,
self._testMethodName)
request_body = fake_vnflcm.Subscription.make_create_request_body(
'http://localhost:{}{}'.format(
vnflcm_base.FAKE_SERVER_MANAGER.SERVER_PORT,
callback_url))
resp, response_body = self._register_subscription(request_body)
self.assertEqual(201, resp.status_code)
self.assert_http_header_location_for_subscription(resp.headers)
self.assert_notification_get(callback_url)
subscription_id = response_body.get('id')
self.addCleanup(
self._delete_subscription,
subscription_id)
subscription_id = self.register_subscription()
# Pre Setting: Create vnf package.
sample_name = 'user_data_sample_virtual_storage_missing'
@@ -433,7 +384,6 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
vnf_instance_id = vnf_instance['id']
self._wait_lcm_done(vnf_instance_id=vnf_instance_id)
self.assert_create_vnf(resp, vnf_instance, vnf_package_id)
self.addCleanup(self._delete_vnf_instance, vnf_instance_id)
# Instantiate vnf instance
request_body = fake_vnflcm.VnfInstances. \
@@ -461,7 +411,7 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
str(notify_mock_responses[2].request_body))
# Terminate VNF
stack = self._get_heat_stack(vnf_instance_id)
stack = self._get_heat_stack(vnf_instance)
resources_list = self._get_heat_resource_list(stack.id)
resource_name_list = [r.resource_name for r in resources_list]
glance_image_id_list = self._get_glance_image_list_from_stack_resource(
@@ -481,11 +431,7 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
self.assert_delete_vnf(resp, vnf_instance_id, vnf_package_id)
# Subscription delete
resp, response_body = self._delete_subscription(subscription_id)
self.assertEqual(204, resp.status_code)
resp, _ = self._show_subscription(subscription_id)
self.assertEqual(404, resp.status_code)
self.assert_subscription_deletion(subscription_id)
def test_vnfdid_filter_in_subscription(self):
"""Test notification when filter exists in subscription.
@@ -519,33 +465,20 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
# Create subscription with vnf instance's vnfdid filter.
sub_id_1 = self._gen_sub_and_register_sub(
'with_vnfd_id_filter', vnfd_id)
self.addCleanup(
self._delete_subscription,
sub_id_1)
# Create subscription with other vnfdid filter.
sub_id_2 = self._gen_sub_and_register_sub(
'with_other_vnfd_id', uuidutils.generate_uuid())
self.addCleanup(
self._delete_subscription,
sub_id_2)
# Create subscription without filter.
sub_id_3 = self._gen_sub_and_register_sub(
'no_filter', uuidutils.generate_uuid())
self.addCleanup(
self._delete_subscription,
sub_id_3)
sub_id = self._gen_sub_and_register_sub(self._testMethodName, vnfd_id)
self.addCleanup(
self._delete_subscription,
sub_id)
# Create vnf instance
resp, vnf_instance = self._create_vnf_instance_from_body(
fake_vnflcm.VnfInstances.make_create_request_body(vnfd_id))
vnf_instance_id = vnf_instance['id']
self._wait_lcm_done(vnf_instance_id=vnf_instance_id)
self.assert_create_vnf(resp, vnf_instance, vnf_package_id)
self.addCleanup(self._delete_vnf_instance, vnf_instance_id)
vnflcm_base.FAKE_SERVER_MANAGER.clear_history(
os.path.join(vnflcm_base.MOCK_NOTIFY_CALLBACK_URL,
"with_vnfd_id_filter"))
@@ -577,7 +510,7 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
self._check_subscription(name)
# Terminate VNF
stack = self._get_heat_stack(vnf_instance_id)
stack = self._get_heat_stack(vnf_instance)
resources_list = self._get_heat_resource_list(stack.id)
resource_name_list = [r.resource_name for r in resources_list]
glance_image_id_list = self._get_glance_image_list_from_stack_resource(
@@ -601,7 +534,7 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
# Subscription delete
for subsc_id in [sub_id, sub_id_1, sub_id_2, sub_id_3]:
self._assert_subscription_deletion(subsc_id)
self.assert_subscription_deletion(subsc_id)
def test_stack_update_in_scaling(self):
"""Test basic life cycle operations with sample VNFD.
@@ -620,20 +553,7 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
- Delete subscription
"""
# Create subscription and register it.
callback_url = os.path.join(vnflcm_base.MOCK_NOTIFY_CALLBACK_URL,
self._testMethodName)
request_body = fake_vnflcm.Subscription.make_create_request_body(
'http://localhost:{}{}'.format(
vnflcm_base.FAKE_SERVER_MANAGER.SERVER_PORT,
callback_url))
resp, response_body = self._register_subscription(request_body)
self.assertEqual(201, resp.status_code)
self.assert_http_header_location_for_subscription(resp.headers)
self.assert_notification_get(callback_url)
subscription_id = response_body.get('id')
self.addCleanup(
self._delete_subscription,
subscription_id)
subscription_id = self.register_subscription()
# Pre Setting: Create vnf package.
sample_name = 'stack_update_in_scale'
@@ -655,7 +575,6 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
vnf_instance_id = vnf_instance['id']
self._wait_lcm_done(vnf_instance_id=vnf_instance_id)
self.assert_create_vnf(resp, vnf_instance, vnf_package_id)
self.addCleanup(self._delete_vnf_instance, vnf_instance_id)
# Instantiate vnf instance
request_body = (fake_vnflcm.VnfInstances.
@@ -672,7 +591,7 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
self.assertEqual(200, resp.status_code)
# Scale-out vnf instance
stack = self._get_heat_stack(vnf_instance_id)
stack = self._get_heat_stack(vnf_instance)
pre_stack_resource_list = self._get_heat_resource_list(stack.id, 2)
request_body = fake_vnflcm.VnfInstances.make_scale_request_body(
@@ -687,7 +606,7 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
# Scale-in vnf instance
stack = self._get_heat_stack(vnf_instance_id)
stack = self._get_heat_stack(vnf_instance)
pre_stack_resource_list = self._get_heat_resource_list(stack.id, 2)
request_body = (fake_vnflcm.VnfInstances
@@ -701,7 +620,7 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
scale_type='SCALE_IN', expected_stack_status='UPDATE_COMPLETE')
# Terminate VNF
stack = self._get_heat_stack(vnf_instance_id)
stack = self._get_heat_stack(vnf_instance)
resources_list = self._get_heat_resource_list(stack.id)
resource_name_list = [r.resource_name for r in resources_list]
glance_image_id_list = self._get_glance_image_list_from_stack_resource(
@@ -720,11 +639,7 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
self.assert_delete_vnf(resp, vnf_instance_id, vnf_package_id)
# Subscription delete
resp, response_body = self._delete_subscription(subscription_id)
self.assertEqual(204, resp.status_code)
resp, _ = self._show_subscription(subscription_id)
self.assertEqual(404, resp.status_code)
self.assert_subscription_deletion(subscription_id)
def test_inst_update_heal_term(self):
"""Test basic life cycle operations.
@@ -748,18 +663,7 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
- Delete subscription.
"""
# Create subscription and register it.
callback_url = os.path.join(vnflcm_base.MOCK_NOTIFY_CALLBACK_URL,
self._testMethodName)
request_body = fake_vnflcm.Subscription.make_create_request_body(
'http://localhost:{}{}'.format(
vnflcm_base.FAKE_SERVER_MANAGER.SERVER_PORT,
callback_url))
resp, response_body = self._register_subscription(request_body)
self.assertEqual(201, resp.status_code)
self.assert_http_header_location_for_subscription(resp.headers)
self.assert_notification_get(callback_url)
subscription_id = response_body.get('id')
self.addCleanup(self._delete_subscription, subscription_id)
subscription_id = self.register_subscription()
# Subscription show
resp, body = self._wait_show_subscription(subscription_id)
@@ -855,7 +759,6 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
self._wait_lcm_done(vnf_instance_id=vnf_instance_id)
self.assert_create_vnf(resp, vnf_instance, vnf_package_id)
vnf_instance_name = vnf_instance['vnfInstanceName']
self.addCleanup(self._delete_vnf_instance, vnf_instance_id)
# Instantiate vnf instance
request_body = fake_vnflcm.VnfInstances.make_inst_request_body(
@@ -879,7 +782,7 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
# Get VNF image after instantiate VDU2
image_before_update = self._get_heat_stack_show(
vnf_instance_id, 'VDU2')
vnf_instance, 'VDU2')
self.assertIsNotNone(
image_before_update,
"failed to retrieve image")
@@ -916,13 +819,13 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
self.assert_heal_vnf(resp, vnf_instance_id, vnf_package_id)
# Check of Image changes after heal
image_after_heal = self._get_heat_stack_show(vnf_instance_id, 'VDU2')
image_after_heal = self._get_heat_stack_show(vnf_instance, 'VDU2')
self.assertIsNotNone(
image_after_heal, "failed to retrieve image")
self.assertNotEqual(image_before_update, image_after_heal)
# Terminate VNF
stack = self._get_heat_stack(vnf_instance_id)
stack = self._get_heat_stack(vnf_instance)
resources_list = self._get_heat_resource_list(stack.id)
resource_name_list = [r.resource_name for r in resources_list]
glance_image_id_list = self._get_glance_image_list_from_stack_resource(
@@ -947,11 +850,7 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
self.assert_delete_vnf(resp, vnf_instance_id, vnf_package_id)
# Subscription delete
resp, response_body = self._delete_subscription(subscription_id)
self.assertEqual(204, resp.status_code)
resp, show_body = self._show_subscription(subscription_id)
self.assertEqual(404, resp.status_code)
self.assert_subscription_deletion(subscription_id)
def test_stack_param_heal_term(self):
"""Test basic life cycle operations.
@@ -976,18 +875,7 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
- Delete subscription.
"""
# Create subscription and register it.
callback_url = os.path.join(vnflcm_base.MOCK_NOTIFY_CALLBACK_URL,
self._testMethodName)
request_body = fake_vnflcm.Subscription.make_create_request_body(
'http://localhost:{}{}'.format(
vnflcm_base.FAKE_SERVER_MANAGER.SERVER_PORT,
callback_url))
resp, response_body = self._register_subscription(request_body)
self.assertEqual(201, resp.status_code)
self.assert_http_header_location_for_subscription(resp.headers)
self.assert_notification_get(callback_url)
subscription_id = response_body.get('id')
self.addCleanup(self._delete_subscription, subscription_id)
subscription_id = self.register_subscription()
# Subscription show
resp, body = self._wait_show_subscription(subscription_id)
@@ -1083,7 +971,6 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
self._wait_lcm_done(vnf_instance_id=vnf_instance_id)
self.assert_create_vnf(resp, vnf_instance, vnf_package_id)
vnf_instance_name = vnf_instance['vnfInstanceName']
self.addCleanup(self._delete_vnf_instance, vnf_instance_id)
# Instantiate vnf instance
request_body = fake_vnflcm.VnfInstances.make_inst_request_body(
@@ -1137,13 +1024,13 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
self.assert_heal_vnf(resp, vnf_instance_id, vnf_package_id)
# Check of stack param desired_capacity existence in stack
stack_after_heal = self._get_heat_stack_show(vnf_instance_id)
stack_after_heal = self._get_heat_stack_show(vnf_instance)
self.assertIsNotNone(
stack_after_heal, "failed to retrieve stack")
self.assertIsNotNone(stack_after_heal.get('desired_capacity'))
# Terminate VNF
stack = self._get_heat_stack(vnf_instance_id)
stack = self._get_heat_stack(vnf_instance)
resources_list = self._get_heat_resource_list(stack.id)
resource_name_list = [r.resource_name for r in resources_list]
glance_image_id_list = self._get_glance_image_list_from_stack_resource(
@@ -1168,11 +1055,7 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
self.assert_delete_vnf(resp, vnf_instance_id, vnf_package_id)
# Subscription delete
resp, response_body = self._delete_subscription(subscription_id)
self.assertEqual(204, resp.status_code)
resp, show_body = self._show_subscription(subscription_id)
self.assertEqual(404, resp.status_code)
self.assert_subscription_deletion(subscription_id)
def test_inst_update_pkgid_heal_all(self):
"""Test basic life cycle operations with pkg update.
@@ -1192,18 +1075,7 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
- Delete subscription.
"""
# Create subscription and register it.
callback_url = os.path.join(vnflcm_base.MOCK_NOTIFY_CALLBACK_URL,
self._testMethodName)
request_body = fake_vnflcm.Subscription.make_create_request_body(
'http://localhost:{}{}'.format(
vnflcm_base.FAKE_SERVER_MANAGER.SERVER_PORT,
callback_url))
resp, response_body = self._register_subscription(request_body)
self.assertEqual(201, resp.status_code)
self.assert_http_header_location_for_subscription(resp.headers)
self.assert_notification_get(callback_url)
subscription_id = response_body.get('id')
self.addCleanup(self._delete_subscription, subscription_id)
subscription_id = self.register_subscription()
# Pre Setting: Create vnf package.
sample_name = 'functional'
@@ -1225,7 +1097,6 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
vnf_instance_id = vnf_instance['id']
self._wait_lcm_done(vnf_instance_id=vnf_instance_id)
self.assert_create_vnf(resp, vnf_instance, vnf_package_id)
self.addCleanup(self._delete_vnf_instance, vnf_instance_id)
# Instantiate vnf instance
request_body = fake_vnflcm.VnfInstances.make_inst_request_body(
@@ -1237,7 +1108,7 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
# Heal vnf (do not specify vnfc_instace_id)
# pre check heat status.
self.assert_heat_stack_status(vnf_instance_id)
self.assert_heat_stack_status(vnf_instance)
request_body = fake_vnflcm.VnfInstances.make_heal_request_body()
resp, _ = self._heal_vnf_instance(vnf_instance_id, request_body)
@@ -1269,7 +1140,7 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
vnf_package_id = update_vnf_package_id
# Terminate VNF
stack = self._get_heat_stack(vnf_instance_id)
stack = self._get_heat_stack(vnf_instance)
resources_list = self._get_heat_resource_list(stack.id)
resource_name_list = [r.resource_name for r in resources_list]
glance_image_id_list = self._get_glance_image_list_from_stack_resource(
@@ -1294,8 +1165,7 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
self.assert_delete_vnf(resp, vnf_instance_id, vnf_package_id)
# Subscription delete
resp, response_body = self._delete_subscription(subscription_id)
self.assertEqual(204, resp.status_code)
self.assert_subscription_deletion(subscription_id)
def test_instantiate_vnf_basehot_invalid(self):
"""Test instantiation operation with invalid HOT data.
@@ -1335,9 +1205,6 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
self.assertIsNotNone(vnf_instance['id'])
self.assertEqual(201, resp.status_code)
# Reserve deleting vnf instance
self.addCleanup(self._delete_vnf_instance, vnf_instance['id'])
request_body = vnflcm_base._create_instantiate_vnf_request_body(
"simple", vim_id=self.vim['id'], ext_vl=self.ext_vl,
add_params=add_params)
@@ -1382,9 +1249,6 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
self.assertIsNotNone(vnf_instance['id'])
self.assertEqual(201, resp.status_code)
# Reserve deleting vnf instance
self.addCleanup(self._delete_vnf_instance, vnf_instance['id'])
request_body = \
vnflcm_base._create_instantiate_vnf_request_body("simple",
vim_id=self.vim['id'],
@@ -1432,9 +1296,6 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
self.assertIsNotNone(vnf_instance['id'])
self.assertEqual(201, resp.status_code)
# Reserve deleting vnf instance
self.addCleanup(self._delete_vnf_instance, vnf_instance['id'])
request_body = \
vnflcm_base._create_instantiate_vnf_request_body("simple",
vim_id=self.vim['id'],
@@ -1483,9 +1344,6 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
self.assertIsNotNone(vnf_instance['id'])
self.assertEqual(201, resp.status_code)
# Reserve deleting vnf instance
self.addCleanup(self._delete_vnf_instance, vnf_instance['id'])
request_body = \
vnflcm_base._create_instantiate_vnf_request_body("simple",
vim_id=self.vim['id'],
@@ -1535,9 +1393,6 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
self.assertIsNotNone(vnf_instance['id'])
self.assertEqual(201, resp.status_code)
# Reserve deleting vnf instance
self.addCleanup(self._delete_vnf_instance, vnf_instance['id'])
request_body = vnflcm_base._create_instantiate_vnf_request_body(
"simple", vim_id=self.vim['id'], ext_vl=self.ext_vl,
add_params=add_params)
@@ -1562,20 +1417,7 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
- Delete subscription.
"""
# Create subscription and register it.
callback_url = os.path.join(vnflcm_base.MOCK_NOTIFY_CALLBACK_URL,
self._testMethodName)
request_body = fake_vnflcm.Subscription.make_create_request_body(
'http://localhost:{}{}'.format(
vnflcm_base.FAKE_SERVER_MANAGER.SERVER_PORT,
callback_url))
resp, response_body = self._register_subscription(request_body)
self.assertEqual(201, resp.status_code)
self.assert_http_header_location_for_subscription(resp.headers)
subscription_id = response_body.get('id')
self.addCleanup(self._delete_subscription, subscription_id)
# Test notification
self.assert_notification_get(callback_url)
subscription_id = self.register_subscription()
# Pre Setting: Create vnf package.
sample_name = 'functional3'
@@ -1599,7 +1441,6 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
vnf_instance_id = vnf_instance['id']
self._wait_lcm_done(vnf_instance_id=vnf_instance_id)
self.assert_create_vnf(resp, vnf_instance, vnf_package_id)
self.addCleanup(self._delete_vnf_instance, vnf_instance_id)
# Failed instantiate VNF
request_body = fake_vnflcm.VnfInstances.make_inst_request_body(
@@ -1669,20 +1510,7 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
- Delete subscription.
"""
# Create subscription and register it.
callback_url = os.path.join(vnflcm_base.MOCK_NOTIFY_CALLBACK_URL,
self._testMethodName)
request_body = fake_vnflcm.Subscription.make_create_request_body(
'http://localhost:{}{}'.format(
vnflcm_base.FAKE_SERVER_MANAGER.SERVER_PORT,
callback_url))
resp, response_body = self._register_subscription(request_body)
self.assertEqual(201, resp.status_code)
self.assert_http_header_location_for_subscription(resp.headers)
subscription_id = response_body.get('id')
self.addCleanup(self._delete_subscription, subscription_id)
# Test notification
self.assert_notification_get(callback_url)
subscription_id = self.register_subscription()
# Pre Setting: Create vnf package.
sample_name = 'functional4'
@@ -1706,7 +1534,6 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
vnf_instance_id = vnf_instance['id']
self._wait_lcm_done(vnf_instance_id=vnf_instance_id)
self.assert_create_vnf(resp, vnf_instance, vnf_package_id)
self.addCleanup(self._delete_vnf_instance, vnf_instance_id)
# instantiate VNF
request_body = fake_vnflcm.VnfInstances.make_inst_request_body(
@@ -1757,7 +1584,7 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
self._assert_occ_list(resp, op_occs_info)
# Terminate VNF
stack = self._get_heat_stack(vnf_instance_id)
stack = self._get_heat_stack(vnf_instance)
resources_list = self._get_heat_resource_list(stack.id)
resource_name_list = [r.resource_name for r in resources_list]
glance_image_id_list = self._get_glance_image_list_from_stack_resource(
@@ -1796,18 +1623,7 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
- Delete subscription.
"""
# Create subscription and register it.
callback_url = os.path.join(vnflcm_base.MOCK_NOTIFY_CALLBACK_URL,
self._testMethodName)
request_body = fake_vnflcm.Subscription.make_create_request_body(
'http://localhost:{}{}'.format(
vnflcm_base.FAKE_SERVER_MANAGER.SERVER_PORT,
callback_url))
resp, response_body = self._register_subscription(request_body)
self.assertEqual(201, resp.status_code)
self.assert_http_header_location_for_subscription(resp.headers)
self.assert_notification_get(callback_url)
subscription_id = response_body.get('id')
self.addCleanup(self._delete_subscription, subscription_id)
subscription_id = self.register_subscription()
# Pre Setting: Create vnf package.
sample_name = 'functional3'
@@ -1831,7 +1647,6 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
vnf_instance_id = vnf_instance['id']
self._wait_lcm_done(vnf_instance_id=vnf_instance_id)
self.assert_create_vnf(resp, vnf_instance, vnf_package_id)
self.addCleanup(self._delete_vnf_instance, vnf_instance_id)
# Failed instantiate VNF
request_body = fake_vnflcm.VnfInstances.make_inst_request_body(
@@ -1894,18 +1709,7 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
- Delete subscription.
"""
# Create subscription and register it.
callback_url = os.path.join(vnflcm_base.MOCK_NOTIFY_CALLBACK_URL,
self._testMethodName)
request_body = fake_vnflcm.Subscription.make_create_request_body(
'http://localhost:{}{}'.format(
vnflcm_base.FAKE_SERVER_MANAGER.SERVER_PORT,
callback_url))
resp, response_body = self._register_subscription(request_body)
self.assertEqual(201, resp.status_code)
self.assert_http_header_location_for_subscription(resp.headers)
self.assert_notification_get(callback_url)
subscription_id = response_body.get('id')
self.addCleanup(self._delete_subscription, subscription_id)
subscription_id = self.register_subscription()
# Pre Setting: Create vnf package.
sample_name = 'functional4'
@@ -1929,7 +1733,6 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
vnf_instance_id = vnf_instance['id']
self._wait_lcm_done(vnf_instance_id=vnf_instance_id)
self.assert_create_vnf(resp, vnf_instance, vnf_package_id)
self.addCleanup(self._delete_vnf_instance, vnf_instance_id)
# instantiate VNF
request_body = fake_vnflcm.VnfInstances.make_inst_request_body(
@@ -1975,7 +1778,7 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
self._assert_occ_list(resp, op_occs_info)
# Terminate VNF
stack = self._get_heat_stack(vnf_instance_id)
stack = self._get_heat_stack(vnf_instance)
resources_list = self._get_heat_resource_list(stack.id)
resource_name_list = [r.resource_name for r in resources_list]
glance_image_id_list = self._get_glance_image_list_from_stack_resource(
@@ -2014,20 +1817,7 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
- Delete subscription.
"""
# Create subscription and register it.
request_body = fake_vnflcm.Subscription.make_create_request_body(
'http://localhost:{}{}'.format(
vnflcm_base.FAKE_SERVER_MANAGER.SERVER_PORT,
os.path.join(vnflcm_base.MOCK_NOTIFY_CALLBACK_URL,
self._testMethodName)))
resp, response_body = self._register_subscription(request_body)
self.assertEqual(201, resp.status_code)
self.assert_http_header_location_for_subscription(resp.headers)
subscription_id = response_body.get('id')
self.addCleanup(self._delete_subscription, subscription_id)
self.assert_notification_get(
os.path.join(vnflcm_base.MOCK_NOTIFY_CALLBACK_URL,
self._testMethodName))
subscription_id = self.register_subscription()
# Pre Setting: Create vnf package.
sample_name = 'functional3'
@@ -2051,7 +1841,6 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
vnf_instance_id = vnf_instance['id']
self._wait_lcm_done(vnf_instance_id=vnf_instance_id)
self.assert_create_vnf(resp, vnf_instance, vnf_package_id)
self.addCleanup(self._delete_vnf_instance, vnf_instance_id)
# Failed instantiate VNF
request_body = fake_vnflcm.VnfInstances.make_inst_request_body(
@@ -2088,7 +1877,7 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
self._assert_occ_list(resp, op_occs_info)
# Delete Stack
stack = self._get_heat_stack(vnf_instance_id)
stack = self._get_heat_stack(vnf_instance)
self._delete_heat_stack(stack.id)
self._wait_until_stack_ready(
stack.id, infra_cnst.STACK_DELETE_COMPLETE)
@@ -2120,20 +1909,7 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
- Delete subscription.
"""
# Create subscription and register it.
request_body = fake_vnflcm.Subscription.make_create_request_body(
'http://localhost:{}{}'.format(
vnflcm_base.FAKE_SERVER_MANAGER.SERVER_PORT,
os.path.join(vnflcm_base.MOCK_NOTIFY_CALLBACK_URL,
self._testMethodName)))
resp, response_body = self._register_subscription(request_body)
self.assertEqual(201, resp.status_code)
self.assert_http_header_location_for_subscription(resp.headers)
subscription_id = response_body.get('id')
self.addCleanup(self._delete_subscription, subscription_id)
self.assert_notification_get(
os.path.join(vnflcm_base.MOCK_NOTIFY_CALLBACK_URL,
self._testMethodName))
subscription_id = self.register_subscription()
# Pre Setting: Create vnf package.
sample_name = 'functional4'
@@ -2157,7 +1933,6 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
vnf_instance_id = vnf_instance['id']
self._wait_lcm_done(vnf_instance_id=vnf_instance_id)
self.assert_create_vnf(resp, vnf_instance, vnf_package_id)
self.addCleanup(self._delete_vnf_instance, vnf_instance_id)
# instantiate VNF
request_body = fake_vnflcm.VnfInstances.make_inst_request_body(
@@ -2202,7 +1977,7 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
self._assert_occ_list(resp, op_occs_info)
# Terminate VNF
stack = self._get_heat_stack(vnf_instance_id)
stack = self._get_heat_stack(vnf_instance)
resources_list = self._get_heat_resource_list(stack.id)
resource_name_list = [r.resource_name for r in resources_list]
glance_image_id_list = self._get_glance_image_list_from_stack_resource(
@@ -2241,20 +2016,7 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
- Delete subscription.
"""
# Create subscription and register it.
callback_url = os.path.join(vnflcm_base.MOCK_NOTIFY_CALLBACK_URL,
self._testMethodName)
request_body = fake_vnflcm.Subscription.make_create_request_body(
'http://localhost:{}{}'.format(
vnflcm_base.FAKE_SERVER_MANAGER.SERVER_PORT,
callback_url))
resp, response_body = self._register_subscription(request_body)
self.assertEqual(201, resp.status_code)
self.assert_http_header_location_for_subscription(resp.headers)
subscription_id = response_body.get('id')
self.addCleanup(self._delete_subscription, subscription_id)
# Test notification
self.assert_notification_get(callback_url)
subscription_id = self.register_subscription()
# Pre Setting: Create vnf package.
sample_name = 'functional4'
@@ -2278,7 +2040,6 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
vnf_instance_id = vnf_instance['id']
self._wait_lcm_done(vnf_instance_id=vnf_instance_id)
self.assert_create_vnf(resp, vnf_instance, vnf_package_id)
self.addCleanup(self._delete_vnf_instance, vnf_instance_id)
# Instantiate vnf instance
request_body = fake_vnflcm.VnfInstances.make_inst_request_body(
@@ -2293,7 +2054,7 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
self.assertEqual(200, resp.status_code)
# Delete StacK
stack = self._get_heat_stack(vnf_instance_id)
stack = self._get_heat_stack(vnf_instance)
self._delete_heat_stack(stack.id)
self._wait_until_stack_ready(stack.id,
infra_cnst.STACK_DELETE_COMPLETE)
@@ -2387,12 +2148,6 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
self.tacker_client, vnf_pkg_id)
self.assert_vnf_package_usage_state(vnf_pkg_info)
def _assert_subscription_deletion(self, sub_id):
resp, _ = self._delete_subscription(sub_id)
self.assertEqual(204, resp.status_code)
resp, _ = self._show_subscription(sub_id)
self.assertEqual(404, resp.status_code)
def _assert_scale_vnf(self, resp, vnf_instance_id, vnf_pkg_id,
pre_stack_resource_list, post_stack_resource_list, scale_type,
expected_stack_status, expected_show_res=None):
@@ -2456,7 +2211,7 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
expected_usage_state,
vnf_package_info['usageState'])
def _get_fixed_ips(self, vnf_instance_id, request_body):
def _get_fixed_ips(self, vnf_instance, request_body):
res_name = None
for extvirlink in request_body['extVirtualLinks']:
if 'extCps' not in extvirlink:
@@ -2470,7 +2225,7 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
if res_name is None:
return []
stack = self._get_heat_stack(vnf_instance_id)
stack = self._get_heat_stack(vnf_instance)
stack_id = stack.id
stack_resource = self._get_heat_resource_list(stack_id, nested_depth=2)
@@ -2628,22 +2383,7 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
- Delete subscription
"""
# Create subscription and register it.
callback_url = os.path.join(vnflcm_base.MOCK_NOTIFY_CALLBACK_URL,
self._testMethodName)
request_body = fake_vnflcm.Subscription.make_create_request_body(
'http://localhost:{}{}'.format(
vnflcm_base.FAKE_SERVER_MANAGER.SERVER_PORT,
callback_url))
resp, response_body = self._register_subscription(request_body)
self.assertEqual(201, resp.status_code)
self.assert_http_header_location_for_subscription(resp.headers)
subscription_id = response_body.get('id')
self.addCleanup(
self._delete_subscription,
subscription_id)
# Test notification
self.assert_notification_get(callback_url)
subscription_id = self.register_subscription()
# Subscription show
resp, body = self._wait_show_subscription(subscription_id)
@@ -2674,7 +2414,6 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
self._wait_lcm_done(vnf_instance_id=vnf_instance_id)
self.assert_create_vnf(resp, vnf_instance, vnf_package_id)
vnf_instance_name = vnf_instance['vnfInstanceName']
self.addCleanup(self._delete_vnf_instance, vnf_instance_id)
# Instantiate vnf instance
request_body = fake_vnflcm.VnfInstances.make_inst_request_body(
@@ -2701,11 +2440,11 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
fake_vnflcm.VnfInstances.make_change_ext_conn_request_body(
self.vim['tenant_id'], self.changed_ext_networks,
self.changed_ext_subnets)
before_fixed_ips = self._get_fixed_ips(vnf_instance_id, request_body)
before_fixed_ips = self._get_fixed_ips(vnf_instance, request_body)
resp, _ = \
self._change_ext_conn_vnf_instance(vnf_instance_id, request_body)
self._wait_lcm_done('COMPLETED', vnf_instance_id=vnf_instance_id)
after_fixed_ips = self._get_fixed_ips(vnf_instance_id, request_body)
after_fixed_ips = self._get_fixed_ips(vnf_instance, request_body)
self.assertNotEqual(before_fixed_ips, after_fixed_ips)
callback_url = os.path.join(
@@ -2725,7 +2464,7 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
self._assert_occ_show(resp, op_occs_info)
# Terminate VNF
stack = self._get_heat_stack(vnf_instance_id)
stack = self._get_heat_stack(vnf_instance)
resources_list = self._get_heat_resource_list(stack.id)
resource_name_list = [r.resource_name for r in resources_list]
glance_image_id_list = \
@@ -2745,8 +2484,4 @@ class VnfLcmWithUserDataTest(vnflcm_base.BaseVnfLcmTest):
self.assert_delete_vnf(resp, vnf_instance_id, vnf_package_id)
# Subscription delete
resp, response_body = self._delete_subscription(subscription_id)
self.assertEqual(204, resp.status_code)
resp, _ = self._show_subscription(subscription_id)
self.assertEqual(404, resp.status_code)
self.assert_subscription_deletion(subscription_id)
@@ -103,8 +103,7 @@ class VnfLcmWithNfvoSeparator(vnflcm_base.BaseVnfLcmTest):
- Get opOccs information.
- Terminate VNF.
- Delete VNF.
- Delete subscription.
- Show subscription.
- Delete and Show subscription.
"""
vnf_package_info = self._register_vnf_package_mock_response()
glance_image = fake_grant.Grant.get_sw_image()
@@ -115,20 +114,7 @@ class VnfLcmWithNfvoSeparator(vnflcm_base.BaseVnfLcmTest):
[zone.zone for zone in availability_zone_info
if zone.binary == 'nova-compute']))
# Create subscription and register it.
callback_url = os.path.join(vnflcm_base.MOCK_NOTIFY_CALLBACK_URL,
self._testMethodName)
request_body = fake_vnflcm.Subscription.make_create_request_body(
'http://localhost:{}{}'.format(
vnflcm_base.FAKE_SERVER_MANAGER.SERVER_PORT,
callback_url))
resp, response_body = self._register_subscription(request_body)
self.assertEqual(201, resp.status_code)
self.assert_http_header_location_for_subscription(resp.headers)
subscription_id = response_body.get('id')
self.addCleanup(self._delete_subscription, subscription_id)
# Test notification
self.assert_notification_get(callback_url)
subscription_id = self.register_subscription()
# Create vnf instance
resp, vnf_instance = self._create_vnf_instance_from_body(
@@ -138,7 +124,6 @@ class VnfLcmWithNfvoSeparator(vnflcm_base.BaseVnfLcmTest):
self._wait_lcm_done(vnf_instance_id=vnf_instance_id)
self._assert_create_vnf(resp, vnf_instance)
vnf_instance_name = vnf_instance['vnfInstanceName']
self.addCleanup(self._delete_vnf_instance, vnf_instance_id)
# Set Fake server response for Grant-Req(Instantiate)
vnflcm_base.FAKE_SERVER_MANAGER.set_callback('POST',
@@ -187,11 +172,11 @@ class VnfLcmWithNfvoSeparator(vnflcm_base.BaseVnfLcmTest):
fake_vnflcm.VnfInstances.make_change_ext_conn_request_body(
self.vim['tenant_id'], self.changed_ext_networks,
self.changed_ext_subnets)
before_fixed_ips = self._get_fixed_ips(vnf_instance_id, request_body)
before_fixed_ips = self._get_fixed_ips(vnf_instance, request_body)
resp, _ = \
self._change_ext_conn_vnf_instance(vnf_instance_id, request_body)
self._wait_lcm_done('COMPLETED', vnf_instance_id=vnf_instance_id)
after_fixed_ips = self._get_fixed_ips(vnf_instance_id, request_body)
after_fixed_ips = self._get_fixed_ips(vnf_instance, request_body)
self.assertNotEqual(before_fixed_ips, after_fixed_ips)
vnflcm_base.FAKE_SERVER_MANAGER.clear_history(
fake_grant.Grant.GRANT_REQ_PATH)
@@ -220,7 +205,7 @@ class VnfLcmWithNfvoSeparator(vnflcm_base.BaseVnfLcmTest):
req_body: fake_grant.Grant.make_term_response_body(req_body))
# Get stack informations to terminate.
stack = self._get_heat_stack(vnf_instance_id)
stack = self._get_heat_stack(vnf_instance)
resources_list = self._get_heat_resource_list(stack.id)
resource_name_list = [r.resource_name for r in resources_list]
glance_image_id_list = self._get_glance_image_list_from_stack_resource(
@@ -239,13 +224,8 @@ class VnfLcmWithNfvoSeparator(vnflcm_base.BaseVnfLcmTest):
self._wait_lcm_done(vnf_instance_id=vnf_instance_id)
self.assert_delete_vnf(resp, vnf_instance_id)
# Delete Subscription
resp, response_body = self._delete_subscription(subscription_id)
self.assertEqual(204, resp.status_code)
# Check subscription was deleted
resp, show_body = self._show_subscription(subscription_id)
self.assertEqual(404, resp.status_code)
# Delete and Show Subscription
self.assert_subscription_deletion(subscription_id)
# TODO(yasufum): Fix the timeout issue waiting for _wait_lcm_done().
@unittest.skip("Skip for terminating VNF is timeouted.")
@@ -271,18 +251,7 @@ class VnfLcmWithNfvoSeparator(vnflcm_base.BaseVnfLcmTest):
if zone.binary == 'nova-compute']))
# Create subscription and register it.
callback_url = os.path.join(vnflcm_base.MOCK_NOTIFY_CALLBACK_URL,
self._testMethodName)
request_body = fake_vnflcm.Subscription.make_create_request_body(
'http://localhost:{}{}'.format(
vnflcm_base.FAKE_SERVER_MANAGER.SERVER_PORT,
callback_url))
resp, response_body = self._register_subscription(request_body)
self.assertEqual(201, resp.status_code)
self.assert_http_header_location_for_subscription(resp.headers)
self.assert_notification_get(callback_url)
subscription_id = response_body.get('id')
self.addCleanup(self._delete_subscription, subscription_id)
subscription_id = self.register_subscription()
# Create vnf instance
resp, vnf_instance = self._create_vnf_instance_from_body(
@@ -291,7 +260,6 @@ class VnfLcmWithNfvoSeparator(vnflcm_base.BaseVnfLcmTest):
vnf_instance_id = vnf_instance.get('id')
self._wait_lcm_done(vnf_instance_id=vnf_instance_id)
self._assert_create_vnf(resp, vnf_instance)
self.addCleanup(self._delete_vnf_instance, vnf_instance_id)
# Set Fake server response for Grant-Req(Instantiate)
vnflcm_base.FAKE_SERVER_MANAGER.set_callback('POST',
@@ -312,7 +280,7 @@ class VnfLcmWithNfvoSeparator(vnflcm_base.BaseVnfLcmTest):
resp, _ = self._instantiate_vnf_instance(vnf_instance_id, request_body)
self._wait_lcm_done('COMPLETED', vnf_instance_id=vnf_instance_id)
self._assert_instantiate_vnf(resp, vnf_instance_id)
self._assert_stack_template(vnf_instance_id)
self._assert_stack_template(vnf_instance)
# Show vnf instance
resp, vnf_instance = self._show_vnf_instance(vnf_instance_id)
@@ -342,7 +310,7 @@ class VnfLcmWithNfvoSeparator(vnflcm_base.BaseVnfLcmTest):
resp, _ = self._heal_vnf_instance(vnf_instance_id, request_body)
self._wait_lcm_done('COMPLETED', vnf_instance_id=vnf_instance_id)
self._assert_heal_vnf(resp, vnf_instance_id)
self._assert_stack_template(vnf_instance_id)
self._assert_stack_template(vnf_instance)
# Set Fake server response for Grant-Req(Terminate)
vnflcm_base.FAKE_SERVER_MANAGER.set_callback('POST',
@@ -351,7 +319,7 @@ class VnfLcmWithNfvoSeparator(vnflcm_base.BaseVnfLcmTest):
req_body: fake_grant.Grant.make_term_response_body(req_body))
# Get stack informations to terminate.
stack = self._get_heat_stack(vnf_instance_id)
stack = self._get_heat_stack(vnf_instance)
resources_list = self._get_heat_resource_list(stack.id)
resource_name_list = [r.resource_name for r in resources_list]
glance_image_id_list = self._get_glance_image_list_from_stack_resource(
@@ -401,18 +369,7 @@ class VnfLcmWithNfvoSeparator(vnflcm_base.BaseVnfLcmTest):
if zone.binary == 'nova-compute']))
# Create subscription and register it.
callback_url = os.path.join(vnflcm_base.MOCK_NOTIFY_CALLBACK_URL,
self._testMethodName)
request_body = fake_vnflcm.Subscription.make_create_request_body(
'http://localhost:{}{}'.format(
vnflcm_base.FAKE_SERVER_MANAGER.SERVER_PORT,
callback_url))
resp, response_body = self._register_subscription(request_body)
self.assertEqual(201, resp.status_code)
self.assert_http_header_location_for_subscription(resp.headers)
self.assert_notification_get(callback_url)
subscription_id = response_body.get('id')
self.addCleanup(self._delete_subscription, subscription_id)
subscription_id = self.register_subscription()
# Create vnf instance
resp, vnf_instance = self._create_vnf_instance_from_body(
@@ -421,7 +378,6 @@ class VnfLcmWithNfvoSeparator(vnflcm_base.BaseVnfLcmTest):
vnf_instance_id = vnf_instance.get('id')
self._wait_lcm_done(vnf_instance_id=vnf_instance_id)
self._assert_create_vnf(resp, vnf_instance)
self.addCleanup(self._delete_vnf_instance, vnf_instance_id)
# Set Fake server response for Grant-Req(Instantiate)
vnflcm_base.FAKE_SERVER_MANAGER.set_callback('POST',
@@ -442,7 +398,7 @@ class VnfLcmWithNfvoSeparator(vnflcm_base.BaseVnfLcmTest):
resp, _ = self._instantiate_vnf_instance(vnf_instance_id, request_body)
self._wait_lcm_done('COMPLETED', vnf_instance_id=vnf_instance_id)
self._assert_instantiate_vnf(resp, vnf_instance_id)
self._assert_stack_template_scale(vnf_instance_id)
self._assert_stack_template_scale(vnf_instance)
# Show vnf instance
resp, vnf_instance = self._show_vnf_instance(vnf_instance_id)
@@ -461,7 +417,7 @@ class VnfLcmWithNfvoSeparator(vnflcm_base.BaseVnfLcmTest):
zone_name_list))
# Scale-out vnf instance
stack = self._get_heat_stack(vnf_instance_id)
stack = self._get_heat_stack(vnf_instance)
pre_stack_resource_list = self._get_heat_resource_list(stack.id, 2)
request_body = fake_vnflcm.VnfInstances.\
make_scale_request_body('SCALE_OUT')
@@ -485,7 +441,7 @@ class VnfLcmWithNfvoSeparator(vnflcm_base.BaseVnfLcmTest):
zone_name_list))
# Scale-in vnf instance
stack = self._get_heat_stack(vnf_instance_id)
stack = self._get_heat_stack(vnf_instance)
pre_stack_resource_list = self._get_heat_resource_list(stack.id, 2)
request_body = fake_vnflcm.VnfInstances.make_scale_request_body(
@@ -506,7 +462,7 @@ class VnfLcmWithNfvoSeparator(vnflcm_base.BaseVnfLcmTest):
req_body: fake_grant.Grant.make_term_response_body(req_body))
# Get stack informations to terminate.
stack = self._get_heat_stack(vnf_instance_id)
stack = self._get_heat_stack(vnf_instance)
resources_list = self._get_heat_resource_list(stack.id)
resource_name_list = [r.resource_name for r in resources_list]
glance_image_id_list = self._get_glance_image_list_from_stack_resource(
@@ -689,7 +645,7 @@ class VnfLcmWithNfvoSeparator(vnflcm_base.BaseVnfLcmTest):
self.assertIsNotNone(_links.get('grant'))
self.assertIsNotNone(_links.get('grant').get('href'))
def _get_fixed_ips(self, vnf_instance_id, request_body):
def _get_fixed_ips(self, vnf_instance, request_body):
res_name = None
for extvirlink in request_body['extVirtualLinks']:
if 'extCps' not in extvirlink:
@@ -702,7 +658,7 @@ class VnfLcmWithNfvoSeparator(vnflcm_base.BaseVnfLcmTest):
break
self.assertTrue(res_name)
stack = self._get_heat_stack(vnf_instance_id)
stack = self._get_heat_stack(vnf_instance)
stack_id = stack.id
stack_resource = self._get_heat_resource_list(stack_id, nested_depth=2)
@@ -730,22 +686,22 @@ class VnfLcmWithNfvoSeparator(vnflcm_base.BaseVnfLcmTest):
return ans_list
def _assert_stack_template(self, vnf_instance_id):
stack = self._get_heat_stack(vnf_instance_id)
def _assert_stack_template(self, vnf_instance):
stack = self._get_heat_stack(vnf_instance)
resources_list\
= self._get_heat_resource_list(stack.id, nested_depth=2)
stack_name_wd = vnf_instance_id + "-VDU2"
stack_name_wd = vnf_instance['id'] + "-VDU2"
physical_resource_id = [r.physical_resource_id for r
in resources_list if stack_name_wd in r.stack_name]
template = self._get_heat_stack_template(physical_resource_id[0])
template_count = str(template).count("flavor")
self.assertEqual(template_count, 3)
def _assert_stack_template_scale(self, vnf_instance_id):
stack = self._get_heat_stack(vnf_instance_id)
def _assert_stack_template_scale(self, vnf_instance):
stack = self._get_heat_stack(vnf_instance)
resources_list\
= self._get_heat_resource_list(stack.id, nested_depth=2)
stack_name_wd = vnf_instance_id + "-VDU1"
stack_name_wd = vnf_instance['id'] + "-VDU1"
physical_resource_id = [r.physical_resource_id for r
in resources_list if stack_name_wd in r.stack_name]
template = self._get_heat_stack_template(physical_resource_id[0])