Deal with nfPackage 55/61755/1
authorbiancunkang <bian.cunkang@zte.com.cn>
Wed, 22 Aug 2018 03:36:40 +0000 (11:36 +0800)
committerbiancunkang <bian.cunkang@zte.com.cn>
Wed, 22 Aug 2018 03:36:40 +0000 (11:36 +0800)
Change-Id: I4a57906115fb4628ef4d2dcbbbd768d31e6679b5
Issue-ID: VFC-1038
Signed-off-by: biancunkang <bian.cunkang@zte.com.cn>
catalog/packages/tests/test_nf.py
catalog/packages/views/vnfpkg_views.py

index 428622b..d4a8b50 100644 (file)
@@ -15,6 +15,7 @@
 import json
 import os
 import mock
+import urllib2
 from rest_framework.test import APIClient
 from django.test import TestCase
 from rest_framework import status
@@ -25,6 +26,15 @@ from catalog.pub.database.models import VnfPackageModel
 from catalog.pub.msapi import sdc
 from catalog.pub.utils import restcall, toscaparser
 from catalog.pub.config.config import CATALOG_ROOT_PATH
+from catalog.packages.biz.nf_package import VnfpkgUploadThread
+
+
+class MockReq():
+    def read(self):
+        return "1"
+
+    def close(self):
+        pass
 
 
 class TestNfPackage(TestCase):
@@ -401,3 +411,10 @@ class TestNfPackage(TestCase):
         data = {'file': open(os.path.join(CATALOG_ROOT_PATH, "empty.txt"), "rb")}
         response = self.client.put("/api/vnfpkgm/v1/vnf_packages/222/package_content", data=data)
         self.assertEqual(response.status_code, status.HTTP_202_ACCEPTED)
+
+    @mock.patch.object(urllib2, 'urlopen')
+    def test_upload_nf_pkg(self, mock_urlopen):
+        req_data = {"addressInformation": "https://127.0.0.1:1234/sdc/v1/hss.csar"}
+        mock_urlopen.return_value = MockReq()
+        vnfPkgId = "222"
+        VnfpkgUploadThread(req_data, vnfPkgId).run()
index 98c6dd9..0b48702 100644 (file)
@@ -20,6 +20,9 @@ from drf_yasg.utils import swagger_auto_schema
 from rest_framework import status\r
 from rest_framework.views import APIView\r
 from rest_framework.response import Response\r
+from catalog.packages.biz.nf_package import VnfpkgUploadThread\r
+from catalog.pub.exceptions import CatalogException\r
+from catalog.packages.serializers.upload_vnf_pkg_from_uri_req import UploadVnfPackageFromUriRequestSerializer\r
 \r
 logger = logging.getLogger(__name__)\r
 \r
@@ -144,15 +147,26 @@ class upload_from_uri(APIView):
         return None\r
 \r
     @swagger_auto_schema(\r
-        # request_body=CreateVnfReqSerializer(),\r
+        request_body=UploadVnfPackageFromUriRequestSerializer(),\r
         responses={\r
-            #     status.HTTP_201_CREATED: CreateVnfRespSerializer(),\r
+            status.HTTP_202_ACCEPTED: "Successfully",\r
             status.HTTP_500_INTERNAL_SERVER_ERROR: "Internal error"\r
         }\r
     )\r
-    def post(self, request):\r
-        # TODO\r
-        return None\r
+    def post(self, request, vnfPkgId):\r
+        try:\r
+            req_serializer = UploadVnfPackageFromUriRequestSerializer(data=request.data)\r
+            if not req_serializer.is_valid():\r
+                raise CatalogException\r
+            VnfpkgUploadThread(req_serializer.data, vnfPkgId).start()\r
+            return Response(None, status=status.HTTP_202_ACCEPTED)\r
+        except CatalogException:\r
+            logger.error(traceback.format_exc())\r
+            return Response(data={'error': 'Upload vnfPkg failed.'}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)\r
+        except Exception as e:\r
+            logger.error(e.message)\r
+            logger.error(traceback.format_exc())\r
+            return Response(data={'error': 'unexpected exception'}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)\r
 \r
 \r
 class artifacts(APIView):\r