1 # Copyright 2021 Canonical 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.
17 from unittest
.mock
import Mock
, patch
19 from osmclient
.common
.exceptions
import ClientException
, NotFound
20 from osmclient
.sol005
.paas
import PAAS
23 class TestPaaS(unittest
.TestCase
):
25 self
.paas
= PAAS(Mock(), Mock())
29 "endpoints": ["127.0.0.1:17070"],
32 "description": "description",
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
44 mock_print
.assert_called_with("PaaS name created with ID 1234")
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
55 mock_print
.assert_not_called()
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
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()
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()
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
93 self
.paas
.get
.assert_not_called()
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")
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")
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")
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")
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()
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()
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)
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")
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)
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()
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()
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()
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"}])
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
, [])
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
)
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")
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")
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
)
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()