X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=catalog%2Fpackages%2Ftests%2Ftest_vnf_package.py;h=289b600d42783c5bc49f96390a9c90a346810bf5;hb=3ff968b21a477944ed66b4261f5d9c9a182eb954;hp=c0d663785989f4a2ba4c903df253e6c1ab622700;hpb=2f4d7a5b1d2a629e5856a5e3e17576bc618452f0;p=modeling%2Fetsicatalog.git diff --git a/catalog/packages/tests/test_vnf_package.py b/catalog/packages/tests/test_vnf_package.py index c0d6637..289b600 100644 --- a/catalog/packages/tests/test_vnf_package.py +++ b/catalog/packages/tests/test_vnf_package.py @@ -26,6 +26,7 @@ from rest_framework.test import APIClient from catalog.packages.biz.vnf_package import VnfPackage, VnfPkgUploadThread from catalog.packages.const import PKG_STATUS from catalog.packages.tests.const import vnfd_data +from catalog.pub.config import config from catalog.pub.config.config import CATALOG_ROOT_PATH from catalog.pub.database.models import VnfPackageModel from catalog.pub.utils import toscaparser @@ -60,7 +61,7 @@ class TestVnfPackage(TestCase): mock_parse_vnfd.return_value = json.JSONEncoder().encode(vnfd_data) response = self.client.put("%s/222/package_content" % VNF_BASE_URL, data=data) vnf_pkg = VnfPackageModel.objects.filter(vnfPackageId="222") - self.assertEqual("zte-hss-1.0", vnf_pkg[0].vnfdId) + self.assertEqual("00342b18-a5c7-11e8-998c-bf1755941f12", vnf_pkg[0].vnfdId) self.assertEqual(PKG_STATUS.ONBOARDED, vnf_pkg[0].onboardingState) self.assertEqual(response.status_code, status.HTTP_202_ACCEPTED) @@ -85,12 +86,25 @@ class TestVnfPackage(TestCase): vnf_pkg_id = vnf_pkg.vnfPackageId VnfPkgUploadThread(req_data, vnf_pkg_id).run() vnf_pkg1 = VnfPackageModel.objects.filter(vnfPackageId="222") - self.assertEqual("zte-hss-1.0", vnf_pkg1[0].vnfdId) + self.assertEqual("00342b18-a5c7-11e8-998c-bf1755941f12", vnf_pkg1[0].vnfdId) - def test_upload_from_uri_failed(self): + def test_upload_from_uri_bad_req(self): req_data = {"username": "123"} response = self.client.post("%s/111/package_content/upload_from_uri" % VNF_BASE_URL, data=req_data) - self.assertEqual(response.status_code, status.HTTP_500_INTERNAL_SERVER_ERROR) + self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) + + @mock.patch.object(urllib.request, 'urlopen') + def test_upload_from_uri_failed(self, mock_urlopen): + vnf_pkg = VnfPackageModel.objects.create( + vnfPackageId="333", + onboardingState="CREATED" + ) + req_data = {"addressInformation": "error"} + mock_urlopen.return_value = Exception('Boom!') + vnf_pkg_id = vnf_pkg.vnfPackageId + VnfPkgUploadThread(req_data, vnf_pkg_id).run() + vnf_pkg1 = VnfPackageModel.objects.filter(vnfPackageId="333") + self.assertEqual("CREATED", vnf_pkg1[0].onboardingState) def test_create_vnf_pkg(self): req_data = { @@ -137,7 +151,12 @@ class TestVnfPackage(TestCase): "operationalState": "DISABLED", "usageState": "NOT_IN_USE", "userDefinedData": {"a": "A"}, - "_links": None + "_links": {'self': {'href': config.MSB_BASE_URL + '/api/vnfpkgm/v1/vnf_packages/222'}, + 'vnfd': { + 'href': config.MSB_BASE_URL + '/api/vnfpkgm/v1/vnf_packages/222/vnfd'}, + 'packageContent': { + 'href': config.MSB_BASE_URL + '/api/vnfpkgm/v1/vnf_packages/222/package_content'} + } } self.assertEqual(response.data, expect_data) self.assertEqual(response.status_code, status.HTTP_200_OK) @@ -188,7 +207,17 @@ class TestVnfPackage(TestCase): "operationalState": "DISABLED", "usageState": "NOT_IN_USE", "userDefinedData": {"a": "A"}, - "_links": None + "_links": { + "self": { + "href": config.MSB_BASE_URL + "/api/vnfpkgm/v1/vnf_packages/111" + }, + "vnfd": { + "href": config.MSB_BASE_URL + "/api/vnfpkgm/v1/vnf_packages/111/vnfd" + }, + "packageContent": { + "href": config.MSB_BASE_URL + "/api/vnfpkgm/v1/vnf_packages/111/package_content" + } + } }, { "id": "222", @@ -203,7 +232,10 @@ class TestVnfPackage(TestCase): "operationalState": "DISABLED", "usageState": "NOT_IN_USE", "userDefinedData": {"a": "A"}, - "_links": None + "_links": {'self': {'href': config.MSB_BASE_URL + '/api/vnfpkgm/v1/vnf_packages/222'}, + 'vnfd': {'href': config.MSB_BASE_URL + '/api/vnfpkgm/v1/vnf_packages/222/vnfd'}, + 'packageContent': { + 'href': config.MSB_BASE_URL + '/api/vnfpkgm/v1/vnf_packages/222/package_content'}} } ] self.assertEqual(response.data, expect_data) @@ -307,118 +339,152 @@ class TestVnfPackage(TestCase): self.assertTrue(zipfile.is_zipfile("vnfd.csar")) os.remove("vnfd.csar") + def test_download_vnfd_when_pkg_not_exist(self): + response = self.client.get(VNF_BASE_URL + "/222/vnfd") + self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) -def test_download_vnfd_when_pkg_not_exist(self): - response = self.client.get(VNF_BASE_URL + "/222/vnfd") - self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) - - -def test_download_vnfd_when_catch_cataloge_exception(self): - VnfPackageModel.objects.create( - vnfPackageId="222", - onboardingState="CREATED", - localFilePath="vnfPackage.csar" - ) - response = self.client.get(VNF_BASE_URL + "/222/vnfd") - self.assertEqual(response.status_code, status.HTTP_500_INTERNAL_SERVER_ERROR) - - -@mock.patch.object(VnfPackage, "create_vnf_pkg") -def test_create_vnf_pkg_when_catch_exception(self, mock_create_vnf_pkg): - mock_create_vnf_pkg.side_effect = TypeError('integer type') - req_data = { - "userDefinedData": {"a": "A"} - } - response = self.client.post(VNF_BASE_URL, data=req_data, format="json") - self.assertEqual(response.status_code, status.HTTP_500_INTERNAL_SERVER_ERROR) - - -@mock.patch.object(VnfPackage, "delete_vnf_pkg") -def test_delete_single_when_catch_exception(self, mock_delete_vnf_pkg): - mock_delete_vnf_pkg.side_effect = TypeError("integer type") - response = self.client.delete(VNF_BASE_URL + "/222") - self.assertEqual(response.status_code, status.HTTP_500_INTERNAL_SERVER_ERROR) - - -@mock.patch.object(VnfPackage, "query_single") -def test_query_single_when_catch_exception(self, mock_query_single): - mock_query_single.side_effect = TypeError("integer type") - response = self.client.get(VNF_BASE_URL + "/222") - self.assertEqual(response.status_code, status.HTTP_500_INTERNAL_SERVER_ERROR) - - -@mock.patch.object(VnfPackage, "query_multiple") -def test_query_multiple_when_catch_exception(self, mock_query_muitiple): - mock_query_muitiple.side_effect = TypeError("integer type") - response = self.client.get(VNF_BASE_URL) - self.assertEqual(response.status_code, status.HTTP_500_INTERNAL_SERVER_ERROR) - - -@mock.patch.object(toscaparser, 'parse_vnfd') -def test_upload_when_catch_exception(self, mock_parse_vnfd): - data = {'file': open(os.path.join(CATALOG_ROOT_PATH, "empty.txt"), "rb")} - VnfPackageModel.objects.create( - vnfPackageId="222", - onboardingState="CREATED" - ) - mock_parse_vnfd.side_effect = TypeError("integer type") - response = self.client.put(VNF_BASE_URL + "/222/package_content", data=data) - self.assertEqual(response.status_code, status.HTTP_500_INTERNAL_SERVER_ERROR) - - -@mock.patch.object(VnfPkgUploadThread, 'start') -def test_upload_from_uri_when_catch_exception(self, mock_start): - req_data = {"addressInformation": "https://127.0.0.1:1234/sdc/v1/hss.csar"} - mock_start.side_effect = TypeError("integer type") - response = self.client.post(VNF_BASE_URL + "/111/package_content/upload_from_uri", data=req_data) - self.assertEqual(response.status_code, status.HTTP_500_INTERNAL_SERVER_ERROR) - - -@mock.patch.object(VnfPackage, 'download') -def test_fetch_vnf_pkg_when_catch_exception(self, mock_download): - mock_download.side_effect = TypeError("integer type") - response = self.client.get(VNF_BASE_URL + "/222/package_content") - self.assertEqual(response.status_code, status.HTTP_500_INTERNAL_SERVER_ERROR) - - -@mock.patch.object(toscaparser, 'parse_vnfd') -def test_fetch_vnf_artifact(self, mock_parse_vnfd): - data = {'file': open(os.path.join(CATALOG_ROOT_PATH, "resource_test.csar"), "rb")} - VnfPackageModel.objects.create( - vnfPackageId="222", - onboardingState="CREATED" - ) - mock_parse_vnfd.return_value = json.JSONEncoder().encode(vnfd_data) - response = self.client.put(VNF_BASE_URL + "/222/package_content", data=data) - self.assertEqual(response.status_code, status.HTTP_202_ACCEPTED) - response = self.client.get(VNF_BASE_URL + "/222/artifacts/image") - self.assertEqual(response.status_code, status.HTTP_200_OK) - self.assertEqual(response.getvalue(), b"ubuntu_16.04\n") - - -@mock.patch.object(toscaparser, 'parse_vnfd') -def test_fetch_vnf_artifact_not_exists(self, mock_parse_vnfd): - data = {'file': open(os.path.join(CATALOG_ROOT_PATH, "resource_test.csar"), "rb")} - VnfPackageModel.objects.create( - vnfPackageId="222", - onboardingState="CREATED" - ) - mock_parse_vnfd.return_value = json.JSONEncoder().encode(vnfd_data) - response = self.client.put(VNF_BASE_URL + "/222/package_content", data=data) - self.assertEqual(response.status_code, status.HTTP_202_ACCEPTED) - response = self.client.get(VNF_BASE_URL + "/1451/artifacts/image") - self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) - - -@mock.patch.object(toscaparser, 'parse_vnfd') -def test_fetch_vnf_artifact_vnf_not_exists(self, mock_parse_vnfd): - data = {'file': open(os.path.join(CATALOG_ROOT_PATH, "resource_test.csar"), "rb")} - VnfPackageModel.objects.create( - vnfPackageId="222", - onboardingState="CREATED" - ) - mock_parse_vnfd.return_value = json.JSONEncoder().encode(vnfd_data) - response = self.client.put(VNF_BASE_URL + "/222/package_content", data=data) - self.assertEqual(response.status_code, status.HTTP_202_ACCEPTED) - response = self.client.get(VNF_BASE_URL + "/222/artifacts/image1") - self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) + def test_download_vnfd_when_catch_cataloge_exception(self): + VnfPackageModel.objects.create( + vnfPackageId="222", + onboardingState="CREATED", + localFilePath="vnfPackage.csar" + ) + response = self.client.get(VNF_BASE_URL + "/222/vnfd") + self.assertEqual(response.status_code, status.HTTP_500_INTERNAL_SERVER_ERROR) + + @mock.patch.object(VnfPackage, "create_vnf_pkg") + def test_create_vnf_pkg_when_catch_exception(self, mock_create_vnf_pkg): + mock_create_vnf_pkg.side_effect = TypeError('integer type') + req_data = { + "userDefinedData": {"a": "A"} + } + response = self.client.post(VNF_BASE_URL, data=req_data, format="json") + self.assertEqual(response.status_code, status.HTTP_500_INTERNAL_SERVER_ERROR) + + @mock.patch.object(VnfPackage, "delete_vnf_pkg") + def test_delete_single_when_catch_exception(self, mock_delete_vnf_pkg): + mock_delete_vnf_pkg.side_effect = TypeError("integer type") + response = self.client.delete(VNF_BASE_URL + "/222") + self.assertEqual(response.status_code, status.HTTP_500_INTERNAL_SERVER_ERROR) + + @mock.patch.object(VnfPackage, "query_single") + def test_query_single_when_catch_exception(self, mock_query_single): + mock_query_single.side_effect = TypeError("integer type") + response = self.client.get(VNF_BASE_URL + "/222") + self.assertEqual(response.status_code, status.HTTP_500_INTERNAL_SERVER_ERROR) + + @mock.patch.object(VnfPackage, "query_multiple") + def test_query_multiple_when_catch_exception(self, mock_query_muitiple): + mock_query_muitiple.side_effect = TypeError("integer type") + response = self.client.get(VNF_BASE_URL) + self.assertEqual(response.status_code, status.HTTP_500_INTERNAL_SERVER_ERROR) + + @mock.patch.object(toscaparser, 'parse_vnfd') + def test_upload_when_catch_exception(self, mock_parse_vnfd): + data = {'file': open(os.path.join(CATALOG_ROOT_PATH, "empty.txt"), "rb")} + VnfPackageModel.objects.create( + vnfPackageId="222", + onboardingState="CREATED" + ) + mock_parse_vnfd.side_effect = TypeError("integer type") + response = self.client.put(VNF_BASE_URL + "/222/package_content", data=data) + self.assertEqual(response.status_code, status.HTTP_500_INTERNAL_SERVER_ERROR) + + @mock.patch.object(VnfPkgUploadThread, 'start') + def test_upload_from_uri_when_catch_exception(self, mock_start): + req_data = {"addressInformation": "https://127.0.0.1:1234/sdc/v1/hss.csar"} + mock_start.side_effect = TypeError("integer type") + response = self.client.post(VNF_BASE_URL + "/111/package_content/upload_from_uri", data=req_data) + self.assertEqual(response.status_code, status.HTTP_500_INTERNAL_SERVER_ERROR) + + @mock.patch.object(VnfPackage, 'download') + def test_fetch_vnf_pkg_when_catch_exception(self, mock_download): + mock_download.side_effect = TypeError("integer type") + response = self.client.get(VNF_BASE_URL + "/222/package_content") + self.assertEqual(response.status_code, status.HTTP_500_INTERNAL_SERVER_ERROR) + + @mock.patch.object(toscaparser, 'parse_vnfd') + def test_fetch_vnf_artifact(self, mock_parse_vnfd): + data = {'file': open(os.path.join(CATALOG_ROOT_PATH, "resource_test.csar"), "rb")} + VnfPackageModel.objects.create( + vnfPackageId="222", + onboardingState="CREATED" + ) + mock_parse_vnfd.return_value = json.JSONEncoder().encode(vnfd_data) + response = self.client.put(VNF_BASE_URL + "/222/package_content", data=data) + self.assertEqual(response.status_code, status.HTTP_202_ACCEPTED) + response = self.client.get(VNF_BASE_URL + "/222/artifacts/image") + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertEqual(response.getvalue(), b"ubuntu_16.04\n") + + @mock.patch.object(toscaparser, 'parse_vnfd') + def test_fetch_vnf_artifact_not_exists(self, mock_parse_vnfd): + data = {'file': open(os.path.join(CATALOG_ROOT_PATH, "resource_test.csar"), "rb")} + VnfPackageModel.objects.create( + vnfPackageId="222", + onboardingState="CREATED" + ) + mock_parse_vnfd.return_value = json.JSONEncoder().encode(vnfd_data) + response = self.client.put(VNF_BASE_URL + "/222/package_content", data=data) + self.assertEqual(response.status_code, status.HTTP_202_ACCEPTED) + response = self.client.get(VNF_BASE_URL + "/1451/artifacts/image") + self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) + + @mock.patch.object(toscaparser, 'parse_vnfd') + def test_fetch_vnf_artifact_vnf_not_exists(self, mock_parse_vnfd): + data = {'file': open(os.path.join(CATALOG_ROOT_PATH, "resource_test.csar"), "rb")} + VnfPackageModel.objects.create( + vnfPackageId="222", + onboardingState="CREATED" + ) + mock_parse_vnfd.return_value = json.JSONEncoder().encode(vnfd_data) + response = self.client.put(VNF_BASE_URL + "/222/package_content", data=data) + self.assertEqual(response.status_code, status.HTTP_202_ACCEPTED) + response = self.client.get(VNF_BASE_URL + "/222/artifacts/image1") + self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) + + def test_upload_vnf_pkg_with_artifacts(self): + data = {'file': open(os.path.join(CATALOG_ROOT_PATH, "vgw.csar"), "rb")} + VnfPackageModel.objects.create( + vnfPackageId="222", + onboardingState="CREATED" + ) + response = self.client.put("%s/222/package_content" % VNF_BASE_URL, data=data) + vnf_pkg = VnfPackageModel.objects.filter(vnfPackageId="222") + self.assertEqual(PKG_STATUS.ONBOARDED, vnf_pkg[0].onboardingState) + self.assertEqual(response.status_code, status.HTTP_202_ACCEPTED) + response = self.client.get("%s/222" % VNF_BASE_URL) + print(response.data) + self.assertEqual(response.status_code, status.HTTP_200_OK) + expact_response_data = { + "id": "222", + "vnfdId": "b1bb0ce7-2222-4fa7-95ed-4840d70a1177", + "vnfProductName": "vcpe_vgw", + "vnfSoftwareVersion": "1.0", + "vnfdVersion": "1.0", + "softwareImages": None, + "additionalArtifacts": [ + { + "artifactPath": "MainServiceTemplate.yaml", + "checksum": { + "algorithm": "Null", + "hash": "Null" + } + } + ], + "onboardingState": "ONBOARDED", + "operationalState": "ENABLED", + "usageState": "NOT_IN_USE", + "_links": { + "self": { + "href": config.MSB_BASE_URL + "/api/vnfpkgm/v1/vnf_packages/222" + }, + "vnfd": { + "href": config.MSB_BASE_URL + "/api/vnfpkgm/v1/vnf_packages/222/vnfd" + }, + "packageContent": { + "href": config.MSB_BASE_URL + "/api/vnfpkgm/v1/vnf_packages/222/package_content" + } + } + } + self.assertEqual(response.data, expact_response_data)