X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=catalog%2Fpackages%2Ftests%2Ftest_nsdm_subscription.py;h=2d95a1ca7c26e7f1e220c47a0f345753c43bfff9;hb=1487db0615f16783fd01998a0f71fb2d8f97a434;hp=f73c4167277e4249b6706079081eebb9f2f05b45;hpb=5fd2ae6a4517980ce0f89247bb354220748ae67b;p=modeling%2Fetsicatalog.git diff --git a/catalog/packages/tests/test_nsdm_subscription.py b/catalog/packages/tests/test_nsdm_subscription.py index f73c416..2d95a1c 100644 --- a/catalog/packages/tests/test_nsdm_subscription.py +++ b/catalog/packages/tests/test_nsdm_subscription.py @@ -15,16 +15,25 @@ import json import mock import uuid +import os from django.test import TestCase from rest_framework.test import APIClient from rest_framework import status +from requests.auth import HTTPBasicAuth from catalog.packages.biz.nsdm_subscription import NsdmSubscription from catalog.pub.database.models import NsdmSubscriptionModel +from catalog.packages.biz.notificationsutil import NsdNotifications, PnfNotifications +from catalog.packages import const +from catalog.pub.config import config as pub_config +import catalog.pub.utils.timeutil +from catalog.packages.tests.const import nsd_data +from catalog.pub.database.models import NSPackageModel, VnfPackageModel, PnfPackageModel +from catalog.pub.config.config import CATALOG_ROOT_PATH +from catalog.pub.utils import toscaparser class TestNsdmSubscription(TestCase): - def setUp(self): self.client = APIClient() NsdmSubscriptionModel.objects.all().delete() @@ -149,7 +158,7 @@ class TestNsdmSubscription(TestCase): response.data["callbackUri"]) expected_data = { 'status': 303, - 'detail': 'Already Subscription exists with' + 'detail': 'Subscription has already existed with' ' the same callbackUri and filter' } response = self.client.post("/api/nsd/v1/subscriptions", @@ -456,7 +465,7 @@ class TestNsdmSubscription(TestCase): expected_data = { "status": 404, "detail": "Subscription(" + self.subscription_id + ") " - "doesn't exists" + "doesn't exist" } response = self.client.get('/api/nsd/v1/' 'subscriptions/' + self.subscription_id, @@ -467,7 +476,7 @@ class TestNsdmSubscription(TestCase): def test_nsdm_get_subscription_failure_bad_request(self): response = self.client.get("/api/nsd/v1/subscriptions/123", format='json') - self.assertEqual(status.HTTP_400_BAD_REQUEST, response.status_code) + self.assertEqual(status.HTTP_404_NOT_FOUND, response.status_code) @mock.patch.object(NsdmSubscription, 'query_single_subscription') def test_nsdmsubscription_getsingle_when_catch_exception( @@ -509,7 +518,7 @@ class TestNsdmSubscription(TestCase): def test_nsdm_delete_subscription_failure_bad_request(self): response = self.client.delete("/api/nsd/v1/subscriptions/123", format='json') - self.assertEqual(status.HTTP_400_BAD_REQUEST, response.status_code) + self.assertEqual(status.HTTP_404_NOT_FOUND, response.status_code) @mock.patch.object(NsdmSubscription, 'delete_single_subscription') def test_nsdmsubscription_delete_when_catch_exception(self, mock_create): @@ -519,3 +528,199 @@ class TestNsdmSubscription(TestCase): format='json') self.assertEqual(response.status_code, status.HTTP_500_INTERNAL_SERVER_ERROR) + + @mock.patch("requests.post") + @mock.patch.object(toscaparser, 'parse_nsd') + @mock.patch.object(catalog.pub.utils.timeutil, "now_time") + @mock.patch("requests.get") + @mock.patch.object(uuid, 'uuid4') + def test_nsdm_subscribe_trigger_notification(self, mock_uuid4, mock_requests, mock_nowtime, mock_parse_nsd, + mock_requests_post): + mock_requests.return_value.status_code = 204 + mock_requests.get.return_value.status_code = 204 + mock_uuid4.return_value = "1111" + mock_nowtime.return_value = "nowtime()" + + subscription_req = { + "callbackUri": "http://callbackuri.com", + "authentication": { + "authType": ["BASIC"], + "paramsBasic": { + "userName": "username", + "password": "password" + } + }, + "filter": { + "nsdId": ["b632bddc-bccd-4180-bd8d-4e8a9578eff7"] + } + } + response = self.client.post("/api/nsd/v1/subscriptions", + data=subscription_req, format='json') + self.assertEqual(201, response.status_code) + + self.user_defined_data = { + 'key1': 'value1', + 'key2': 'value2', + 'key3': 'value3', + } + user_defined_data_json = json.JSONEncoder().encode(self.user_defined_data) + mock_parse_nsd.return_value = json.JSONEncoder().encode(nsd_data) + VnfPackageModel( + vnfPackageId="111", + vnfdId="vcpe_vfw_zte_1_0" + ).save() + + PnfPackageModel( + pnfPackageId="112", + pnfdId="m6000_s" + ).save() + + NSPackageModel( + nsPackageId='d0ea5ec3-0b98-438a-9bea-488230cff174', + operationalState='DISABLED', + usageState='NOT_IN_USE', + userDefinedData=user_defined_data_json, + ).save() + + with open('nsd_content.txt', 'wt') as fp: + fp.write('test') + with open('nsd_content.txt', 'rt') as fp: + resp = self.client.put( + "/api/nsd/v1/ns_descriptors/d0ea5ec3-0b98-438a-9bea-488230cff174/nsd_content", + {'file': fp}, + ) + file_content = '' + with open(os.path.join(CATALOG_ROOT_PATH, 'd0ea5ec3-0b98-438a-9bea-488230cff174/nsd_content.txt')) as fp: + data = fp.read() + file_content = '%s%s' % (file_content, data) + ns_pkg = NSPackageModel.objects.filter(nsPackageId="d0ea5ec3-0b98-438a-9bea-488230cff174") + self.assertEqual("b632bddc-bccd-4180-bd8d-4e8a9578eff7", ns_pkg[0].nsdId) + self.assertEqual(const.PKG_STATUS.ONBOARDED, ns_pkg[0].onboardingState) + self.assertEqual(resp.status_code, status.HTTP_204_NO_CONTENT) + self.assertEqual(None, resp.data) + self.assertEqual(file_content, 'test') + os.remove('nsd_content.txt') + expect_callbackuri = "http://callbackuri.com" + expect_notification = { + 'id': "1111", + 'notificationType': const.NSD_NOTIFICATION_TYPE.NSD_ONBOARDING, + 'timeStamp': "nowtime()", + 'nsdInfoId': "d0ea5ec3-0b98-438a-9bea-488230cff174", + 'nsdId': "b632bddc-bccd-4180-bd8d-4e8a9578eff7", + "subscriptionId": "1111", + '_links': { + 'subscription': { + 'href': 'http://%s:%s/%s%s' % (pub_config.MSB_SERVICE_IP, + pub_config.MSB_SERVICE_PORT, + const.NSDM_SUBSCRIPTION_ROOT_URI, + "1111")}, + 'nsdInfo': { + 'href': 'http://%s:%s/%s/ns_descriptors/%s' % (pub_config.MSB_SERVICE_IP, + pub_config.MSB_SERVICE_PORT, + const.NSD_URL_PREFIX, + "d0ea5ec3-0b98-438a-9bea-488230cff174") + } + } + } + mock_requests_post.assert_called_with(expect_callbackuri, data=expect_notification, + auth=HTTPBasicAuth("username", "password"), + headers={'Connection': 'close', + 'content-type': 'application/json', + 'accept': 'application/json'}, + verify=False) + + +class NotificationTest(TestCase): + def setUp(self): + NsdmSubscriptionModel(subscriptionid="1", + callback_uri="http://127.0.0.1/self", + notificationTypes=const.NOTIFICATION_TYPES, + nsdId="nsdid1", + nsdInfoId="nsdinfoid1", + pnfdInfoIds="pnfdInfoIds1", + pnfdId="pnfdId1" + ).save() + + def tearDown(self): + NsdmSubscriptionModel.objects.all().delete() + + @mock.patch("requests.post") + @mock.patch("uuid.uuid4") + @mock.patch.object(catalog.pub.utils.timeutil, "now_time") + def test_nsdpkg_notify(self, mock_nowtime, mock_uuid, mock_requests_post): + mock_nowtime.return_value = "nowtime()" + mock_uuid.return_value = "1111" + notify = NsdNotifications(const.NSD_NOTIFICATION_TYPE.NSD_ONBOARDING_FAILURE, + nsd_info_id="nsdinfoid1", + nsd_id="nsdid1", + failure_details="NSD(nsdid1) already exists.", operational_state=None) + notify.send_notification() + expect_callbackuri = "http://127.0.0.1/self" + expect_notification = { + 'id': "1111", + 'notificationType': const.NSD_NOTIFICATION_TYPE.NSD_ONBOARDING_FAILURE, + 'timeStamp': "nowtime()", + 'nsdInfoId': "nsdinfoid1", + 'nsdId': "nsdid1", + 'onboardingFailureDetails': "NSD(nsdid1) already exists.", + "subscriptionId": "1", + '_links': { + 'subscription': { + 'href': 'http://%s:%s/%s%s' % (pub_config.MSB_SERVICE_IP, + pub_config.MSB_SERVICE_PORT, + const.NSDM_SUBSCRIPTION_ROOT_URI, + "1")}, + 'nsdInfo': { + 'href': 'http://%s:%s/%s/ns_descriptors/%s' % (pub_config.MSB_SERVICE_IP, + pub_config.MSB_SERVICE_PORT, + const.NSD_URL_PREFIX, + "nsdinfoid1") + } + } + } + mock_requests_post.assert_called_with(expect_callbackuri, + data=expect_notification, + headers={'Connection': 'close', + 'content-type': 'application/json', + 'accept': 'application/json'}, + verify=False + ) + + @mock.patch("requests.post") + @mock.patch("uuid.uuid4") + @mock.patch.object(catalog.pub.utils.timeutil, "now_time") + def test_pnfpkg_notify(self, mock_nowtime, mock_uuid, mock_requests_post): + mock_nowtime.return_value = "nowtime()" + mock_uuid.return_value = "1111" + notify = PnfNotifications(const.NSD_NOTIFICATION_TYPE.PNFD_ONBOARDING, + pnfd_info_id="pnfdInfoIds1", + pnfd_id='pnfdId1', + failure_details=None) + notify.send_notification() + expect_callbackuri = "http://127.0.0.1/self" + expect_notification = { + 'id': "1111", + 'notificationType': const.NSD_NOTIFICATION_TYPE.PNFD_ONBOARDING, + 'timeStamp': "nowtime()", + 'pnfdInfoIds': "pnfdInfoIds1", + 'pnfdId': "pnfdId1", + "subscriptionId": "1", + '_links': { + 'subscription': { + 'href': 'http://%s:%s/%s%s' % (pub_config.MSB_SERVICE_IP, + pub_config.MSB_SERVICE_PORT, + const.NSDM_SUBSCRIPTION_ROOT_URI, + "1")}, + 'pnfdInfo': { + 'href': 'http://%s:%s/%s/pnf_descriptors/%s' % (pub_config.MSB_SERVICE_IP, + pub_config.MSB_SERVICE_PORT, + const.NSD_URL_PREFIX, + "pnfdInfoIds1") + } + } + } + mock_requests_post.assert_called_with(expect_callbackuri, data=expect_notification, + headers={'Connection': 'close', + 'content-type': 'application/json', + 'accept': 'application/json'}, + verify=False)