1 # Copyright (C) 2019 Verizon. All Rights Reserved
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
7 # http://www.apache.org/licenses/LICENSE-2.0
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
18 from rest_framework.test import APIClient
19 from django.test import TestCase
21 from catalog.pub.database.models import VnfPkgSubscriptionModel, VnfPackageModel
22 from .const import vnf_subscription_data
23 from catalog.packages.biz.notificationsutil import NotificationsUtil, prepare_vnfpkg_notification
24 from catalog.packages import const
25 from catalog.pub.config import config as pub_config
26 import catalog.pub.utils.timeutil
29 class TestNfPackageSubscription(TestCase):
31 self.client = APIClient()
32 VnfPkgSubscriptionModel.objects.filter().delete()
33 self.vnf_subscription_data = vnf_subscription_data
38 @mock.patch("requests.get")
39 @mock.patch.object(uuid, 'uuid4')
40 def test_create_vnf_subscription(self, mock_uuid4, mock_requests):
41 temp_uuid = "99442b18-a5c7-11e8-998c-bf1755941f13"
42 mock_requests.return_value.status_code = 204
43 mock_requests.get.status_code = 204
44 mock_uuid4.return_value = temp_uuid
45 response = self.client.post(
46 "/api/vnfpkgm/v1/subscriptions",
47 data=self.vnf_subscription_data,
50 self.assertEqual(201, response.status_code)
52 self.vnf_subscription_data["callbackUri"],
53 response.data["callbackUri"]
55 self.assertEqual(temp_uuid, response.data["id"])
57 @mock.patch("requests.get")
58 @mock.patch.object(uuid, 'uuid4')
59 def test_duplicate_subscriptions(self, mock_uuid4, mock_requests):
60 temp_uuid = "99442b18-a5c7-11e8-998c-bf1755941f13"
61 temp1_uuid = "00342b18-a5c7-11e8-998c-bf1755941f12"
62 mock_requests.return_value.status_code = 204
63 mock_requests.get.status_code = 204
64 mock_uuid4.side_effect = [temp_uuid, temp1_uuid]
65 response = self.client.post(
66 "/api/vnfpkgm/v1/subscriptions",
67 data=self.vnf_subscription_data,
70 self.assertEqual(201, response.status_code)
72 self.vnf_subscription_data["callbackUri"],
73 response.data["callbackUri"]
75 self.assertEqual(temp_uuid, response.data["id"])
76 temp_uuid = "00442b18-a5c7-11e8-998c-bf1755941f12"
77 mock_requests.return_value.status_code = 204
78 mock_requests.get.status_code = 204
79 mock_uuid4.return_value = temp_uuid
80 response = self.client.post(
81 "/api/vnfpkgm/v1/subscriptions",
82 data=self.vnf_subscription_data,
85 self.assertEqual(303, response.status_code)
87 @mock.patch("requests.get")
88 @mock.patch.object(uuid, 'uuid4')
89 def test_get_subscriptions(self, mock_uuid4, mock_requests):
90 temp_uuid = "99442b18-a5c7-11e8-998c-bf1755941f13"
91 mock_requests.return_value.status_code = 204
92 mock_requests.get.status_code = 204
93 mock_uuid4.return_value = temp_uuid
95 "/api/vnfpkgm/v1/subscriptions",
96 data=self.vnf_subscription_data,
99 response = self.client.get(
100 "/api/vnfpkgm/v1/subscriptions?usageState=IN_USE",
103 self.assertEqual(200, response.status_code)
104 self.assertEqual(1, len(response.data))
106 @mock.patch("requests.get")
107 @mock.patch.object(uuid, 'uuid4')
108 def test_get_subscriptions_with_invalid_params(self, mock_uuid4, mock_requests):
109 temp_uuid = "99442b18-a5c7-11e8-998c-bf1755941f13"
110 mock_requests.return_value.status_code = 204
111 mock_requests.get.status_code = 204
112 mock_uuid4.return_value = temp_uuid
114 "/api/vnfpkgm/v1/subscriptions",
115 data=self.vnf_subscription_data,
118 response = self.client.get(
119 "/api/vnfpkgm/v1/subscriptions?dummy=dummy",
122 self.assertEqual(400, response.status_code)
124 @mock.patch("requests.get")
125 @mock.patch.object(uuid, 'uuid4')
126 def test_get_subscription_with_id(self, mock_uuid4, mock_requests):
127 temp_uuid = "99442b18-a5c7-11e8-998c-bf1755941f13"
128 mock_requests.return_value.status_code = 204
129 mock_requests.get.status_code = 204
130 mock_uuid4.return_value = temp_uuid
132 "/api/vnfpkgm/v1/subscriptions",
133 data=self.vnf_subscription_data,
136 response = self.client.get(
137 "/api/vnfpkgm/v1/subscriptions/%s" % temp_uuid,
140 self.assertEqual(200, response.status_code)
141 self.assertEqual(temp_uuid, response.data["id"])
143 @mock.patch("requests.get")
144 @mock.patch.object(uuid, 'uuid4')
145 def test_get_subscription_with_id_not_exists(self, mock_uuid4, mock_requests):
146 temp_uuid = "99442b18-a5c7-11e8-998c-bf1755941f13"
147 dummy_uuid = str(uuid.uuid4())
148 mock_requests.return_value.status_code = 204
149 mock_requests.get.status_code = 204
150 mock_uuid4.return_value = temp_uuid
152 "/api/vnfpkgm/v1/subscriptions",
153 data=self.vnf_subscription_data,
156 response = self.client.get(
157 "/api/vnfpkgm/v1/subscriptions/%s" % dummy_uuid,
160 self.assertEqual(404, response.status_code)
162 @mock.patch("requests.get")
163 @mock.patch.object(uuid, 'uuid4')
164 def test_delete_subscription_with_id(self, mock_uuid4, mock_requests):
165 temp_uuid = "99442b18-a5c7-11e8-998c-bf1755941f13"
166 dummy_uuid = str(uuid.uuid4())
167 mock_requests.return_value.status_code = 204
168 mock_requests.get.status_code = 204
169 mock_uuid4.return_value = temp_uuid
171 "/api/vnfpkgm/v1/subscriptions",
172 data=self.vnf_subscription_data,
176 "/api/vnfpkgm/v1/subscriptions/%s" % dummy_uuid,
179 response = self.client.delete("/api/vnfpkgm/v1/subscriptions/%s" % temp_uuid)
180 self.assertEqual(204, response.status_code)
182 @mock.patch("requests.get")
183 @mock.patch.object(uuid, 'uuid4')
184 def test_delete_subscription_with_id_not_exists(self, mock_uuid4, mock_requests):
185 dummy_uuid = str(uuid.uuid4())
186 response = self.client.delete("/api/vnfpkgm/v1/subscriptions/%s" % dummy_uuid)
187 self.assertEqual(404, response.status_code)
190 class NotificationTest(TestCase):
192 VnfPackageModel(vnfPackageId="vnfpkgid1",
196 VnfPkgSubscriptionModel(subscription_id="1",
197 callback_uri="http://127.0.0.1/self",
198 notification_types=const.NOTIFICATION_TYPES,
200 vnf_pkg_id="vnfpkgid1"
204 VnfPackageModel.objects.all().delete()
205 VnfPkgSubscriptionModel.objects.all().delete()
207 @mock.patch("requests.post")
208 @mock.patch("uuid.uuid4")
209 @mock.patch.object(catalog.pub.utils.timeutil, "now_time")
210 def test_vnfpkg_notify(self, mock_nowtime, mock_uuid, mock_requests_post):
211 mock_nowtime.return_value = "nowtime()"
212 mock_uuid.return_value = "1111"
213 notification_content = prepare_vnfpkg_notification("vnfpkgid1", const.PKG_NOTIFICATION_TYPE.CHANGE,
214 const.PKG_CHANGE_TYPE.OP_STATE_CHANGE, operational_state=None)
217 'vnfPkgId': 'vnf_pkg_id'
219 NotificationsUtil().send_notification(notification_content, filters, True)
220 expect_callbackuri = "http://127.0.0.1/self"
221 expect_notification = {
223 'notificationType': const.PKG_NOTIFICATION_TYPE.CHANGE,
224 'timeStamp': "nowtime()",
225 'vnfPkgId': "vnfpkgid1",
227 'changeType': const.PKG_CHANGE_TYPE.OP_STATE_CHANGE,
228 'operationalState': None,
229 "subscriptionId": "1",
232 'href': 'http://%s:%s/%s%s' % (pub_config.MSB_SERVICE_IP,
233 pub_config.MSB_SERVICE_PORT,
234 const.VNFPKG_SUBSCRIPTION_ROOT_URI,
237 'href': 'http://%s:%s/%s/vnf_packages/%s' % (pub_config.MSB_SERVICE_IP,
238 pub_config.MSB_SERVICE_PORT,
239 const.PKG_URL_PREFIX,
244 mock_requests_post.assert_called_with(expect_callbackuri, data=expect_notification, headers={'Connection': 'close'})