diff options
author | 2017-08-16 16:41:12 +0800 | |
---|---|---|
committer | 2017-08-16 16:42:06 +0800 | |
commit | 8a195817b8891861d821f1672cb8ee5d96a86de8 (patch) | |
tree | 66c4d3d45852e45385f01b75a27a91fbae2b29a5 | |
parent | fb4160ad891151d0fbb15cdf887905f06b875009 (diff) |
Add ns distribute logic
Add unit test cases
Change-Id: I1b770ade73574314f68d60e6221ee7357d26c086
Issue-Id: VFC-99
Signed-off-by: fujinhua <fu.jinhua@zte.com.cn>
-rw-r--r-- | lcm/packages/tests/test_sdc_ns.py | 100 | ||||
-rw-r--r-- | lcm/pub/msapi/sdc.py | 8 |
2 files changed, 66 insertions, 42 deletions
diff --git a/lcm/packages/tests/test_sdc_ns.py b/lcm/packages/tests/test_sdc_ns.py index 6f9c52d2..0a2f415f 100644 --- a/lcm/packages/tests/test_sdc_ns.py +++ b/lcm/packages/tests/test_sdc_ns.py @@ -17,8 +17,9 @@ from rest_framework import status from django.test import TestCase from django.test import Client -from lcm.pub.utils import restcall +from lcm.pub.utils import restcall, toscaparser from lcm.pub.database.models import NSDModel, NSInstModel, NfPackageModel +from lcm.pub.msapi import sdc class TestSdcNsPackage(TestCase): @@ -229,43 +230,6 @@ class TestSdcNsPackage(TestCase): ], "type": "tosca.nodes.nfv.ext.zte.VNF.VFW", "networks": [] - }, - { - "vnf_id": "VNAT", - "description": "", - "properties": { - "NatIpRange": "192.167.0.10-192.168.0.20", - "plugin_info": "vbrasplugin_1.0", - "vendor": "zte", - "is_shared": False , - "adjust_vnf_capacity": True, - "name": "VNAT", - "id": "vcpe_vnat_zte_1", - "vnf_extend_type": "driver", - "csarVersion": "v1.0", - "csarType": "NFAR", - "csarProvider": "ZTE", - "version": "1.0", - "nsh_aware": True, - "cross_dc": False , - "vnf_type": "VNAT", - "vmnumber_overquota_alarm": True, - "vnfd_version": "1.0.0", - "externalPluginManageNetworkName": "vlan_4007_plugin_net", - "request_reclassification": False - }, - "dependencies": [ - { - "key_name": "vnat_ctrl_by_manager_cp", - "vl_id": "ext_mnet_net" - }, - { - "key_name": "vnat_data_cp", - "vl_id": "sfc_data_network" - } - ], - "type": "tosca.nodes.nfv.ext.zte.VNF.VNAT", - "networks": [] } ], "ns_exposed": { @@ -428,3 +392,63 @@ class TestSdcNsPackage(TestCase): self.assertEqual(resp.status_code, status.HTTP_202_ACCEPTED) self.assertEqual("failed", resp.data["status"]) self.assertEqual("NS CSAR(1) already exists.", resp.data["statusDescription"]) + + @mock.patch.object(restcall, 'call_req') + def test_ns_pkg_distribute_when_csar_not_exist(self, mock_call_req): + mock_call_req.return_value = [0, "[]", '200'] + resp = self.client.post("/api/nslcm/v1/nspackage", {"csarId": "1"}, format='json') + self.assertEqual(resp.status_code, status.HTTP_202_ACCEPTED) + self.assertEqual("failed", resp.data["status"]) + self.assertEqual("Failed to query artifact(services,1) from sdc.", resp.data["statusDescription"]) + + @mock.patch.object(restcall, 'call_req') + @mock.patch.object(sdc, 'download_artifacts') + @mock.patch.object(toscaparser, 'parse_nsd') + def test_ns_pkg_distribute_when_nsd_already_exists(self, + mock_parse_nsd, mock_download_artifacts, mock_call_req): + mock_parse_nsd.return_value = json.JSONEncoder().encode(self.nsd_data) + mock_download_artifacts.return_value = "/home/vcpe.csar" + mock_call_req.return_value = [0, json.JSONEncoder().encode([{ + "uuid": "1", + "toscaModelURL": "https://127.0.0.1:1234/sdc/v1/vcpe.csar" + }]), '200'] + NSDModel(id="2", nsd_id="VCPE_NS").save() + resp = self.client.post("/api/nslcm/v1/nspackage", {"csarId": "1"}, format='json') + self.assertEqual(resp.status_code, status.HTTP_202_ACCEPTED) + self.assertEqual("failed", resp.data["status"]) + self.assertEqual("NSD(VCPE_NS) already exists.", resp.data["statusDescription"]) + + @mock.patch.object(restcall, 'call_req') + @mock.patch.object(sdc, 'download_artifacts') + @mock.patch.object(toscaparser, 'parse_nsd') + def test_ns_pkg_distribute_when_nf_not_distributed(self, + mock_parse_nsd, mock_download_artifacts, mock_call_req): + mock_parse_nsd.return_value = json.JSONEncoder().encode(self.nsd_data) + mock_download_artifacts.return_value = "/home/vcpe.csar" + mock_call_req.return_value = [0, json.JSONEncoder().encode([{ + "uuid": "1", + "toscaModelURL": "https://127.0.0.1:1234/sdc/v1/vcpe.csar" + }]), '200'] + resp = self.client.post("/api/nslcm/v1/nspackage", {"csarId": "1"}, format='json') + self.assertEqual(resp.status_code, status.HTTP_202_ACCEPTED) + self.assertEqual("failed", resp.data["status"]) + self.assertEqual("VNF package(vcpe_vfw_zte_1_0) is not distributed.", resp.data["statusDescription"]) + + @mock.patch.object(restcall, 'call_req') + @mock.patch.object(sdc, 'download_artifacts') + @mock.patch.object(toscaparser, 'parse_nsd') + def test_ns_pkg_distribute_when_successfully(self, + mock_parse_nsd, mock_download_artifacts, mock_call_req): + mock_parse_nsd.return_value = json.JSONEncoder().encode(self.nsd_data) + mock_download_artifacts.return_value = "/home/vcpe.csar" + mock_call_req.return_value = [0, json.JSONEncoder().encode([{ + "uuid": "1", + "toscaModelURL": "https://127.0.0.1:1234/sdc/v1/vcpe.csar" + }]), '200'] + NfPackageModel(uuid="1", nfpackageid="1", vnfdid="vcpe_vfw_zte_1_0").save() + resp = self.client.post("/api/nslcm/v1/nspackage", {"csarId": "1"}, format='json') + self.assertEqual(resp.status_code, status.HTTP_202_ACCEPTED) + self.assertEqual("success", resp.data["status"]) + self.assertEqual("CSAR(1) distributed successfully.", resp.data["statusDescription"]) + + diff --git a/lcm/pub/msapi/sdc.py b/lcm/pub/msapi/sdc.py index 1d4569db..7a3e9394 100644 --- a/lcm/pub/msapi/sdc.py +++ b/lcm/pub/msapi/sdc.py @@ -16,7 +16,7 @@ import json import logging from lcm.pub.exceptions import NSLCMException -from lcm.pub.utils.restcall import call_req, rest_no_auth +from lcm.pub.utils import restcall from lcm.pub.config.config import SDC_BASE_URL, SDC_USER, SDC_PASSWD logger = logging.getLogger(__name__) @@ -25,10 +25,10 @@ ASSETTYPE_RESOURCES = "resources" ASSETTYPE_SERVICES = "services" def call_sdc(resource, method, content=''): - return call_req(base_url=SDC_BASE_URL, + return restcall.call_req(base_url=SDC_BASE_URL, user=SDC_USER, passwd=SDC_PASSWD, - auth_type=rest_no_auth, + auth_type=restcall.rest_no_auth, resource=resource, method=method, content=content) @@ -59,7 +59,7 @@ def delete_artifact(asset_type, asset_id, artifact_id): return json.JSONDecoder().decode(ret[1]) def download_artifacts(download_url, local_path): - ret = call_req(base_url=download_url, + ret = restcall.call_req(base_url=download_url, user=SDC_USER, passwd=SDC_PASSWD, auth_type=rest_no_auth, |