From: ying.yunlong Date: Thu, 14 Sep 2017 03:05:57 +0000 (+0800) Subject: Delete ns instance from aai and add tests X-Git-Tag: v1.0.0~65 X-Git-Url: https://gerrit.onap.org/r/gitweb?a=commitdiff_plain;h=6c09834d403f1b68cd60cd00ad9402e018416da8;p=vfc%2Fnfvo%2Flcm.git Delete ns instance from aai and add tests Delete ns instance from aai and add the related unit test in lcm. Change-Id: Ie9a0f10a5da87aec502c6dce26ca910cacfcec19 Issue-ID: VFC-355 Signed-off-by: ying.yunlong --- diff --git a/lcm/ns/ns_terminate.py b/lcm/ns/ns_terminate.py index 95806573..c86ee9de 100644 --- a/lcm/ns/ns_terminate.py +++ b/lcm/ns/ns_terminate.py @@ -20,6 +20,7 @@ import time from lcm.ns.vnfs.wait_job import wait_job_finish from lcm.pub.database.models import NSInstModel, VLInstModel, FPInstModel, NfInstModel from lcm.pub.database.models import DefPkgMappingModel, InputParamMappingModel, ServiceBaseInfoModel +from lcm.pub.msapi.aai import get_customer_aai, delete_customer_aai from lcm.pub.utils.jobutil import JOB_MODEL_STATUS, JobUtil from lcm.pub.exceptions import NSLCMException from lcm.pub.msapi.nslcm import call_from_ns_cancel_resource @@ -262,6 +263,7 @@ class DeleteNsService(object): def do_biz(self): try: self.delete_ns() + self.delete_ns_in_aai() except: logger.error(traceback.format_exc()) @@ -277,3 +279,19 @@ class DeleteNsService(object): logger.debug("delele ServiceBaseInfoModel(%s)", self.ns_inst_id) ServiceBaseInfoModel.objects.filter(service_id=self.ns_inst_id).delete() + + def delete_ns_in_aai(self): + logger.debug("DeleteNsService::delete_ns_in_aai::delete ns instance[%s] in aai." % self.ns_inst_id) + global_customer_id = "global-customer-id-" + self.ns_inst_id + + # query ns instance in aai, get resource_version + customer_info = get_customer_aai(global_customer_id) + resource_version = customer_info["resource-version"] + + # delete ns instance from aai + resp_data, resp_status = delete_customer_aai(global_customer_id, resource_version) + if resp_data: + logger.debug("Fail to delete ns instance[%s] from aai, resp_status: [%s]." % (self.ns_inst_id, resp_status)) + else: + logger.debug( + "Success to delete ns instance[%s] from aai, resp_status: [%s]." % (self.ns_inst_id, resp_status)) diff --git a/lcm/ns/tests/test_ns_delete.py b/lcm/ns/tests/test_ns_delete.py new file mode 100644 index 00000000..846b6739 --- /dev/null +++ b/lcm/ns/tests/test_ns_delete.py @@ -0,0 +1,71 @@ +# Copyright 2017 ZTE Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +import json +import uuid + +import mock +from django.test import TestCase, Client +from rest_framework import status + +from lcm.pub.database.models import NSInstModel +from lcm.pub.utils import restcall + + +class TestNsDelelete(TestCase): + def setUp(self): + self.client = Client() + self.ns_inst_id = str(uuid.uuid1()) + NSInstModel.objects.filter().delete() + NSInstModel(id=self.ns_inst_id, nspackage_id="7", nsd_id="2").save() + + # self.nsd_id = str(uuid.uuid4()) + # self.ns_package_id = str(uuid.uuid4()) + # NSDModel(id=self.ns_package_id, nsd_id=self.nsd_id, name='name').save() + + def tearDown(self): + # NSDModel.objects.all().delete() + NSInstModel.objects.all().delete() + + @mock.patch.object(restcall, 'call_req') + def test_delete_ns(self, mock_call_req): + customer_info = { + "global-customer-id": "global-customer-id-9b9348f2-f75d-4559-823d-db7ac138ed34", + "subscriber-name": "subscriber-name-9b9348f2-f75d-4559-823d-db7ac138ed34", + "subscriber-type": "subscriber-type-9b9348f2-f75d-4559-823d-db7ac138ed34", + "resource-version": "1505350719754", + "service-subscriptions": { + "service-subscription": [ + { + "service-type": "service-type-9b9348f2-f75d-4559-823d-db7ac138ed34", + "resource-version": "1505350719887", + "service-instances": { + "service-instance": [ + { + "service-instance-id": "service-instance-id-9b9348f2-f75d-4559-823d-db7ac138ed34", + "service-instance-name": "service-instance-name-9b9348f2-f75d-4559-823d-db7ac138ed34", + "service-type": "service-type-9b9348f2-f75d-4559-823d-db7ac138ed34", + "service-role": "service-role-9b9348f2-f75d-4559-823d-db7ac138ed34", + "resource-version": "1505350720009" + } + ] + } + } + ] + } + } + r1_query_ns_to_aai = [0, json.JSONEncoder().encode(customer_info), '200'] + r2_delete_ns_to_aai = [0, json.JSONEncoder().encode({}), '200'] + mock_call_req.side_effect = [r1_query_ns_to_aai, r2_delete_ns_to_aai] + response = self.client.delete("/api/nslcm/v1/ns/%s" % self.ns_inst_id) + self.failUnlessEqual(status.HTTP_204_NO_CONTENT, response.status_code) diff --git a/lcm/pub/msapi/aai.py b/lcm/pub/msapi/aai.py index 402a9da8..51b13b89 100644 --- a/lcm/pub/msapi/aai.py +++ b/lcm/pub/msapi/aai.py @@ -49,7 +49,7 @@ def create_customer_aai(global_customer_id, data): def get_customer_aai(global_customer_id): - resource = "/business/customers/customer/%s" % global_customer_id + resource = "/business/customers/customer/%s?depth=all" % global_customer_id ret = call_aai(resource, "GET") if ret[0] != 0: logger.error("Status code is %s, detail is %s.", ret[2], ret[1]) @@ -65,7 +65,7 @@ def delete_customer_aai(global_customer_id, resource_version=""): if ret[0] != 0: logger.error("Status code is %s, detail is %s.", ret[2], ret[1]) raise NSLCMException("Customer delete exception in AAI") - return json.JSONDecoder().decode(ret[1]) + return json.JSONDecoder().decode(ret[1]), ret[2] def create_ns_aai(global_customer_id, service_type, service_instance_id, data):