root / kamaki / clients / compute / test.py @ 6af47576
History | View | Annotate | Download (17.3 kB)
1 | 304a92dc | Stavros Sachtouris | # Copyright 2013 GRNET S.A. All rights reserved.
|
---|---|---|---|
2 | 304a92dc | Stavros Sachtouris | #
|
3 | 304a92dc | Stavros Sachtouris | # Redistribution and use in source and binary forms, with or
|
4 | 304a92dc | Stavros Sachtouris | # without modification, are permitted provided that the following
|
5 | 304a92dc | Stavros Sachtouris | # conditions are met:
|
6 | 304a92dc | Stavros Sachtouris | #
|
7 | 304a92dc | Stavros Sachtouris | # 1. Redistributions of source code must retain the above
|
8 | 304a92dc | Stavros Sachtouris | # copyright notice, this list of conditions and the following
|
9 | 304a92dc | Stavros Sachtouris | # disclaimer.
|
10 | 304a92dc | Stavros Sachtouris | #
|
11 | 304a92dc | Stavros Sachtouris | # 2. Redistributions in binary form must reproduce the above
|
12 | 304a92dc | Stavros Sachtouris | # copyright notice, this list of conditions and the following
|
13 | 304a92dc | Stavros Sachtouris | # disclaimer in the documentation and/or other materials
|
14 | 304a92dc | Stavros Sachtouris | # provided with the distribution.
|
15 | 304a92dc | Stavros Sachtouris | #
|
16 | 304a92dc | Stavros Sachtouris | # THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
|
17 | 304a92dc | Stavros Sachtouris | # OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
18 | 304a92dc | Stavros Sachtouris | # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
19 | 304a92dc | Stavros Sachtouris | # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
|
20 | 304a92dc | Stavros Sachtouris | # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
21 | 304a92dc | Stavros Sachtouris | # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
22 | 304a92dc | Stavros Sachtouris | # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
23 | 304a92dc | Stavros Sachtouris | # USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
24 | 304a92dc | Stavros Sachtouris | # AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
25 | 304a92dc | Stavros Sachtouris | # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
26 | 304a92dc | Stavros Sachtouris | # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
27 | 304a92dc | Stavros Sachtouris | # POSSIBILITY OF SUCH DAMAGE.
|
28 | 304a92dc | Stavros Sachtouris | #
|
29 | 304a92dc | Stavros Sachtouris | # The views and conclusions contained in the software and
|
30 | 304a92dc | Stavros Sachtouris | # documentation are those of the authors and should not be
|
31 | 304a92dc | Stavros Sachtouris | # interpreted as representing official policies, either expressed
|
32 | 304a92dc | Stavros Sachtouris | # or implied, of GRNET S.A.
|
33 | 304a92dc | Stavros Sachtouris | |
34 | 0482817c | Stavros Sachtouris | from mock import patch, call |
35 | 304a92dc | Stavros Sachtouris | from unittest import TestCase |
36 | 630dea9b | Stavros Sachtouris | from itertools import product |
37 | 6695edc9 | Stavros Sachtouris | from json import dumps |
38 | 304a92dc | Stavros Sachtouris | |
39 | 630dea9b | Stavros Sachtouris | from kamaki.clients.compute import ComputeClient, ComputeClientApi |
40 | 0482817c | Stavros Sachtouris | from kamaki.clients import ClientError |
41 | 304a92dc | Stavros Sachtouris | |
42 | edf8ad52 | Stavros Sachtouris | |
43 | 630dea9b | Stavros Sachtouris | rest_pkg = 'kamaki.clients.compute.rest_api.ComputeClientApi'
|
44 | 630dea9b | Stavros Sachtouris | compute_pkg = 'kamaki.clients.compute.ComputeClient'
|
45 | edf8ad52 | Stavros Sachtouris | |
46 | 304a92dc | Stavros Sachtouris | img_ref = "1m4g3-r3f3r3nc3"
|
47 | 304a92dc | Stavros Sachtouris | vm_name = "my new VM"
|
48 | 304a92dc | Stavros Sachtouris | fid = 42
|
49 | 304a92dc | Stavros Sachtouris | vm_send = dict(server=dict( |
50 | 304a92dc | Stavros Sachtouris | flavorRef=fid, |
51 | 304a92dc | Stavros Sachtouris | name=vm_name, |
52 | 304a92dc | Stavros Sachtouris | imageRef=img_ref, |
53 | 304a92dc | Stavros Sachtouris | metadata=dict(os="debian", users="root"))) |
54 | 304a92dc | Stavros Sachtouris | vm_recv = dict(server=dict( |
55 | 304a92dc | Stavros Sachtouris | status="BUILD",
|
56 | 304a92dc | Stavros Sachtouris | updated="2013-03-01T10:04:00.637152+00:00",
|
57 | 304a92dc | Stavros Sachtouris | hostId="",
|
58 | 304a92dc | Stavros Sachtouris | name=vm_name, |
59 | 304a92dc | Stavros Sachtouris | imageRef=img_ref, |
60 | 304a92dc | Stavros Sachtouris | created="2013-03-01T10:04:00.087324+00:00",
|
61 | 304a92dc | Stavros Sachtouris | flavorRef=fid, |
62 | 304a92dc | Stavros Sachtouris | adminPass="n0n3sh@11p@55",
|
63 | 304a92dc | Stavros Sachtouris | suspended=False,
|
64 | 304a92dc | Stavros Sachtouris | progress=0,
|
65 | 304a92dc | Stavros Sachtouris | id=31173,
|
66 | 304a92dc | Stavros Sachtouris | metadata=dict(values=dict(os="debian", users="root")))) |
67 | 304a92dc | Stavros Sachtouris | img_recv = dict(image=dict( |
68 | 304a92dc | Stavros Sachtouris | status="ACTIVE",
|
69 | 304a92dc | Stavros Sachtouris | updated="2013-02-26T11:10:14+00:00",
|
70 | 304a92dc | Stavros Sachtouris | name="Debian Base",
|
71 | 304a92dc | Stavros Sachtouris | created="2013-02-26T11:03:29+00:00",
|
72 | 304a92dc | Stavros Sachtouris | progress=100,
|
73 | 304a92dc | Stavros Sachtouris | id=img_ref, |
74 | 304a92dc | Stavros Sachtouris | metadata=dict(values=dict( |
75 | 304a92dc | Stavros Sachtouris | partition_table="msdos",
|
76 | 304a92dc | Stavros Sachtouris | kernel="2.6.32",
|
77 | 304a92dc | Stavros Sachtouris | osfamily="linux",
|
78 | 304a92dc | Stavros Sachtouris | users="root",
|
79 | 304a92dc | Stavros Sachtouris | gui="No GUI",
|
80 | 304a92dc | Stavros Sachtouris | sortorder="1",
|
81 | 304a92dc | Stavros Sachtouris | os="debian",
|
82 | 304a92dc | Stavros Sachtouris | root_partition="1",
|
83 | 304a92dc | Stavros Sachtouris | description="Debian 6.0.7 (Squeeze) Base System"))))
|
84 | 304a92dc | Stavros Sachtouris | vm_list = dict(servers=dict(values=[ |
85 | 304a92dc | Stavros Sachtouris | dict(name='n1', id=1), |
86 | 304a92dc | Stavros Sachtouris | dict(name='n2', id=2)])) |
87 | 304a92dc | Stavros Sachtouris | flavor_list = dict(flavors=dict(values=[ |
88 | 0482817c | Stavros Sachtouris | dict(id=41, name="C1R1024D20"), |
89 | 0482817c | Stavros Sachtouris | dict(id=42, name="C1R1024D40"), |
90 | 0482817c | Stavros Sachtouris | dict(id=43, name="C1R1028D20")])) |
91 | 304a92dc | Stavros Sachtouris | img_list = dict(images=dict(values=[ |
92 | 304a92dc | Stavros Sachtouris | dict(name="maelstrom", id="0fb03e45-7d5a-4515-bd4e-e6bbf6457f06"), |
93 | 304a92dc | Stavros Sachtouris | dict(name="edx_saas", id="1357163d-5fd8-488e-a117-48734c526206"), |
94 | 304a92dc | Stavros Sachtouris | dict(name="Debian_Wheezy_Base", id="1f8454f0-8e3e-4b6c-ab8e-5236b728dffe"), |
95 | 304a92dc | Stavros Sachtouris | dict(name="CentOS", id="21894b48-c805-4568-ac8b-7d4bb8eb533d"), |
96 | 304a92dc | Stavros Sachtouris | dict(name="Ubuntu Desktop", id="37bc522c-c479-4085-bfb9-464f9b9e2e31"), |
97 | 304a92dc | Stavros Sachtouris | dict(name="Ubuntu 12.10", id="3a24fef9-1a8c-47d1-8f11-e07bd5e544fd"), |
98 | 304a92dc | Stavros Sachtouris | dict(name="Debian Base", id="40ace203-6254-4e17-a5cb-518d55418a7d"), |
99 | 304a92dc | Stavros Sachtouris | dict(name="ubuntu_bundled", id="5336e265-5c7c-4127-95cb-2bf832a79903")])) |
100 | 304a92dc | Stavros Sachtouris | |
101 | 304a92dc | Stavros Sachtouris | |
102 | 304a92dc | Stavros Sachtouris | class FR(object): |
103 | 304a92dc | Stavros Sachtouris | """FR stands for Fake Response"""
|
104 | 304a92dc | Stavros Sachtouris | json = vm_recv |
105 | 304a92dc | Stavros Sachtouris | headers = {} |
106 | 304a92dc | Stavros Sachtouris | content = json |
107 | 304a92dc | Stavros Sachtouris | status = None
|
108 | 304a92dc | Stavros Sachtouris | status_code = 200
|
109 | 304a92dc | Stavros Sachtouris | |
110 | 304a92dc | Stavros Sachtouris | def release(self): |
111 | 304a92dc | Stavros Sachtouris | pass
|
112 | 304a92dc | Stavros Sachtouris | |
113 | 304a92dc | Stavros Sachtouris | |
114 | 630dea9b | Stavros Sachtouris | class ComputeRestApi(TestCase): |
115 | 630dea9b | Stavros Sachtouris | |
116 | 630dea9b | Stavros Sachtouris | """Set up a ComputesRestApi thorough test"""
|
117 | 630dea9b | Stavros Sachtouris | def setUp(self): |
118 | 630dea9b | Stavros Sachtouris | self.url = 'http://cyclades.example.com' |
119 | 630dea9b | Stavros Sachtouris | self.token = 'cyc14d3s70k3n' |
120 | 630dea9b | Stavros Sachtouris | self.client = ComputeClientApi(self.url, self.token) |
121 | 630dea9b | Stavros Sachtouris | |
122 | 630dea9b | Stavros Sachtouris | def tearDown(self): |
123 | 630dea9b | Stavros Sachtouris | FR.json = vm_recv |
124 | 630dea9b | Stavros Sachtouris | |
125 | 630dea9b | Stavros Sachtouris | @patch('%s.get' % rest_pkg, return_value=FR()) |
126 | 630dea9b | Stavros Sachtouris | def test_servers_get(self, get): |
127 | 630dea9b | Stavros Sachtouris | vm_id = vm_recv['server']['id'] |
128 | 630dea9b | Stavros Sachtouris | for args in product( |
129 | 630dea9b | Stavros Sachtouris | ('', vm_id),
|
130 | 630dea9b | Stavros Sachtouris | ('', 'cmd'), |
131 | 630dea9b | Stavros Sachtouris | (200, 204), |
132 | 630dea9b | Stavros Sachtouris | ({}, {'k': 'v'})): |
133 | 630dea9b | Stavros Sachtouris | (server_id, command, success, kwargs) = args |
134 | 6a00d7a7 | Stavros Sachtouris | self.client.servers_get(*args[:3], **kwargs) |
135 | 630dea9b | Stavros Sachtouris | vm_str = '/%s' % server_id if server_id else '' |
136 | 630dea9b | Stavros Sachtouris | cmd_str = '/%s' % command if command else '' |
137 | 630dea9b | Stavros Sachtouris | self.assertEqual(get.mock_calls[-1], call( |
138 | 630dea9b | Stavros Sachtouris | '/servers%s%s' % (vm_str, cmd_str),
|
139 | 630dea9b | Stavros Sachtouris | success=success, |
140 | 6a00d7a7 | Stavros Sachtouris | **kwargs)) |
141 | 630dea9b | Stavros Sachtouris | |
142 | 882c7e33 | Stavros Sachtouris | @patch('%s.delete' % rest_pkg, return_value=FR()) |
143 | 882c7e33 | Stavros Sachtouris | def test_servers_delete(self, delete): |
144 | 882c7e33 | Stavros Sachtouris | vm_id = vm_recv['server']['id'] |
145 | 882c7e33 | Stavros Sachtouris | for args in product( |
146 | 882c7e33 | Stavros Sachtouris | ('', vm_id),
|
147 | 882c7e33 | Stavros Sachtouris | ('', 'cmd'), |
148 | 882c7e33 | Stavros Sachtouris | (204, 208), |
149 | 882c7e33 | Stavros Sachtouris | ({}, {'k': 'v'})): |
150 | 882c7e33 | Stavros Sachtouris | (server_id, command, success, kwargs) = args |
151 | 882c7e33 | Stavros Sachtouris | self.client.servers_delete(*args[:3], **args[3]) |
152 | 882c7e33 | Stavros Sachtouris | vm_str = '/%s' % server_id if server_id else '' |
153 | 882c7e33 | Stavros Sachtouris | cmd_str = '/%s' % command if command else '' |
154 | 882c7e33 | Stavros Sachtouris | self.assertEqual(delete.mock_calls[-1], call( |
155 | 882c7e33 | Stavros Sachtouris | '/servers%s%s' % (vm_str, cmd_str),
|
156 | 882c7e33 | Stavros Sachtouris | success=success, |
157 | 6a00d7a7 | Stavros Sachtouris | **kwargs)) |
158 | 6a00d7a7 | Stavros Sachtouris | |
159 | 6a00d7a7 | Stavros Sachtouris | @patch('%s.set_header' % rest_pkg) |
160 | 6a00d7a7 | Stavros Sachtouris | @patch('%s.post' % rest_pkg, return_value=FR()) |
161 | 6a00d7a7 | Stavros Sachtouris | def test_servers_post(self, post, SH): |
162 | 6a00d7a7 | Stavros Sachtouris | vm_id = vm_recv['server']['id'] |
163 | 6a00d7a7 | Stavros Sachtouris | for args in product( |
164 | 6a00d7a7 | Stavros Sachtouris | ('', vm_id),
|
165 | 6a00d7a7 | Stavros Sachtouris | ('', 'cmd'), |
166 | 6a00d7a7 | Stavros Sachtouris | (None, [dict(json="data"), dict(data="json")]), |
167 | 6a00d7a7 | Stavros Sachtouris | (202, 204), |
168 | 6a00d7a7 | Stavros Sachtouris | ({}, {'k': 'v'})): |
169 | 6a00d7a7 | Stavros Sachtouris | (server_id, command, json_data, success, kwargs) = args |
170 | 6a00d7a7 | Stavros Sachtouris | |
171 | 6a00d7a7 | Stavros Sachtouris | self.client.servers_post(*args[:4], **kwargs) |
172 | 6a00d7a7 | Stavros Sachtouris | vm_str = '/%s' % server_id if server_id else '' |
173 | 6a00d7a7 | Stavros Sachtouris | cmd_str = '/%s' % command if command else '' |
174 | 6a00d7a7 | Stavros Sachtouris | if json_data:
|
175 | 6a00d7a7 | Stavros Sachtouris | json_data = dumps(json_data) |
176 | 6a00d7a7 | Stavros Sachtouris | self.assertEqual(SH.mock_calls[-2:], [ |
177 | 6a00d7a7 | Stavros Sachtouris | call('Content-Type', 'application/json'), |
178 | 6a00d7a7 | Stavros Sachtouris | call('Content-Length', len(json_data))]) |
179 | 6a00d7a7 | Stavros Sachtouris | self.assertEqual(post.mock_calls[-1], call( |
180 | 6a00d7a7 | Stavros Sachtouris | '/servers%s%s' % (vm_str, cmd_str),
|
181 | 6a00d7a7 | Stavros Sachtouris | data=json_data, success=success, |
182 | 6a00d7a7 | Stavros Sachtouris | **kwargs)) |
183 | 882c7e33 | Stavros Sachtouris | |
184 | 6695edc9 | Stavros Sachtouris | @patch('%s.set_header' % rest_pkg) |
185 | 6695edc9 | Stavros Sachtouris | @patch('%s.put' % rest_pkg, return_value=FR()) |
186 | 6695edc9 | Stavros Sachtouris | def test_servers_put(self, put, SH): |
187 | 6695edc9 | Stavros Sachtouris | vm_id = vm_recv['server']['id'] |
188 | 6695edc9 | Stavros Sachtouris | for args in product( |
189 | 6695edc9 | Stavros Sachtouris | ('', vm_id),
|
190 | 6695edc9 | Stavros Sachtouris | ('', 'cmd'), |
191 | 6695edc9 | Stavros Sachtouris | (None, [dict(json="data"), dict(data="json")]), |
192 | 6695edc9 | Stavros Sachtouris | (204, 504), |
193 | 6695edc9 | Stavros Sachtouris | ({}, {'k': 'v'})): |
194 | 6695edc9 | Stavros Sachtouris | (server_id, command, json_data, success, kwargs) = args |
195 | 6695edc9 | Stavros Sachtouris | |
196 | 6695edc9 | Stavros Sachtouris | self.client.servers_put(*args[:4], **kwargs) |
197 | 6695edc9 | Stavros Sachtouris | vm_str = '/%s' % server_id if server_id else '' |
198 | 6695edc9 | Stavros Sachtouris | cmd_str = '/%s' % command if command else '' |
199 | 6695edc9 | Stavros Sachtouris | if json_data:
|
200 | 6695edc9 | Stavros Sachtouris | json_data = dumps(json_data) |
201 | 6695edc9 | Stavros Sachtouris | self.assertEqual(SH.mock_calls[-2:], [ |
202 | 6695edc9 | Stavros Sachtouris | call('Content-Type', 'application/json'), |
203 | 6695edc9 | Stavros Sachtouris | call('Content-Length', len(json_data))]) |
204 | 6695edc9 | Stavros Sachtouris | self.assertEqual(put.mock_calls[-1], call( |
205 | 6695edc9 | Stavros Sachtouris | '/servers%s%s' % (vm_str, cmd_str),
|
206 | 6695edc9 | Stavros Sachtouris | data=json_data, success=success, |
207 | 6695edc9 | Stavros Sachtouris | **kwargs)) |
208 | 6695edc9 | Stavros Sachtouris | |
209 | 6af47576 | Stavros Sachtouris | @patch('%s.get' % rest_pkg, return_value=FR()) |
210 | 6af47576 | Stavros Sachtouris | def test_flavors_get(self, get): |
211 | 6af47576 | Stavros Sachtouris | vm_id = vm_recv['server']['id'] |
212 | 6af47576 | Stavros Sachtouris | for args in product( |
213 | 6af47576 | Stavros Sachtouris | ('', vm_id),
|
214 | 6af47576 | Stavros Sachtouris | ('', 'cmd'), |
215 | 6af47576 | Stavros Sachtouris | (200, 204), |
216 | 6af47576 | Stavros Sachtouris | ({}, {'k': 'v'})): |
217 | 6af47576 | Stavros Sachtouris | (server_id, command, success, kwargs) = args |
218 | 6af47576 | Stavros Sachtouris | self.client.flavors_get(*args[:3], **kwargs) |
219 | 6af47576 | Stavros Sachtouris | vm_str = '/%s' % server_id if server_id else '' |
220 | 6af47576 | Stavros Sachtouris | cmd_str = '/%s' % command if command else '' |
221 | 6af47576 | Stavros Sachtouris | self.assertEqual(get.mock_calls[-1], call( |
222 | 6af47576 | Stavros Sachtouris | '/flavors%s%s' % (vm_str, cmd_str),
|
223 | 6af47576 | Stavros Sachtouris | success=success, |
224 | 6af47576 | Stavros Sachtouris | **kwargs)) |
225 | 6af47576 | Stavros Sachtouris | |
226 | 630dea9b | Stavros Sachtouris | |
227 | 630dea9b | Stavros Sachtouris | class Compute(TestCase): |
228 | 304a92dc | Stavros Sachtouris | |
229 | 304a92dc | Stavros Sachtouris | def assert_dicts_are_equal(self, d1, d2): |
230 | 304a92dc | Stavros Sachtouris | for k, v in d1.items(): |
231 | 304a92dc | Stavros Sachtouris | self.assertTrue(k in d2) |
232 | 304a92dc | Stavros Sachtouris | if isinstance(v, dict): |
233 | 304a92dc | Stavros Sachtouris | self.assert_dicts_are_equal(v, d2[k])
|
234 | 304a92dc | Stavros Sachtouris | else:
|
235 | 304a92dc | Stavros Sachtouris | self.assertEqual(unicode(v), unicode(d2[k])) |
236 | 304a92dc | Stavros Sachtouris | |
237 | 304a92dc | Stavros Sachtouris | """Set up a Cyclades thorough test"""
|
238 | 304a92dc | Stavros Sachtouris | def setUp(self): |
239 | 304a92dc | Stavros Sachtouris | self.url = 'http://cyclades.example.com' |
240 | 304a92dc | Stavros Sachtouris | self.token = 'cyc14d3s70k3n' |
241 | 630dea9b | Stavros Sachtouris | self.client = ComputeClient(self.url, self.token) |
242 | 304a92dc | Stavros Sachtouris | |
243 | 304a92dc | Stavros Sachtouris | def tearDown(self): |
244 | 304a92dc | Stavros Sachtouris | FR.status_code = 200
|
245 | 304a92dc | Stavros Sachtouris | FR.json = vm_recv |
246 | 304a92dc | Stavros Sachtouris | |
247 | edf8ad52 | Stavros Sachtouris | @patch(
|
248 | edf8ad52 | Stavros Sachtouris | '%s.get_image_details' % compute_pkg,
|
249 | edf8ad52 | Stavros Sachtouris | return_value=img_recv['image'])
|
250 | edf8ad52 | Stavros Sachtouris | def test_create_server(self, GID): |
251 | edf8ad52 | Stavros Sachtouris | with patch.object(
|
252 | 630dea9b | Stavros Sachtouris | ComputeClient, 'servers_post',
|
253 | edf8ad52 | Stavros Sachtouris | side_effect=ClientError( |
254 | edf8ad52 | Stavros Sachtouris | 'REQUEST ENTITY TOO LARGE',
|
255 | edf8ad52 | Stavros Sachtouris | status=403)):
|
256 | 304a92dc | Stavros Sachtouris | self.assertRaises(
|
257 | 304a92dc | Stavros Sachtouris | ClientError, |
258 | 304a92dc | Stavros Sachtouris | self.client.create_server,
|
259 | 304a92dc | Stavros Sachtouris | vm_name, fid, img_ref) |
260 | 304a92dc | Stavros Sachtouris | |
261 | 304a92dc | Stavros Sachtouris | with patch.object(
|
262 | 630dea9b | Stavros Sachtouris | ComputeClient, 'servers_post',
|
263 | edf8ad52 | Stavros Sachtouris | return_value=FR()) as post:
|
264 | 304a92dc | Stavros Sachtouris | r = self.client.create_server(vm_name, fid, img_ref)
|
265 | edf8ad52 | Stavros Sachtouris | self.assertEqual(r, FR.json['server']) |
266 | edf8ad52 | Stavros Sachtouris | self.assertEqual(GID.mock_calls[-1], call(img_ref)) |
267 | edf8ad52 | Stavros Sachtouris | self.assertEqual(post.mock_calls[-1], call(json_data=vm_send)) |
268 | 304a92dc | Stavros Sachtouris | prsn = 'Personality string (does not work with real servers)'
|
269 | 304a92dc | Stavros Sachtouris | self.client.create_server(vm_name, fid, img_ref, prsn)
|
270 | edf8ad52 | Stavros Sachtouris | expected = dict(server=dict(vm_send['server'])) |
271 | edf8ad52 | Stavros Sachtouris | expected['server']['personality'] = prsn |
272 | edf8ad52 | Stavros Sachtouris | self.assertEqual(post.mock_calls[-1], call(json_data=expected)) |
273 | 304a92dc | Stavros Sachtouris | |
274 | 0067c031 | Stavros Sachtouris | @patch('%s.servers_get' % compute_pkg, return_value=FR()) |
275 | 0067c031 | Stavros Sachtouris | def test_list_servers(self, SG): |
276 | 304a92dc | Stavros Sachtouris | FR.json = vm_list |
277 | 0067c031 | Stavros Sachtouris | for detail in (False, True): |
278 | 0067c031 | Stavros Sachtouris | r = self.client.list_servers(detail)
|
279 | 0067c031 | Stavros Sachtouris | self.assertEqual(SG.mock_calls[-1], call( |
280 | 0067c031 | Stavros Sachtouris | command='detail' if detail else '')) |
281 | b6403d2d | Stavros Sachtouris | for i, vm in enumerate(vm_list['servers']['values']): |
282 | b6403d2d | Stavros Sachtouris | self.assert_dicts_are_equal(r[i], vm)
|
283 | b6403d2d | Stavros Sachtouris | self.assertEqual(i + 1, len(r)) |
284 | 304a92dc | Stavros Sachtouris | |
285 | 26ccd6fb | Stavros Sachtouris | @patch('%s.servers_get' % compute_pkg, return_value=FR()) |
286 | 26ccd6fb | Stavros Sachtouris | def test_get_server_details(self, SG): |
287 | 304a92dc | Stavros Sachtouris | vm_id = vm_recv['server']['id'] |
288 | 304a92dc | Stavros Sachtouris | r = self.client.get_server_details(vm_id)
|
289 | b6403d2d | Stavros Sachtouris | SG.assert_called_once_with(vm_id) |
290 | 304a92dc | Stavros Sachtouris | self.assert_dicts_are_equal(r, vm_recv['server']) |
291 | 304a92dc | Stavros Sachtouris | |
292 | 2ace03e5 | Stavros Sachtouris | @patch('%s.servers_put' % compute_pkg, return_value=FR()) |
293 | 2ace03e5 | Stavros Sachtouris | def test_update_server_name(self, SP): |
294 | 304a92dc | Stavros Sachtouris | vm_id = vm_recv['server']['id'] |
295 | 304a92dc | Stavros Sachtouris | new_name = vm_name + '_new'
|
296 | 304a92dc | Stavros Sachtouris | self.client.update_server_name(vm_id, new_name)
|
297 | b6403d2d | Stavros Sachtouris | SP.assert_called_once_with(vm_id, json_data=dict(
|
298 | b6403d2d | Stavros Sachtouris | server=dict(name=new_name)))
|
299 | 304a92dc | Stavros Sachtouris | |
300 | 876aae74 | Stavros Sachtouris | @patch('%s.servers_post' % compute_pkg, return_value=FR()) |
301 | 876aae74 | Stavros Sachtouris | def test_reboot_server(self, SP): |
302 | 304a92dc | Stavros Sachtouris | vm_id = vm_recv['server']['id'] |
303 | 876aae74 | Stavros Sachtouris | for hard in (None, True): |
304 | 876aae74 | Stavros Sachtouris | self.client.reboot_server(vm_id, hard=hard)
|
305 | 876aae74 | Stavros Sachtouris | self.assertEqual(SP.mock_calls[-1], call( |
306 | 876aae74 | Stavros Sachtouris | vm_id, 'action',
|
307 | 876aae74 | Stavros Sachtouris | json_data=dict(reboot=dict(type='HARD' if hard else 'SOFT')))) |
308 | 304a92dc | Stavros Sachtouris | |
309 | d560c67b | Stavros Sachtouris | @patch('%s.servers_put' % compute_pkg, return_value=FR()) |
310 | d560c67b | Stavros Sachtouris | def test_create_server_metadata(self, SP): |
311 | 304a92dc | Stavros Sachtouris | vm_id = vm_recv['server']['id'] |
312 | 304a92dc | Stavros Sachtouris | metadata = dict(m1='v1', m2='v2', m3='v3') |
313 | 304a92dc | Stavros Sachtouris | FR.json = dict(meta=vm_recv['server']) |
314 | 304a92dc | Stavros Sachtouris | for k, v in metadata.items(): |
315 | 304a92dc | Stavros Sachtouris | r = self.client.create_server_metadata(vm_id, k, v)
|
316 | 304a92dc | Stavros Sachtouris | self.assert_dicts_are_equal(r, vm_recv['server']) |
317 | d560c67b | Stavros Sachtouris | self.assertEqual(SP.mock_calls[-1], call( |
318 | d560c67b | Stavros Sachtouris | vm_id, 'meta/%s' % k,
|
319 | d560c67b | Stavros Sachtouris | json_data=dict(meta={k: v}), success=201)) |
320 | 304a92dc | Stavros Sachtouris | |
321 | d224bb37 | Stavros Sachtouris | @patch('%s.servers_get' % compute_pkg, return_value=FR()) |
322 | d224bb37 | Stavros Sachtouris | def test_get_server_metadata(self, SG): |
323 | 304a92dc | Stavros Sachtouris | vm_id = vm_recv['server']['id'] |
324 | 304a92dc | Stavros Sachtouris | metadata = dict(m1='v1', m2='v2', m3='v3') |
325 | 304a92dc | Stavros Sachtouris | FR.json = dict(metadata=dict(values=metadata)) |
326 | 304a92dc | Stavros Sachtouris | r = self.client.get_server_metadata(vm_id)
|
327 | b6403d2d | Stavros Sachtouris | SG.assert_called_once_with(vm_id, '/meta')
|
328 | 304a92dc | Stavros Sachtouris | self.assert_dicts_are_equal(r, metadata)
|
329 | 304a92dc | Stavros Sachtouris | |
330 | 304a92dc | Stavros Sachtouris | for k, v in metadata.items(): |
331 | 304a92dc | Stavros Sachtouris | FR.json = dict(meta={k: v})
|
332 | 304a92dc | Stavros Sachtouris | r = self.client.get_server_metadata(vm_id, k)
|
333 | 304a92dc | Stavros Sachtouris | self.assert_dicts_are_equal(r, {k: v})
|
334 | d224bb37 | Stavros Sachtouris | self.assertEqual(SG.mock_calls[-1], call(vm_id, '/meta/%s' % k)) |
335 | 304a92dc | Stavros Sachtouris | |
336 | d224bb37 | Stavros Sachtouris | @patch('%s.servers_post' % compute_pkg, return_value=FR()) |
337 | e750a969 | Stavros Sachtouris | def test_update_server_metadata(self, SP): |
338 | 304a92dc | Stavros Sachtouris | vm_id = vm_recv['server']['id'] |
339 | 304a92dc | Stavros Sachtouris | metadata = dict(m1='v1', m2='v2', m3='v3') |
340 | 304a92dc | Stavros Sachtouris | FR.json = dict(metadata=metadata)
|
341 | 304a92dc | Stavros Sachtouris | r = self.client.update_server_metadata(vm_id, **metadata)
|
342 | 304a92dc | Stavros Sachtouris | self.assert_dicts_are_equal(r, metadata)
|
343 | b6403d2d | Stavros Sachtouris | SP.assert_called_once_with( |
344 | e750a969 | Stavros Sachtouris | vm_id, 'meta',
|
345 | b6403d2d | Stavros Sachtouris | json_data=dict(metadata=metadata), success=201) |
346 | 304a92dc | Stavros Sachtouris | |
347 | d224bb37 | Stavros Sachtouris | @patch('%s.servers_delete' % compute_pkg, return_value=FR()) |
348 | dbd50059 | Stavros Sachtouris | def test_delete_server_metadata(self, SD): |
349 | 304a92dc | Stavros Sachtouris | vm_id = vm_recv['server']['id'] |
350 | 304a92dc | Stavros Sachtouris | key = 'metakey'
|
351 | 304a92dc | Stavros Sachtouris | self.client.delete_server_metadata(vm_id, key)
|
352 | b6403d2d | Stavros Sachtouris | SD.assert_called_once_with(vm_id, 'meta/' + key)
|
353 | 304a92dc | Stavros Sachtouris | |
354 | 8c40c4a6 | Stavros Sachtouris | @patch('%s.flavors_get' % compute_pkg, return_value=FR()) |
355 | 8c40c4a6 | Stavros Sachtouris | def test_list_flavors(self, FG): |
356 | 304a92dc | Stavros Sachtouris | FR.json = flavor_list |
357 | 8c40c4a6 | Stavros Sachtouris | for cmd in ('', 'detail'): |
358 | 8c40c4a6 | Stavros Sachtouris | r = self.client.list_flavors(detail=(cmd == 'detail')) |
359 | 8c40c4a6 | Stavros Sachtouris | self.assertEqual(FG.mock_calls[-1], call(command=cmd)) |
360 | 8c40c4a6 | Stavros Sachtouris | self.assert_dicts_are_equal(dict(values=r), flavor_list['flavors']) |
361 | 304a92dc | Stavros Sachtouris | |
362 | ae9c3b5f | Stavros Sachtouris | @patch('%s.flavors_get' % compute_pkg, return_value=FR()) |
363 | ae9c3b5f | Stavros Sachtouris | def test_get_flavor_details(self, FG): |
364 | 304a92dc | Stavros Sachtouris | FR.json = dict(flavor=flavor_list['flavors']) |
365 | 304a92dc | Stavros Sachtouris | r = self.client.get_flavor_details(fid)
|
366 | b6403d2d | Stavros Sachtouris | FG.assert_called_once_with(fid) |
367 | 304a92dc | Stavros Sachtouris | self.assert_dicts_are_equal(r, flavor_list['flavors']) |
368 | 304a92dc | Stavros Sachtouris | |
369 | b2347a17 | Stavros Sachtouris | @patch('%s.images_get' % compute_pkg, return_value=FR()) |
370 | b2347a17 | Stavros Sachtouris | def test_list_images(self, IG): |
371 | 304a92dc | Stavros Sachtouris | FR.json = img_list |
372 | b2347a17 | Stavros Sachtouris | for cmd in ('', 'detail'): |
373 | b2347a17 | Stavros Sachtouris | r = self.client.list_images(detail=(cmd == 'detail')) |
374 | b2347a17 | Stavros Sachtouris | self.assertEqual(IG.mock_calls[-1], call(command=cmd)) |
375 | b2347a17 | Stavros Sachtouris | expected = img_list['images']['values'] |
376 | b2347a17 | Stavros Sachtouris | for i in range(len(r)): |
377 | b2347a17 | Stavros Sachtouris | self.assert_dicts_are_equal(expected[i], r[i])
|
378 | 304a92dc | Stavros Sachtouris | |
379 | 937ef4dd | Stavros Sachtouris | @patch('%s.images_get' % compute_pkg, return_value=FR()) |
380 | 937ef4dd | Stavros Sachtouris | def test_get_image_details(self, IG): |
381 | 304a92dc | Stavros Sachtouris | FR.json = img_recv |
382 | 304a92dc | Stavros Sachtouris | r = self.client.get_image_details(img_ref)
|
383 | b6403d2d | Stavros Sachtouris | IG.assert_called_once_with(img_ref) |
384 | 304a92dc | Stavros Sachtouris | self.assert_dicts_are_equal(r, img_recv['image']) |
385 | 304a92dc | Stavros Sachtouris | |
386 | d224bb37 | Stavros Sachtouris | @patch('%s.images_get' % compute_pkg, return_value=FR()) |
387 | 304a92dc | Stavros Sachtouris | def test_get_image_metadata(self, IG): |
388 | b6403d2d | Stavros Sachtouris | for key in ('', '50m3k3y'): |
389 | b6403d2d | Stavros Sachtouris | FR.json = dict(meta=img_recv['image']) if ( |
390 | b6403d2d | Stavros Sachtouris | key) else dict(metadata=dict(values=img_recv['image'])) |
391 | b6403d2d | Stavros Sachtouris | r = self.client.get_image_metadata(img_ref, key)
|
392 | b6403d2d | Stavros Sachtouris | self.assertEqual(IG.mock_calls[-1], call( |
393 | b6403d2d | Stavros Sachtouris | '%s' % img_ref,
|
394 | b6403d2d | Stavros Sachtouris | '/meta%s' % (('/%s' % key) if key else ''))) |
395 | b6403d2d | Stavros Sachtouris | self.assert_dicts_are_equal(img_recv['image'], r) |
396 | 304a92dc | Stavros Sachtouris | |
397 | 0651cda3 | Stavros Sachtouris | @patch('%s.servers_delete' % compute_pkg, return_value=FR()) |
398 | 0651cda3 | Stavros Sachtouris | def test_delete_server(self, SD): |
399 | 304a92dc | Stavros Sachtouris | vm_id = vm_recv['server']['id'] |
400 | 304a92dc | Stavros Sachtouris | self.client.delete_server(vm_id)
|
401 | 1df5305d | Stavros Sachtouris | SD.assert_called_once_with(vm_id) |
402 | 304a92dc | Stavros Sachtouris | |
403 | f711008c | Stavros Sachtouris | @patch('%s.images_delete' % compute_pkg, return_value=FR()) |
404 | f711008c | Stavros Sachtouris | def test_delete_image(self, ID): |
405 | 304a92dc | Stavros Sachtouris | self.client.delete_image(img_ref)
|
406 | 1df5305d | Stavros Sachtouris | ID.assert_called_once_with(img_ref) |
407 | 304a92dc | Stavros Sachtouris | |
408 | 71017d87 | Stavros Sachtouris | @patch('%s.images_put' % compute_pkg, return_value=FR()) |
409 | 71017d87 | Stavros Sachtouris | def test_create_image_metadata(self, IP): |
410 | 71017d87 | Stavros Sachtouris | (key, val) = ('k1', 'v1') |
411 | 304a92dc | Stavros Sachtouris | FR.json = dict(meta=img_recv['image']) |
412 | 71017d87 | Stavros Sachtouris | r = self.client.create_image_metadata(img_ref, key, val)
|
413 | 1df5305d | Stavros Sachtouris | IP.assert_called_once_with( |
414 | 71017d87 | Stavros Sachtouris | img_ref, 'meta/%s' % key,
|
415 | 1df5305d | Stavros Sachtouris | json_data=dict(meta={key: val}))
|
416 | 71017d87 | Stavros Sachtouris | self.assert_dicts_are_equal(r, img_recv['image']) |
417 | 304a92dc | Stavros Sachtouris | |
418 | d224bb37 | Stavros Sachtouris | @patch('%s.images_post' % compute_pkg, return_value=FR()) |
419 | 428aa852 | Stavros Sachtouris | def test_update_image_metadata(self, IP): |
420 | 304a92dc | Stavros Sachtouris | metadata = dict(m1='v1', m2='v2', m3='v3') |
421 | 304a92dc | Stavros Sachtouris | FR.json = dict(metadata=metadata)
|
422 | 304a92dc | Stavros Sachtouris | r = self.client.update_image_metadata(img_ref, **metadata)
|
423 | 1df5305d | Stavros Sachtouris | IP.assert_called_once_with( |
424 | 1df5305d | Stavros Sachtouris | img_ref, 'meta',
|
425 | 1df5305d | Stavros Sachtouris | json_data=dict(metadata=metadata))
|
426 | 304a92dc | Stavros Sachtouris | self.assert_dicts_are_equal(r, metadata)
|
427 | 304a92dc | Stavros Sachtouris | |
428 | d224bb37 | Stavros Sachtouris | @patch('%s.images_delete' % compute_pkg, return_value=FR()) |
429 | 0482817c | Stavros Sachtouris | def test_delete_image_metadata(self, ID): |
430 | 304a92dc | Stavros Sachtouris | key = 'metakey'
|
431 | 304a92dc | Stavros Sachtouris | self.client.delete_image_metadata(img_ref, key)
|
432 | 1df5305d | Stavros Sachtouris | ID.assert_called_once_with(img_ref, '/meta/%s' % key)
|
433 | 304a92dc | Stavros Sachtouris | |
434 | 630dea9b | Stavros Sachtouris | |
435 | 304a92dc | Stavros Sachtouris | if __name__ == '__main__': |
436 | 304a92dc | Stavros Sachtouris | from sys import argv |
437 | 304a92dc | Stavros Sachtouris | from kamaki.clients.test import runTestCase |
438 | 630dea9b | Stavros Sachtouris | not_found = True
|
439 | 630dea9b | Stavros Sachtouris | if not argv[1:] or argv[1] == 'Compute': |
440 | 630dea9b | Stavros Sachtouris | not_found = False
|
441 | 630dea9b | Stavros Sachtouris | runTestCase(Compute, 'Compute Client', argv[2:]) |
442 | 630dea9b | Stavros Sachtouris | if not argv[1:] or argv[1] == 'ComputeRestApi': |
443 | 630dea9b | Stavros Sachtouris | not_found = False
|
444 | 630dea9b | Stavros Sachtouris | runTestCase(ComputeRestApi, 'ComputeRestApi Client', argv[2:]) |
445 | 630dea9b | Stavros Sachtouris | if not_found:
|
446 | 630dea9b | Stavros Sachtouris | print('TestCase %s not found' % argv[1]) |