1 # Copyright (c) 2019, CMCC Technologies Co., Ltd.
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.
16 from django.test import TestCase
17 from rest_framework import status
18 from rest_framework.test import APIClient
19 from lcm.pub.database.models import SubscriptionModel
20 from lcm.ns.tests import SUBSCRIPTION_DICT
23 class TestQuerySubscriptions(TestCase):
25 self.client = APIClient()
26 self.test_single_subscription = SUBSCRIPTION_DICT.copy()
27 self.subscription_id = "99442b18-a5c7-11e8-998c-bf1755941f16"
28 self.ns_instance_id = "cd552c9c-ab6f-11e8-b354-236c32aa91a1"
29 SubscriptionModel.objects.all().delete()
34 def test_get_subscriptions(self):
35 ns_instance_filter = {
37 "nsInstanceIds": [self.ns_instance_id],
42 "href": "/api/v1/subscriptions/99442b18-a5c7-11e8-998c-bf1755941f16"
46 subscription_id=self.subscription_id,
47 callback_uri="http://aurl.com",
49 notification_types="['NsLcmOperationOccurrenceNotification']",
50 operation_types="['INSTANTIATE']",
51 operation_states="['STARTING']",
52 links=json.dumps(links),
53 ns_instance_filter=json.dumps(ns_instance_filter)).save()
54 response = self.client.get("/api/nslcm/v1/subscriptions", format='json')
55 self.assertEqual(response.status_code, status.HTTP_200_OK)
56 self.assertEqual([self.test_single_subscription], response.data)
58 def test_get_subscriptions_with_ns_instance_id(self):
59 ns_instance_filter = {
61 "nsInstanceIds": [self.ns_instance_id],
66 "href": "/api/v1/subscriptions/99442b18-a5c7-11e8-998c-bf1755941f16"
70 subscription_id=self.subscription_id,
71 callback_uri="http://aurl.com",
73 notification_types="['NsLcmOperationOccurrenceNotification']",
74 operation_types="['INSTANTIATE']",
75 operation_states="['STARTING']",
76 links=json.dumps(links),
77 ns_instance_filter=json.dumps(ns_instance_filter)).save()
78 dummy_ns_id = "584b35e2-b2a2-11e8-8e11-645106374fd3"
79 dummy_subscription_id = "947dcd2c-b2a2-11e8-b365-645106374fd4"
80 ns_instance_filter["nsInstanceIds"].append(dummy_ns_id)
82 subscription_id=dummy_subscription_id,
83 callback_uri="http://aurl.com",
85 notification_types="['NsLcmOperationOccurrenceNotification']",
86 operation_types="['INSTANTIATE']",
87 operation_states="['STARTING']",
88 links=json.dumps(links),
89 ns_instance_filter=json.dumps(ns_instance_filter)).save()
90 response = self.client.get("/api/nslcm/v1/subscriptions?nsInstanceId=" + dummy_ns_id, format='json')
91 expected_response = self.test_single_subscription.copy()
92 expected_response["id"] = dummy_subscription_id
93 expected_response["filter"]["nsInstanceSubscriptionFilter"]["nsInstanceIds"] = ns_instance_filter["nsInstanceIds"]
94 self.assertEqual(response.status_code, status.HTTP_200_OK)
95 self.assertEqual([expected_response], response.data)
97 def test_get_subscriptions_with_unknown_ns_instance_id(self):
98 ns_instance_filter = {
100 "nsInstanceIds": [self.ns_instance_id],
101 "nsInstanceNames": []
105 "href": "/api/v1/subscriptions/99442b18-a5c7-11e8-998c-bf1755941f16"
109 subscription_id=self.subscription_id,
110 callback_uri="http://aurl.com",
112 notification_types="['NsLcmOperationOccurrenceNotification']",
113 operation_types="['INSTANTIATE']",
114 operation_states="['STARTING']",
115 links=json.dumps(links),
116 ns_instance_filter=json.dumps(ns_instance_filter)).save()
117 response = self.client.get("/api/nslcm/v1/subscriptions?nsInstanceId=dummy", format='json')
118 self.assertEqual(response.status_code, status.HTTP_200_OK)
119 self.assertEqual([], response.data)
121 def test_get_subscriptions_with_invalid_filter(self):
122 ns_instance_filter = {
124 "nsInstanceIds": [self.ns_instance_id],
125 "nsInstanceNames": []
129 "href": "/api/v1/subscriptions/99442b18-a5c7-11e8-998c-bf1755941f16"
133 subscription_id=self.subscription_id,
134 callback_uri="http://aurl.com",
136 notification_types="['NsLcmOperationOccurrenceNotification']",
137 operation_types="['INSTANTIATE']",
138 operation_states="['STARTING']",
139 links=json.dumps(links),
140 ns_instance_filter=json.dumps(ns_instance_filter)).save()
141 response = self.client.get("/api/nslcm/v1/subscriptions?dummy=dummy", format='json')
142 self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
144 def test_get_subscriptions_with_operation_type_filter(self):
145 ns_instance_filter = {
147 "nsInstanceIds": [self.ns_instance_id],
148 "nsInstanceNames": []
152 "href": "/api/v1/subscriptions/99442b18-a5c7-11e8-998c-bf1755941f16"
156 subscription_id=self.subscription_id,
157 callback_uri="http://aurl.com",
159 notification_types="['NsLcmOperationOccurrenceNotification']",
160 operation_types="['INSTANTIATE']",
161 operation_states="['STARTING']",
162 links=json.dumps(links),
163 ns_instance_filter=json.dumps(ns_instance_filter)).save()
164 dummy_ns_id = "584b35e2-b2a2-11e8-8e11-645106374fd3"
165 dummy_subscription_id = "947dcd2c-b2a2-11e8-b365-645106374fd4"
166 ns_instance_filter["nsInstanceIds"].append(dummy_ns_id)
168 subscription_id=dummy_subscription_id,
169 callback_uri="http://aurl.com",
171 notification_types="['NsLcmOperationOccurrenceNotification']",
172 operation_types="['SCALE']",
173 operation_states="['STARTING']",
174 links=json.dumps(links),
175 ns_instance_filter=json.dumps(ns_instance_filter)).save()
176 response = self.client.get("/api/nslcm/v1/subscriptions?operationTypes=SCALE", format='json')
177 expected_response = self.test_single_subscription.copy()
178 expected_response["id"] = dummy_subscription_id
179 expected_response["filter"]["nsInstanceSubscriptionFilter"]["nsInstanceIds"] = ns_instance_filter["nsInstanceIds"]
180 expected_response["filter"]["operationTypes"] = ["SCALE"]
181 self.assertEqual(response.status_code, status.HTTP_200_OK)
182 self.assertEqual([expected_response], response.data)