diff options
-rw-r--r-- | catalog/packages/biz/ns_descriptor.py | 16 | ||||
-rw-r--r-- | catalog/packages/biz/pnf_descriptor.py | 9 | ||||
-rw-r--r-- | catalog/packages/tests/test_ns_descriptor.py | 75 |
3 files changed, 57 insertions, 43 deletions
diff --git a/catalog/packages/biz/ns_descriptor.py b/catalog/packages/biz/ns_descriptor.py index ff25c4b6..4846bfab 100644 --- a/catalog/packages/biz/ns_descriptor.py +++ b/catalog/packages/biz/ns_descriptor.py @@ -1,4 +1,4 @@ -# Copyright 2017 ZTE Corporation. +# Copyright 2018 ZTE Corporation. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -20,7 +20,7 @@ import uuid from catalog.pub.config.config import CATALOG_ROOT_PATH from catalog.pub.utils import fileutil from catalog.pub.utils.values import ignore_case_get -from catalog.pub.database.models import NSPackageModel, VnfPackageModel +from catalog.pub.database.models import NSPackageModel, PnfPackageModel, VnfPackageModel from catalog.pub.exceptions import CatalogException from catalog.pub.utils import toscaparser @@ -134,9 +134,9 @@ def upload(remote_file, nsd_info_id): def download(nsd_info_id): ns_pkgs = NSPackageModel.objects.filter(nsPackageId=nsd_info_id) if not ns_pkgs.exists(): - raise CatalogException('The PNF Descriptor (%s) does not exist.' % nsd_info_id) + raise CatalogException('The NS Descriptor (%s) does not exist.' % nsd_info_id) if ns_pkgs[0].onboardingState != 'ONBOARDED': - raise CatalogException('The PNF Descriptor (%s) is not ONBOARDED.' % nsd_info_id) + raise CatalogException('The NS Descriptor (%s) is not ONBOARDED.' % nsd_info_id) local_file_path = ns_pkgs[0].localFilePath return local_file_path @@ -170,6 +170,14 @@ def fill_resp_data(ns_pkg): vnf_pkg_ids.append(pkg.vnfPackageId) data['vnfPkgIds'] = vnf_pkg_ids + pnf_info_ids = [] + for pnf in nsd_model['pnfs']: + pnfd_id = pnf["properties"]["id"] + pkgs = PnfPackageModel.objects.filter(pnfdId=pnfd_id) + for pkg in pkgs: + pnf_info_ids.append(pkg.pnfPackageId) + data['pnfInfoIds'] = pnf_info_ids # TODO: need reconfirming + if ns_pkg.userDefinedData: user_defined_data = json.JSONDecoder().decode(ns_pkg.userDefinedData) data['userDefinedData'] = user_defined_data diff --git a/catalog/packages/biz/pnf_descriptor.py b/catalog/packages/biz/pnf_descriptor.py index eb9a2a97..4d11e4e9 100644 --- a/catalog/packages/biz/pnf_descriptor.py +++ b/catalog/packages/biz/pnf_descriptor.py @@ -118,7 +118,6 @@ def download(pnfd_info_id): def delete_pnf(pnfd_info_id): - # TODO pnf_pkgs = PnfPackageModel.objects.filter(pnfPackageId=pnfd_info_id) if not pnf_pkgs.exists(): logger.debug('PNF descriptor (%s) is deleted.' % pnfd_info_id) @@ -127,7 +126,13 @@ def delete_pnf(pnfd_info_id): raise CatalogException('The PNF descriptor (%s) shall be NOT_IN_USE.' % pnfd_info_id) ns_pkgs = NSPackageModel.objects.all() for ns_pkg in ns_pkgs: - if pnfd_info_id in ns_pkg.pnfdInfoIds: + pnf_info_ids = [] + for pnf in ns_pkg.nsd_model['pnfs']: + pnfd_id = pnf["properties"]["id"] + pkgs = PnfPackageModel.objects.filter(pnfdId=pnfd_id) + for pkg in pkgs: + pnf_info_ids.append(pkg.pnfPackageId) + if pnfd_info_id in pnf_info_ids: raise CatalogException('The PNF descriptor (%s) is referenced.' % pnfd_info_id) break pnf_pkgs.delete() diff --git a/catalog/packages/tests/test_ns_descriptor.py b/catalog/packages/tests/test_ns_descriptor.py index c6eda2fe..285a1cd4 100644 --- a/catalog/packages/tests/test_ns_descriptor.py +++ b/catalog/packages/tests/test_ns_descriptor.py @@ -20,6 +20,7 @@ from django.test import TestCase from rest_framework import status from rest_framework.test import APIClient from catalog.pub.database.models import NSPackageModel +from catalog.pub.config.config import CATALOG_ROOT_PATH class TestNsDescriptor(TestCase): @@ -70,11 +71,7 @@ class TestNsDescriptor(TestCase): 'onboardingFailureDetails': None, 'nsdOperationalState': 'DISABLED', 'nsdUsageState': 'NOT_IN_USE', - 'userDefinedData': { - 'key1': 'value1', - 'key2': 'value2', - 'key3': 'value3', - }, + 'userDefinedData': self.user_defined_data, '_links': None }, { @@ -91,20 +88,11 @@ class TestNsDescriptor(TestCase): 'onboardingFailureDetails': None, 'nsdOperationalState': 'DISABLED', 'nsdUsageState': 'NOT_IN_USE', - 'userDefinedData': { - 'key1': 'value1', - 'key2': 'value2', - 'key3': 'value3', - }, + 'userDefinedData': self.user_defined_data, '_links': None } ] - user_defined_data = { - 'key1': 'value1', - 'key2': 'value2', - 'key3': 'value3', - } - user_defined_data = json.JSONEncoder().encode(user_defined_data) + user_defined_data = json.JSONEncoder().encode(self.user_defined_data) for i in range(2): NSPackageModel( nsPackageId=str(i), @@ -132,19 +120,10 @@ class TestNsDescriptor(TestCase): 'onboardingFailureDetails': None, 'nsdOperationalState': 'DISABLED', 'nsdUsageState': 'NOT_IN_USE', - 'userDefinedData': { - 'key1': 'value1', - 'key2': 'value2', - 'key3': 'value3', - }, + 'userDefinedData': self.user_defined_data, '_links': None } - user_defined_data = { - 'key1': 'value1', - 'key2': 'value2', - 'key3': 'value3', - } - user_defined_data = json.JSONEncoder().encode(user_defined_data) + user_defined_data = json.JSONEncoder().encode(self.user_defined_data) NSPackageModel( nsPackageId='22', onboardingState='CREATED', @@ -158,20 +137,15 @@ class TestNsDescriptor(TestCase): self.assertEqual(expected_reponse_data, response.data) def test_delete_single_nsd_normal(self): - user_defined_data = { - 'key1': 'value1', - 'key2': 'value2', - 'key3': 'value3', - } - user_defined_data = json.JSONEncoder().encode(user_defined_data) + user_defined_data = json.JSONEncoder().encode(self.user_defined_data) NSPackageModel( - nsPackageId='22', + nsPackageId='21', operationalState='DISABLED', usageState='NOT_IN_USE', userDefinedData=user_defined_data, nsdModel='test' ).save() - resp = self.client.delete("/api/nsd/v1/ns_descriptors/22", format='json') + resp = self.client.delete("/api/nsd/v1/ns_descriptors/21", format='json') self.assertEqual(resp.status_code, status.HTTP_204_NO_CONTENT) self.assertEqual({}, resp.data) @@ -185,16 +159,43 @@ class TestNsDescriptor(TestCase): ).save() with open('nsd_content.txt', 'wb') as fp: fp.write('test') - with open('nsd_content.txt', 'rb') as fp: resp = self.client.put( "/api/nsd/v1/ns_descriptors/22/nsd_content", {'file': fp}, ) + file_content = '' + with open(os.path.join(CATALOG_ROOT_PATH, '22/nsd_content.txt')) as fp: + data = fp.read() + file_content = '%s%s' % (file_content, data) self.assertEqual(resp.status_code, status.HTTP_204_NO_CONTENT) self.assertEqual({}, resp.data) - + self.assertEqual(file_content, 'test') os.remove('nsd_content.txt') def test_nsd_content_upload_failure(self): pass + + def test_nsd_content_download_normal(self): + pass + + def test_nsd_content_partial_download_normal(self): + with open('nsd_content.txt', 'wb') as fp: + fp.writelines('test1') + fp.writelines('test2') + NSPackageModel( + nsPackageId='23', + onboardingState='ONBOARDED', + localFilePath='nsd_content.txt' + ).save() + response = self.client.get( + "/api/nsd/v1/ns_descriptors/23/nsd_content", + RANGE='5-10', + format='json' + ) + partial_file_content = '' + for data in response.streaming_content: + partial_file_content = '%s%s' % (partial_file_content, data) + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertEqual('test2', partial_file_content) + os.remove('nsd_content.txt') |