summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbiancunkang <bian.cunkang@zte.com.cn>2018-08-30 09:43:18 +0800
committerbiancunkang <bian.cunkang@zte.com.cn>2018-08-30 09:43:18 +0800
commit8962e05b3fe8d4ad4f570b0186ba8622a5b4d19a (patch)
treee8113b7c3039a01a295c0a3ac092789601af76d4
parenta83474f2c8459cf07de512b3ca12b3e439a28d63 (diff)
Deal with pnf descriptor
Add parse_pnf and the assosiated change in test Change-Id: I0f6fde22866fd226fb95010a6ff6e610f7fc9fd4 Issue-ID: VFC-1038 Signed-off-by: biancunkang <bian.cunkang@zte.com.cn>
-rw-r--r--catalog/packages/biz/pnf_descriptor.py18
-rw-r--r--catalog/packages/tests/test_pnf_descriptor.py16
-rw-r--r--catalog/packages/views/pnf_descriptor_views.py8
3 files changed, 31 insertions, 11 deletions
diff --git a/catalog/packages/biz/pnf_descriptor.py b/catalog/packages/biz/pnf_descriptor.py
index 463efee9..0eeb833c 100644
--- a/catalog/packages/biz/pnf_descriptor.py
+++ b/catalog/packages/biz/pnf_descriptor.py
@@ -72,7 +72,7 @@ def upload(remote_file, pnfd_info_id):
raise CatalogException('PNFD (%s) does not exist.' % pnfd_info_id)
pnf_pkgs.update(onboardingState='UPLOADING')
- local_file_name = remote_file.name # TODO: common method
+ local_file_name = remote_file.name
local_file_dir = os.path.join(CATALOG_ROOT_PATH, pnfd_info_id)
local_file_name = os.path.join(local_file_dir, local_file_name)
if not os.path.exists(local_file_dir):
@@ -81,9 +81,10 @@ def upload(remote_file, pnfd_info_id):
for chunk in remote_file.chunks(chunk_size=1024 * 8):
local_file.write(chunk)
logger.info('PNFD(%s) content has been uploaded.' % pnfd_info_id)
+ return local_file_name
-def process(pnfd_info_id, local_file_name):
+def parse_pnfd_and_save(pnfd_info_id, local_file_name):
logger.info('Start to process PNFD(%s)...' % pnfd_info_id)
pnf_pkgs = PnfPackageModel.objects.filter(pnfPackageId=pnfd_info_id)
pnf_pkgs.update(onboardingState='PROCESSING')
@@ -98,12 +99,10 @@ def process(pnfd_info_id, local_file_name):
pnf_pkgs.update(
pnfdId=pnfd_id,
- pnfdName=pnfd["metadata"].get("name", pnfd_id),
- pnfdDesginer=pnfd["metadata"].get("vendor", "undefined"),
- pnfdDescription=pnfd["metadata"].get("description", ""),
pnfdVersion=pnfd["metadata"].get("version", "undefined"),
- pnfPackageUri=local_file_name, # TODO
- sdcCsarId=pnfd_info_id,
+ pnfPackageUri=local_file_name,
+ onboardingState="ONBOARDED",
+ usageState="NOT_IN_USE",
localFilePath=local_file_name,
pnfdModel=pnfd_json
)
@@ -174,3 +173,8 @@ def fill_response_data(pnf_pkg):
data['userDefinedData'] = user_defined_data
return data
+
+
+def handle_upload_failed(pnf_pkg_id):
+ pnf_pkg = PnfPackageModel.objects.filter(pnfPackageId=pnf_pkg_id)
+ pnf_pkg.update(onboardingState="CREATED")
diff --git a/catalog/packages/tests/test_pnf_descriptor.py b/catalog/packages/tests/test_pnf_descriptor.py
index 3714718d..21953a09 100644
--- a/catalog/packages/tests/test_pnf_descriptor.py
+++ b/catalog/packages/tests/test_pnf_descriptor.py
@@ -16,11 +16,14 @@
import copy
import json
import os
+import mock
+
from django.test import TestCase
from rest_framework import status
from rest_framework.test import APIClient
from catalog.pub.database.models import PnfPackageModel
+from catalog.pub.utils import toscaparser
class TestPnfDescriptor(TestCase):
@@ -44,6 +47,11 @@ class TestPnfDescriptor(TestCase):
'userDefinedData': self.user_defined_data,
'_links': None
}
+ self.pnfd_data = {
+ "metadata": {
+ "id": "zte-1.0",
+ }
+ }
def tearDown(self):
pass
@@ -115,14 +123,15 @@ class TestPnfDescriptor(TestCase):
self.assertEqual(resp.status_code, status.HTTP_204_NO_CONTENT)
self.assertEqual(None, resp.data)
- def test_pnfd_content_upload_normal(self):
+ @mock.patch.object(toscaparser, "parse_pnfd")
+ def test_pnfd_content_upload_normal(self, mock_parse_pnfd):
user_defined_data_json = json.JSONEncoder().encode(self.user_defined_data)
PnfPackageModel(
pnfPackageId='22',
usageState='NOT_IN_USE',
userDefinedData=user_defined_data_json,
).save()
-
+ mock_parse_pnfd.return_value = json.JSONEncoder().encode(self.pnfd_data)
with open('pnfd_content.txt', 'wb') as fp:
fp.write('test')
@@ -131,6 +140,9 @@ class TestPnfDescriptor(TestCase):
"/api/nsd/v1/pnf_descriptors/22/pnfd_content",
{'file': fp},
)
+ pnf_pkg = PnfPackageModel.objects.filter(pnfPackageId="22")
+ self.assertEqual(pnf_pkg[0].pnfdId, "zte-1.0")
+ self.assertEqual(pnf_pkg[0].onboardingState, "ONBOARDED")
self.assertEqual(resp.status_code, status.HTTP_204_NO_CONTENT)
self.assertEqual(None, resp.data)
os.remove('pnfd_content.txt')
diff --git a/catalog/packages/views/pnf_descriptor_views.py b/catalog/packages/views/pnf_descriptor_views.py
index 35ed83a7..b0d02a82 100644
--- a/catalog/packages/views/pnf_descriptor_views.py
+++ b/catalog/packages/views/pnf_descriptor_views.py
@@ -17,7 +17,8 @@ import traceback
from django.http import FileResponse
-from catalog.packages.biz.pnf_descriptor import create, delete_single, download, query_multiple, query_single, upload
+from catalog.packages.biz.pnf_descriptor import create, delete_single, download, query_multiple, query_single, upload, \
+ parse_pnfd_and_save, handle_upload_failed
from catalog.packages.serializers.create_pnfd_info_request import CreatePnfdInfoRequestSerializer
from catalog.packages.serializers.pnfd_info import PnfdInfoSerializer
from catalog.packages.serializers.pnfd_infos import PnfdInfosSerializer
@@ -159,12 +160,15 @@ def pnfd_content_ru(request, *args, **kwargs):
if request.method == 'PUT':
files = request.FILES.getlist('file')
try:
- upload(files[0], pnfd_info_id)
+ local_file_name = upload(files[0], pnfd_info_id)
+ parse_pnfd_and_save(pnfd_info_id, local_file_name)
return Response(data=None, status=status.HTTP_204_NO_CONTENT)
except CatalogException as e:
+ handle_upload_failed(pnfd_info_id)
logger.error(e.message)
error_msg = {'error': 'Uploading PNFD content failed.'}
except Exception as e:
+ handle_upload_failed(pnfd_info_id)
logger.error(e.message)
logger.error(traceback.format_exc())
error_msg = {'error': 'Uploading PNFD content failed.'}