vfclcm upgrade from python2 to python3
[vfc/gvnfm/vnflcm.git] / lcm / lcm / nf / tests / test_subscribe_notification.py
1 # Copyright (C) 2018 Verizon. All Rights Reserved
2 #
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
6 #
7 #         http://www.apache.org/licenses/LICENSE-2.0
8 #
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.
14
15 import mock
16 from django.test import TestCase
17 from rest_framework.test import APIClient
18 import uuid
19
20
21 class TestSubscription(TestCase):
22     def setUp(self):
23         self.client = APIClient()
24
25     def tearDown(self):
26         pass
27
28     @mock.patch("requests.get")
29     @mock.patch.object(uuid, 'uuid4')
30     def test_subscribe_notification_simple(self, mock_uuid4, mock_requests):
31         temp_uuid = "99442b18-a5c7-11e8-998c-bf1755941f13"
32         dummy_subscription = {
33             "callbackUri": "http://aurl.com"
34         }
35         mock_requests.return_value.status_code = 204
36         mock_requests.get.status_code = 204
37         mock_uuid4.return_value = temp_uuid
38         response = self.client.post("/api/vnflcm/v1/subscriptions", data=dummy_subscription, format='json')
39         self.assertEqual(201, response.status_code)
40         self.assertEqual(dummy_subscription["callbackUri"], response.data["callbackUri"])
41         self.assertEqual(temp_uuid, response.data["id"])
42
43     @mock.patch("requests.get")
44     @mock.patch.object(uuid, 'uuid4')
45     def test_subscribe_notification(self, mock_uuid4, mock_requests):
46         temp_uuid = "99442b18-a5c7-11e8-998c-bf1755941f13"
47         dummy_subscription = {
48             "callbackUri": "http://aurl.com",
49             "authentication": {
50                 "authType": ["BASIC"],
51                 "paramsBasic": {
52                     "username": "username",
53                     "password": "password"
54                 }
55             },
56             "filter": {
57                 "notificationTypes": ["VnfLcmOperationOccurrenceNotification"],
58                 "operationTypes": [
59                     "INSTANTIATE"
60                 ],
61                 "operationStates": [
62                     "STARTING"
63                 ],
64             }
65         }
66         mock_requests.return_value.status_code = 204
67         mock_requests.get.return_value.status_code = 204
68         mock_uuid4.return_value = temp_uuid
69         response = self.client.post("/api/vnflcm/v1/subscriptions", data=dummy_subscription, format='json')
70         self.assertEqual(201, response.status_code)
71         self.assertEqual(dummy_subscription["callbackUri"], response.data["callbackUri"])
72         self.assertEqual(temp_uuid, response.data["id"])
73
74     @mock.patch("requests.get")
75     def test_invalid_auth_subscription(self, mock_requests):
76         dummy_subscription = {
77             "callbackUri": "http://aurl.com",
78             "authentication": {
79                 "authType": ["OAUTH2_CLIENT_CREDENTIALS"],
80                 "paramsBasic": {
81                     "username": "username",
82                     "password": "password"
83                 }
84             },
85             "filter": {
86                 "notificationTypes": ["VnfLcmOperationOccurrenceNotification"],
87                 "operationTypes": [
88                     "INSTANTIATE"
89                 ],
90                 "operationStates": [
91                     "STARTING"
92                 ],
93             }
94         }
95         mock_requests.return_value.status_code = 204
96         mock_requests.get.return_value.status_code = 204
97         expected_data = {
98             'detail': 'Auth type should be BASIC',
99             'status': 500
100         }
101         response = self.client.post("/api/vnflcm/v1/subscriptions", data=dummy_subscription, format='json')
102         self.assertEqual(500, response.status_code)
103         self.assertEqual(expected_data, response.data)
104
105     @mock.patch("requests.get")
106     def test_invalid_notification_type(self, mock_requests):
107         dummy_subscription = {
108             "callbackUri": "http://aurl.com",
109             "authentication": {
110                 "authType": ["BASIC"],
111                 "paramsBasic": {
112                     "username": "username",
113                     "password": "password"
114                 }
115             },
116             "filter": {
117                 "notificationTypes": ["VnfIdentifierDeletionNotification"],
118                 "operationTypes": [
119                     "INSTANTIATE"
120                 ],
121                 "operationStates": [
122                     "STARTING"
123                 ],
124             }
125         }
126         mock_requests.return_value.status_code = 204
127         mock_requests.get.return_value.status_code = 204
128         expected_data = {
129             'detail': 'If you are setting operationTypes,then ' +
130             'notificationTypes must be VnfLcmOperationOccurrenceNotification',
131             'status': 500
132         }
133         response = self.client.post("/api/vnflcm/v1/subscriptions", data=dummy_subscription, format='json')
134         self.assertEqual(500, response.status_code)
135         self.assertEqual(expected_data, response.data)
136
137     @mock.patch("requests.get")
138     @mock.patch.object(uuid, 'uuid4')
139     def test_duplicate_subscription(self, mock_uuid4, mock_requests):
140         temp_uuid = str(uuid.uuid4())
141         dummy_subscription = {
142             "callbackUri": "http://aurl.com",
143             "filter": {
144                 "notificationTypes": ["VnfLcmOperationOccurrenceNotification"],
145                 "operationTypes": [
146                     "INSTANTIATE"
147                 ],
148                 "operationStates": [
149                     "STARTING"
150                 ]
151             }
152         }
153         mock_requests.return_value.status_code = 204
154         mock_requests.get.return_value.status_code = 204
155         mock_uuid4.return_value = temp_uuid
156         response = self.client.post("/api/vnflcm/v1/subscriptions", data=dummy_subscription, format='json')
157         self.assertEqual(201, response.status_code)
158         self.assertEqual(dummy_subscription["callbackUri"], response.data["callbackUri"])
159         self.assertEqual(temp_uuid, response.data["id"])
160         response = self.client.post("/api/vnflcm/v1/subscriptions", data=dummy_subscription, format='json')
161         self.assertEqual(303, response.status_code)
162
163     @mock.patch("requests.get")
164     @mock.patch.object(uuid, 'uuid4')
165     def test_badreq_subscription(self, mock_uuid4, mock_requests):
166         temp_uuid = str(uuid.uuid4())
167         miss_callbackUri_subscription = {
168             "filter": {
169                 "notificationTypes": ["VnfLcmOperationOccurrenceNotification"],
170                 "operationTypes": [
171                     "INSTANTIATE"
172                 ],
173                 "operationStates": [
174                     "STARTING"
175                 ]
176             }
177         }
178         mock_requests.return_value.status_code = 204
179         mock_requests.get.return_value.status_code = 204
180         mock_uuid4.return_value = temp_uuid
181         response = self.client.post("/api/vnflcm/v1/subscriptions", data=miss_callbackUri_subscription, format='json')
182         self.assertEqual(400, response.status_code)
183         self.assertEqual({'callbackUri': ['This field is required.']}, response.data['detail'])