Addition of PaaS
[osm/osmclient.git] / osmclient / sol005 / tests / test_paas.py
1 # Copyright 2021 Canonical Ltd.
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 json
16 import unittest
17 from unittest.mock import Mock, patch
18
19 from osmclient.common.exceptions import ClientException, NotFound
20 from osmclient.sol005.paas import PAAS
21
22
23 class TestPaaS(unittest.TestCase):
24 def setUp(self):
25 self.paas = PAAS(Mock(), Mock())
26 self.paas_data = {
27 "name": "name",
28 "type": "juju",
29 "endpoints": ["127.0.0.1:17070"],
30 "user": "user",
31 "secret": "secret",
32 "description": "description",
33 "config": {},
34 }
35
36 @patch("builtins.print")
37 def test_create_success(self, mock_print):
38 self.paas._http.post_cmd.return_value = (200, '{"id": "1234"}')
39 self.paas.create(self.paas_data)
40 self.paas._client.get_token.assert_called()
41 self.paas._http.post_cmd.assert_called_with(
42 endpoint="/admin/v1/paas", postfields_dict=self.paas_data
43 )
44 mock_print.assert_called_with("PaaS name created with ID 1234")
45
46 @patch("builtins.print")
47 def test_create_raise_exception(self, mock_print):
48 self.paas._http.post_cmd.return_value = (404, None)
49 with self.assertRaises(ClientException):
50 self.paas.create(self.paas_data)
51 self.paas._client.get_token.assert_called()
52 self.paas._http.post_cmd.assert_called_with(
53 endpoint="/admin/v1/paas", postfields_dict=self.paas_data
54 )
55 mock_print.assert_not_called()
56
57 @patch("osmclient.sol005.paas.utils")
58 def test_update_success(self, mock_utils):
59 mock_utils.validate_uuid4.return_value = False
60 self.paas.get = Mock()
61 self.paas.get.return_value = {"_id": "1234"}
62 self.paas.update("paas_name", self.paas_data)
63 self.paas._http.patch_cmd.assert_called_with(
64 endpoint="/admin/v1/paas/1234", postfields_dict=self.paas_data
65 )
66
67 @patch("osmclient.sol005.paas.utils")
68 def test_update_fail_not_found_exception(self, mock_utils):
69 mock_utils.validate_uuid4.return_value = False
70 self.paas.get = Mock()
71 self.paas.get.side_effect = NotFound()
72 with self.assertRaises(NotFound):
73 self.paas.update("paas_name", self.paas_data)
74 self.paas._http.patch_cmd.assert_not_called()
75
76 @patch("osmclient.sol005.paas.utils")
77 def test_update_fail_client_exception(self, mock_utils):
78 mock_utils.validate_uuid4.return_value = False
79 self.paas.get = Mock()
80 self.paas.get.side_effect = ClientException()
81 with self.assertRaises(ClientException):
82 self.paas.update("paas_name", self.paas_data)
83 self.paas._http.patch_cmd.assert_not_called()
84
85 @patch("osmclient.sol005.paas.utils")
86 def test_update_using_id(self, mock_utils):
87 mock_utils.validate_uuid4.return_value = True
88 self.paas.get = Mock()
89 self.paas.update("1234", self.paas_data)
90 self.paas._http.patch_cmd.assert_called_with(
91 endpoint="/admin/v1/paas/1234", postfields_dict=self.paas_data
92 )
93 self.paas.get.assert_not_called()
94
95 def test_get_id_sucess(self):
96 self.paas_data.update({"_id": "1234"})
97 self.paas.list = Mock()
98 self.paas.list.return_value = [self.paas_data]
99 paas_id = self.paas.get_id("name")
100 self.assertEqual(paas_id, "1234")
101
102 def test_get_id_not_found(self):
103 self.paas.list = Mock()
104 self.paas.list.return_value = []
105 with self.assertRaises(NotFound):
106 self.paas.get_id("name")
107
108 @patch("osmclient.sol005.paas.utils")
109 @patch("builtins.print")
110 def test_delete_success_202(self, mock_print, mock_utils):
111 mock_utils.validate_uuid4.return_value = False
112 self.paas.get_id = Mock()
113 self.paas.get_id.return_value = "1234"
114 self.paas._http.delete_cmd.return_value = (202, None)
115 self.paas.delete("paas_name")
116 self.paas._client.get_token.assert_called()
117 self.paas._http.delete_cmd.assert_called_with("/admin/v1/paas/1234")
118 mock_print.assert_called_with("Deletion in progress")
119
120 @patch("osmclient.sol005.paas.utils")
121 @patch("builtins.print")
122 def test_delete_success_204(self, mock_print, mock_utils):
123 mock_utils.validate_uuid4.return_value = False
124 self.paas.get_id = Mock()
125 self.paas.get_id.return_value = "1234"
126 self.paas._http.delete_cmd.return_value = (204, None)
127 self.paas.delete("paas_name", force=True)
128 self.paas._client.get_token.assert_called()
129 self.paas._http.delete_cmd.assert_called_with("/admin/v1/paas/1234?FORCE=True")
130 mock_print.assert_called_with("Deleted")
131
132 @patch("osmclient.sol005.paas.utils")
133 @patch("builtins.print")
134 def test_delete_fail_404(self, mock_print, mock_utils):
135 mock_utils.validate_uuid4.return_value = False
136 self.paas.get_id = Mock()
137 self.paas.get_id.return_value = "1234"
138 self.paas._http.delete_cmd.return_value = (404, "Not found")
139 with self.assertRaises(ClientException):
140 self.paas.delete("paas_name")
141 self.paas._client.get_token.assert_called()
142 self.paas._http.delete_cmd.assert_called_with("/admin/v1/paas/1234")
143 mock_print.assert_not_called()
144
145 @patch("osmclient.sol005.paas.utils")
146 @patch("builtins.print")
147 def test_delete_failed_id_not_found(self, mock_print, mock_utils):
148 mock_utils.validate_uuid4.return_value = False
149 self.paas.get_id = Mock()
150 self.paas.get_id.side_effect = NotFound()
151 self.paas._http.delete_cmd.return_value = (204, None)
152 with self.assertRaises(NotFound):
153 self.paas.delete("paas_name", force=True)
154 self.paas._client.get_token.assert_called()
155 self.paas._http.delete_cmd.assert_not_called()
156 mock_print.assert_not_called()
157
158 @patch("osmclient.sol005.paas.utils")
159 @patch("builtins.print")
160 def test_delete_using_id(self, mock_print, mock_utils):
161 mock_utils.validate_uuid4.return_value = True
162 self.paas.get_id = Mock()
163 self.paas._http.delete_cmd.return_value = (202, None)
164 paas_id = "1234"
165 self.paas.delete(paas_id)
166 self.paas.get_id.assert_not_called()
167 self.paas._client.get_token.assert_called()
168 self.paas._http.delete_cmd.assert_called_with("/admin/v1/paas/1234")
169 mock_print.assert_called_with("Deletion in progress")
170
171 @patch("osmclient.sol005.paas.utils")
172 @patch("builtins.print")
173 def test_delete_using_id_client_exception(self, mock_print, mock_utils):
174 mock_utils.validate_uuid4.return_value = True
175 self.paas.get_id = Mock()
176 self.paas._http.delete_cmd.return_value = (5, None)
177 paas_id = "1234"
178 with self.assertRaises(ClientException):
179 self.paas.delete(paas_id, force=True)
180 self.paas._client.get_token.assert_called()
181 self.paas.get_id.assert_not_called()
182 self.paas._http.delete_cmd.assert_called_with("/admin/v1/paas/1234?FORCE=True")
183 mock_print.assert_not_called()
184
185 @patch("osmclient.sol005.paas.utils")
186 @patch("builtins.print")
187 def test_delete_using_id_not_found(self, mock_print, mock_utils):
188 mock_utils.validate_uuid4.return_value = True
189 self.paas.get_id = Mock()
190 self.paas._http.delete_cmd.side_effect = NotFound()
191 paas_id = "1234"
192 with self.assertRaises(NotFound):
193 self.paas.delete(paas_id, force=True)
194 self.paas._client.get_token.assert_called()
195 self.paas.get_id.assert_not_called()
196 self.paas._http.delete_cmd.assert_called_with("/admin/v1/paas/1234?FORCE=True")
197 mock_print.assert_not_called()
198
199 def test_list_success(self):
200 self.paas._http.get2_cmd.return_value = (None, '[{"_id": "1234"}]')
201 paas_list = self.paas.list("my_filter")
202 self.paas._client.get_token.assert_called()
203 self.paas._http.get2_cmd.assert_called_with("/admin/v1/paas?my_filter")
204 self.assertEqual(paas_list, [{"_id": "1234"}])
205
206 def test_list_no_response(self):
207 self.paas._http.get2_cmd.return_value = (None, None)
208 paas_list = self.paas.list()
209 self.paas._client.get_token.assert_called()
210 self.paas._http.get2_cmd.assert_called_with("/admin/v1/paas")
211 self.assertEqual(paas_list, [])
212
213 @patch("osmclient.sol005.paas.utils")
214 def test_get_success(self, mock_utils):
215 self.paas_data.update({"_id": "1234"})
216 mock_utils.validate_uuid4.return_value = False
217 self.paas.get_id = Mock()
218 self.paas.get_id.return_value = "1234"
219 self.paas._http.get2_cmd.return_value = (0, json.dumps(self.paas_data))
220 paas = self.paas.get("paas_name")
221 self.paas._client.get_token.assert_called()
222 self.paas._http.get2_cmd.assert_called_with("/admin/v1/paas/1234")
223 self.assertEqual(paas, self.paas_data)
224
225 @patch("osmclient.sol005.paas.utils")
226 def test_get_client_exception(self, mock_utils):
227 mock_utils.validate_uuid4.return_value = False
228 self.paas.get_id = Mock()
229 self.paas.get_id.return_value = "1234"
230 self.paas._http.get2_cmd.return_value = (404, json.dumps({}))
231 with self.assertRaises(ClientException):
232 self.paas.get("paas_name")
233 self.paas._client.get_token.assert_called()
234 self.paas._http.get2_cmd.assert_called_with("/admin/v1/paas/1234")
235
236 @patch("osmclient.sol005.paas.utils")
237 def test_get_not_found_exception(self, mock_utils):
238 mock_utils.validate_uuid4.return_value = False
239 self.paas.get_id = Mock()
240 self.paas.get_id.return_value = "1234"
241 self.paas._http.get2_cmd.side_effect = NotFound()
242 with self.assertRaises(NotFound):
243 self.paas.get("paas_name")
244 self.paas._client.get_token.assert_called()
245 self.paas._http.get2_cmd.assert_called_with("/admin/v1/paas/1234")
246
247 @patch("osmclient.sol005.paas.utils")
248 def test_get_success_use_id(self, mock_utils):
249 self.paas_data.update({"_id": "1234"})
250 mock_utils.validate_uuid4.return_value = True
251 self.paas._http.get2_cmd.return_value = (0, json.dumps(self.paas_data))
252 paas = self.paas.get("1234")
253 self.paas._client.get_token.assert_called()
254 self.paas._http.get2_cmd.assert_called_with("/admin/v1/paas/1234")
255 self.assertEqual(paas, self.paas_data)
256
257 @patch("osmclient.sol005.paas.utils")
258 def test_get_with_get_id_exception(self, mock_utils):
259 self.paas_data.update({"_id": "1234"})
260 mock_utils.validate_uuid4.return_value = False
261 self.paas.get_id = Mock()
262 self.paas.get_id.side_effect = NotFound()
263 self.paas._http.get2_cmd.return_value = (404, json.dumps(self.paas_data))
264 with self.assertRaises(NotFound):
265 self.paas.get("paas_name")
266 self.paas._client.get_token.assert_called()
267 self.paas._http.get2_cmd.assert_not_called()