From 883f4879fccc7ece1b33207d00b6139176d9bd9e Mon Sep 17 00:00:00 2001 From: biancunkang Date: Wed, 22 Aug 2018 11:36:40 +0800 Subject: [PATCH] Deal with nfPackage Change-Id: I4a57906115fb4628ef4d2dcbbbd768d31e6679b5 Issue-ID: VFC-1038 Signed-off-by: biancunkang --- catalog/packages/tests/test_nf.py | 17 +++++++++++++++++ catalog/packages/views/vnfpkg_views.py | 24 +++++++++++++++++++----- 2 files changed, 36 insertions(+), 5 deletions(-) diff --git a/catalog/packages/tests/test_nf.py b/catalog/packages/tests/test_nf.py index 428622bd..d4a8b506 100644 --- a/catalog/packages/tests/test_nf.py +++ b/catalog/packages/tests/test_nf.py @@ -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() diff --git a/catalog/packages/views/vnfpkg_views.py b/catalog/packages/views/vnfpkg_views.py index 98c6dd99..0b48702e 100644 --- a/catalog/packages/views/vnfpkg_views.py +++ b/catalog/packages/views/vnfpkg_views.py @@ -20,6 +20,9 @@ from drf_yasg.utils import swagger_auto_schema from rest_framework import status from rest_framework.views import APIView from rest_framework.response import Response +from catalog.packages.biz.nf_package import VnfpkgUploadThread +from catalog.pub.exceptions import CatalogException +from catalog.packages.serializers.upload_vnf_pkg_from_uri_req import UploadVnfPackageFromUriRequestSerializer logger = logging.getLogger(__name__) @@ -144,15 +147,26 @@ class upload_from_uri(APIView): return None @swagger_auto_schema( - # request_body=CreateVnfReqSerializer(), + request_body=UploadVnfPackageFromUriRequestSerializer(), responses={ - # status.HTTP_201_CREATED: CreateVnfRespSerializer(), + status.HTTP_202_ACCEPTED: "Successfully", status.HTTP_500_INTERNAL_SERVER_ERROR: "Internal error" } ) - def post(self, request): - # TODO - return None + def post(self, request, vnfPkgId): + try: + req_serializer = UploadVnfPackageFromUriRequestSerializer(data=request.data) + if not req_serializer.is_valid(): + raise CatalogException + VnfpkgUploadThread(req_serializer.data, vnfPkgId).start() + return Response(None, status=status.HTTP_202_ACCEPTED) + except CatalogException: + logger.error(traceback.format_exc()) + return Response(data={'error': 'Upload vnfPkg failed.'}, status=status.HTTP_500_INTERNAL_SERVER_ERROR) + except Exception as e: + logger.error(e.message) + logger.error(traceback.format_exc()) + return Response(data={'error': 'unexpected exception'}, status=status.HTTP_500_INTERNAL_SERVER_ERROR) class artifacts(APIView): -- 2.16.6