import json
 import os
 import mock
+import urllib2
 from rest_framework.test import APIClient
 from django.test import TestCase
 from rest_framework import status
 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):
         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()
 
 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
         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