-# 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.
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
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
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
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):
'onboardingFailureDetails': None,
'nsdOperationalState': 'DISABLED',
'nsdUsageState': 'NOT_IN_USE',
- 'userDefinedData': {
- 'key1': 'value1',
- 'key2': 'value2',
- 'key3': 'value3',
- },
+ 'userDefinedData': self.user_defined_data,
'_links': None
},
{
'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),
'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',
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)
).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')