diff options
-rw-r--r-- | catalog/packages/biz/pnf_descriptor.py | 18 | ||||
-rw-r--r-- | catalog/packages/tests/test_pnf_descriptor.py | 16 | ||||
-rw-r--r-- | catalog/packages/views/pnf_descriptor_views.py | 8 |
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.'} |