root / kamaki / clients / compute / test.py @ 882c7e33
History | View | Annotate | Download (14.5 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 | 304a92dc | Stavros Sachtouris | |
38 | 630dea9b | Stavros Sachtouris | from kamaki.clients.compute import ComputeClient, ComputeClientApi |
39 | 0482817c | Stavros Sachtouris | from kamaki.clients import ClientError |
40 | 304a92dc | Stavros Sachtouris | |
41 | edf8ad52 | Stavros Sachtouris | |
42 | 630dea9b | Stavros Sachtouris | rest_pkg = 'kamaki.clients.compute.rest_api.ComputeClientApi'
|
43 | 630dea9b | Stavros Sachtouris | compute_pkg = 'kamaki.clients.compute.ComputeClient'
|
44 | edf8ad52 | Stavros Sachtouris | |
45 | 304a92dc | Stavros Sachtouris | img_ref = "1m4g3-r3f3r3nc3"
|
46 | 304a92dc | Stavros Sachtouris | vm_name = "my new VM"
|
47 | 304a92dc | Stavros Sachtouris | fid = 42
|
48 | 304a92dc | Stavros Sachtouris | vm_send = dict(server=dict( |
49 | 304a92dc | Stavros Sachtouris | flavorRef=fid, |
50 | 304a92dc | Stavros Sachtouris | name=vm_name, |
51 | 304a92dc | Stavros Sachtouris | imageRef=img_ref, |
52 | 304a92dc | Stavros Sachtouris | metadata=dict(os="debian", users="root"))) |
53 | 304a92dc | Stavros Sachtouris | vm_recv = dict(server=dict( |
54 | 304a92dc | Stavros Sachtouris | status="BUILD",
|
55 | 304a92dc | Stavros Sachtouris | updated="2013-03-01T10:04:00.637152+00:00",
|
56 | 304a92dc | Stavros Sachtouris | hostId="",
|
57 | 304a92dc | Stavros Sachtouris | name=vm_name, |
58 | 304a92dc | Stavros Sachtouris | imageRef=img_ref, |
59 | 304a92dc | Stavros Sachtouris | created="2013-03-01T10:04:00.087324+00:00",
|
60 | 304a92dc | Stavros Sachtouris | flavorRef=fid, |
61 | 304a92dc | Stavros Sachtouris | adminPass="n0n3sh@11p@55",
|
62 | 304a92dc | Stavros Sachtouris | suspended=False,
|
63 | 304a92dc | Stavros Sachtouris | progress=0,
|
64 | 304a92dc | Stavros Sachtouris | id=31173,
|
65 | 304a92dc | Stavros Sachtouris | metadata=dict(values=dict(os="debian", users="root")))) |
66 | 304a92dc | Stavros Sachtouris | img_recv = dict(image=dict( |
67 | 304a92dc | Stavros Sachtouris | status="ACTIVE",
|
68 | 304a92dc | Stavros Sachtouris | updated="2013-02-26T11:10:14+00:00",
|
69 | 304a92dc | Stavros Sachtouris | name="Debian Base",
|
70 | 304a92dc | Stavros Sachtouris | created="2013-02-26T11:03:29+00:00",
|
71 | 304a92dc | Stavros Sachtouris | progress=100,
|
72 | 304a92dc | Stavros Sachtouris | id=img_ref, |
73 | 304a92dc | Stavros Sachtouris | metadata=dict(values=dict( |
74 | 304a92dc | Stavros Sachtouris | partition_table="msdos",
|
75 | 304a92dc | Stavros Sachtouris | kernel="2.6.32",
|
76 | 304a92dc | Stavros Sachtouris | osfamily="linux",
|
77 | 304a92dc | Stavros Sachtouris | users="root",
|
78 | 304a92dc | Stavros Sachtouris | gui="No GUI",
|
79 | 304a92dc | Stavros Sachtouris | sortorder="1",
|
80 | 304a92dc | Stavros Sachtouris | os="debian",
|
81 | 304a92dc | Stavros Sachtouris | root_partition="1",
|
82 | 304a92dc | Stavros Sachtouris | description="Debian 6.0.7 (Squeeze) Base System"))))
|
83 | 304a92dc | Stavros Sachtouris | vm_list = dict(servers=dict(values=[ |
84 | 304a92dc | Stavros Sachtouris | dict(name='n1', id=1), |
85 | 304a92dc | Stavros Sachtouris | dict(name='n2', id=2)])) |
86 | 304a92dc | Stavros Sachtouris | flavor_list = dict(flavors=dict(values=[ |
87 | 0482817c | Stavros Sachtouris | dict(id=41, name="C1R1024D20"), |
88 | 0482817c | Stavros Sachtouris | dict(id=42, name="C1R1024D40"), |
89 | 0482817c | Stavros Sachtouris | dict(id=43, name="C1R1028D20")])) |
90 | 304a92dc | Stavros Sachtouris | img_list = dict(images=dict(values=[ |
91 | 304a92dc | Stavros Sachtouris | dict(name="maelstrom", id="0fb03e45-7d5a-4515-bd4e-e6bbf6457f06"), |
92 | 304a92dc | Stavros Sachtouris | dict(name="edx_saas", id="1357163d-5fd8-488e-a117-48734c526206"), |
93 | 304a92dc | Stavros Sachtouris | dict(name="Debian_Wheezy_Base", id="1f8454f0-8e3e-4b6c-ab8e-5236b728dffe"), |
94 | 304a92dc | Stavros Sachtouris | dict(name="CentOS", id="21894b48-c805-4568-ac8b-7d4bb8eb533d"), |
95 | 304a92dc | Stavros Sachtouris | dict(name="Ubuntu Desktop", id="37bc522c-c479-4085-bfb9-464f9b9e2e31"), |
96 | 304a92dc | Stavros Sachtouris | dict(name="Ubuntu 12.10", id="3a24fef9-1a8c-47d1-8f11-e07bd5e544fd"), |
97 | 304a92dc | Stavros Sachtouris | dict(name="Debian Base", id="40ace203-6254-4e17-a5cb-518d55418a7d"), |
98 | 304a92dc | Stavros Sachtouris | dict(name="ubuntu_bundled", id="5336e265-5c7c-4127-95cb-2bf832a79903")])) |
99 | 304a92dc | Stavros Sachtouris | |
100 | 304a92dc | Stavros Sachtouris | |
101 | 304a92dc | Stavros Sachtouris | class FR(object): |
102 | 304a92dc | Stavros Sachtouris | """FR stands for Fake Response"""
|
103 | 304a92dc | Stavros Sachtouris | json = vm_recv |
104 | 304a92dc | Stavros Sachtouris | headers = {} |
105 | 304a92dc | Stavros Sachtouris | content = json |
106 | 304a92dc | Stavros Sachtouris | status = None
|
107 | 304a92dc | Stavros Sachtouris | status_code = 200
|
108 | 304a92dc | Stavros Sachtouris | |
109 | 304a92dc | Stavros Sachtouris | def release(self): |
110 | 304a92dc | Stavros Sachtouris | pass
|
111 | 304a92dc | Stavros Sachtouris | |
112 | 304a92dc | Stavros Sachtouris | |
113 | 630dea9b | Stavros Sachtouris | class ComputeRestApi(TestCase): |
114 | 630dea9b | Stavros Sachtouris | |
115 | 630dea9b | Stavros Sachtouris | """Set up a ComputesRestApi thorough test"""
|
116 | 630dea9b | Stavros Sachtouris | def setUp(self): |
117 | 630dea9b | Stavros Sachtouris | self.url = 'http://cyclades.example.com' |
118 | 630dea9b | Stavros Sachtouris | self.token = 'cyc14d3s70k3n' |
119 | 630dea9b | Stavros Sachtouris | self.client = ComputeClientApi(self.url, self.token) |
120 | 630dea9b | Stavros Sachtouris | |
121 | 630dea9b | Stavros Sachtouris | def tearDown(self): |
122 | 630dea9b | Stavros Sachtouris | FR.json = vm_recv |
123 | 630dea9b | Stavros Sachtouris | |
124 | 630dea9b | Stavros Sachtouris | @patch('%s.get' % rest_pkg, return_value=FR()) |
125 | 630dea9b | Stavros Sachtouris | def test_servers_get(self, get): |
126 | 630dea9b | Stavros Sachtouris | vm_id = vm_recv['server']['id'] |
127 | 630dea9b | Stavros Sachtouris | for args in product( |
128 | 630dea9b | Stavros Sachtouris | ('', vm_id),
|
129 | 630dea9b | Stavros Sachtouris | ('', 'cmd'), |
130 | 630dea9b | Stavros Sachtouris | (200, 204), |
131 | 630dea9b | Stavros Sachtouris | ({}, {'k': 'v'})): |
132 | 630dea9b | Stavros Sachtouris | (server_id, command, success, kwargs) = args |
133 | 630dea9b | Stavros Sachtouris | self.client.servers_get(*args[:3], **args[3]) |
134 | 630dea9b | Stavros Sachtouris | vm_str = '/%s' % server_id if server_id else '' |
135 | 630dea9b | Stavros Sachtouris | cmd_str = '/%s' % command if command else '' |
136 | 630dea9b | Stavros Sachtouris | self.assertEqual(get.mock_calls[-1], call( |
137 | 630dea9b | Stavros Sachtouris | '/servers%s%s' % (vm_str, cmd_str),
|
138 | 630dea9b | Stavros Sachtouris | success=success, |
139 | 630dea9b | Stavros Sachtouris | **args[3]))
|
140 | 630dea9b | Stavros Sachtouris | |
141 | 882c7e33 | Stavros Sachtouris | @patch('%s.delete' % rest_pkg, return_value=FR()) |
142 | 882c7e33 | Stavros Sachtouris | def test_servers_delete(self, delete): |
143 | 882c7e33 | Stavros Sachtouris | vm_id = vm_recv['server']['id'] |
144 | 882c7e33 | Stavros Sachtouris | for args in product( |
145 | 882c7e33 | Stavros Sachtouris | ('', vm_id),
|
146 | 882c7e33 | Stavros Sachtouris | ('', 'cmd'), |
147 | 882c7e33 | Stavros Sachtouris | (204, 208), |
148 | 882c7e33 | Stavros Sachtouris | ({}, {'k': 'v'})): |
149 | 882c7e33 | Stavros Sachtouris | (server_id, command, success, kwargs) = args |
150 | 882c7e33 | Stavros Sachtouris | self.client.servers_delete(*args[:3], **args[3]) |
151 | 882c7e33 | Stavros Sachtouris | vm_str = '/%s' % server_id if server_id else '' |
152 | 882c7e33 | Stavros Sachtouris | cmd_str = '/%s' % command if command else '' |
153 | 882c7e33 | Stavros Sachtouris | self.assertEqual(delete.mock_calls[-1], call( |
154 | 882c7e33 | Stavros Sachtouris | '/servers%s%s' % (vm_str, cmd_str),
|
155 | 882c7e33 | Stavros Sachtouris | success=success, |
156 | 882c7e33 | Stavros Sachtouris | **args[3]))
|
157 | 882c7e33 | Stavros Sachtouris | |
158 | 630dea9b | Stavros Sachtouris | |
159 | 630dea9b | Stavros Sachtouris | class Compute(TestCase): |
160 | 304a92dc | Stavros Sachtouris | |
161 | 304a92dc | Stavros Sachtouris | def assert_dicts_are_equal(self, d1, d2): |
162 | 304a92dc | Stavros Sachtouris | for k, v in d1.items(): |
163 | 304a92dc | Stavros Sachtouris | self.assertTrue(k in d2) |
164 | 304a92dc | Stavros Sachtouris | if isinstance(v, dict): |
165 | 304a92dc | Stavros Sachtouris | self.assert_dicts_are_equal(v, d2[k])
|
166 | 304a92dc | Stavros Sachtouris | else:
|
167 | 304a92dc | Stavros Sachtouris | self.assertEqual(unicode(v), unicode(d2[k])) |
168 | 304a92dc | Stavros Sachtouris | |
169 | 304a92dc | Stavros Sachtouris | """Set up a Cyclades thorough test"""
|
170 | 304a92dc | Stavros Sachtouris | def setUp(self): |
171 | 304a92dc | Stavros Sachtouris | self.url = 'http://cyclades.example.com' |
172 | 304a92dc | Stavros Sachtouris | self.token = 'cyc14d3s70k3n' |
173 | 630dea9b | Stavros Sachtouris | self.client = ComputeClient(self.url, self.token) |
174 | 304a92dc | Stavros Sachtouris | |
175 | 304a92dc | Stavros Sachtouris | def tearDown(self): |
176 | 304a92dc | Stavros Sachtouris | FR.status_code = 200
|
177 | 304a92dc | Stavros Sachtouris | FR.json = vm_recv |
178 | 304a92dc | Stavros Sachtouris | |
179 | edf8ad52 | Stavros Sachtouris | @patch(
|
180 | edf8ad52 | Stavros Sachtouris | '%s.get_image_details' % compute_pkg,
|
181 | edf8ad52 | Stavros Sachtouris | return_value=img_recv['image'])
|
182 | edf8ad52 | Stavros Sachtouris | def test_create_server(self, GID): |
183 | edf8ad52 | Stavros Sachtouris | with patch.object(
|
184 | 630dea9b | Stavros Sachtouris | ComputeClient, 'servers_post',
|
185 | edf8ad52 | Stavros Sachtouris | side_effect=ClientError( |
186 | edf8ad52 | Stavros Sachtouris | 'REQUEST ENTITY TOO LARGE',
|
187 | edf8ad52 | Stavros Sachtouris | status=403)):
|
188 | 304a92dc | Stavros Sachtouris | self.assertRaises(
|
189 | 304a92dc | Stavros Sachtouris | ClientError, |
190 | 304a92dc | Stavros Sachtouris | self.client.create_server,
|
191 | 304a92dc | Stavros Sachtouris | vm_name, fid, img_ref) |
192 | 304a92dc | Stavros Sachtouris | |
193 | 304a92dc | Stavros Sachtouris | with patch.object(
|
194 | 630dea9b | Stavros Sachtouris | ComputeClient, 'servers_post',
|
195 | edf8ad52 | Stavros Sachtouris | return_value=FR()) as post:
|
196 | 304a92dc | Stavros Sachtouris | r = self.client.create_server(vm_name, fid, img_ref)
|
197 | edf8ad52 | Stavros Sachtouris | self.assertEqual(r, FR.json['server']) |
198 | edf8ad52 | Stavros Sachtouris | self.assertEqual(GID.mock_calls[-1], call(img_ref)) |
199 | edf8ad52 | Stavros Sachtouris | self.assertEqual(post.mock_calls[-1], call(json_data=vm_send)) |
200 | 304a92dc | Stavros Sachtouris | prsn = 'Personality string (does not work with real servers)'
|
201 | 304a92dc | Stavros Sachtouris | self.client.create_server(vm_name, fid, img_ref, prsn)
|
202 | edf8ad52 | Stavros Sachtouris | expected = dict(server=dict(vm_send['server'])) |
203 | edf8ad52 | Stavros Sachtouris | expected['server']['personality'] = prsn |
204 | edf8ad52 | Stavros Sachtouris | self.assertEqual(post.mock_calls[-1], call(json_data=expected)) |
205 | 304a92dc | Stavros Sachtouris | |
206 | 0067c031 | Stavros Sachtouris | @patch('%s.servers_get' % compute_pkg, return_value=FR()) |
207 | 0067c031 | Stavros Sachtouris | def test_list_servers(self, SG): |
208 | 304a92dc | Stavros Sachtouris | FR.json = vm_list |
209 | 0067c031 | Stavros Sachtouris | for detail in (False, True): |
210 | 0067c031 | Stavros Sachtouris | r = self.client.list_servers(detail)
|
211 | 0067c031 | Stavros Sachtouris | self.assertEqual(SG.mock_calls[-1], call( |
212 | 0067c031 | Stavros Sachtouris | command='detail' if detail else '')) |
213 | b6403d2d | Stavros Sachtouris | for i, vm in enumerate(vm_list['servers']['values']): |
214 | b6403d2d | Stavros Sachtouris | self.assert_dicts_are_equal(r[i], vm)
|
215 | b6403d2d | Stavros Sachtouris | self.assertEqual(i + 1, len(r)) |
216 | 304a92dc | Stavros Sachtouris | |
217 | 26ccd6fb | Stavros Sachtouris | @patch('%s.servers_get' % compute_pkg, return_value=FR()) |
218 | 26ccd6fb | Stavros Sachtouris | def test_get_server_details(self, SG): |
219 | 304a92dc | Stavros Sachtouris | vm_id = vm_recv['server']['id'] |
220 | 304a92dc | Stavros Sachtouris | r = self.client.get_server_details(vm_id)
|
221 | b6403d2d | Stavros Sachtouris | SG.assert_called_once_with(vm_id) |
222 | 304a92dc | Stavros Sachtouris | self.assert_dicts_are_equal(r, vm_recv['server']) |
223 | 304a92dc | Stavros Sachtouris | |
224 | 2ace03e5 | Stavros Sachtouris | @patch('%s.servers_put' % compute_pkg, return_value=FR()) |
225 | 2ace03e5 | Stavros Sachtouris | def test_update_server_name(self, SP): |
226 | 304a92dc | Stavros Sachtouris | vm_id = vm_recv['server']['id'] |
227 | 304a92dc | Stavros Sachtouris | new_name = vm_name + '_new'
|
228 | 304a92dc | Stavros Sachtouris | self.client.update_server_name(vm_id, new_name)
|
229 | b6403d2d | Stavros Sachtouris | SP.assert_called_once_with(vm_id, json_data=dict(
|
230 | b6403d2d | Stavros Sachtouris | server=dict(name=new_name)))
|
231 | 304a92dc | Stavros Sachtouris | |
232 | 876aae74 | Stavros Sachtouris | @patch('%s.servers_post' % compute_pkg, return_value=FR()) |
233 | 876aae74 | Stavros Sachtouris | def test_reboot_server(self, SP): |
234 | 304a92dc | Stavros Sachtouris | vm_id = vm_recv['server']['id'] |
235 | 876aae74 | Stavros Sachtouris | for hard in (None, True): |
236 | 876aae74 | Stavros Sachtouris | self.client.reboot_server(vm_id, hard=hard)
|
237 | 876aae74 | Stavros Sachtouris | self.assertEqual(SP.mock_calls[-1], call( |
238 | 876aae74 | Stavros Sachtouris | vm_id, 'action',
|
239 | 876aae74 | Stavros Sachtouris | json_data=dict(reboot=dict(type='HARD' if hard else 'SOFT')))) |
240 | 304a92dc | Stavros Sachtouris | |
241 | d560c67b | Stavros Sachtouris | @patch('%s.servers_put' % compute_pkg, return_value=FR()) |
242 | d560c67b | Stavros Sachtouris | def test_create_server_metadata(self, SP): |
243 | 304a92dc | Stavros Sachtouris | vm_id = vm_recv['server']['id'] |
244 | 304a92dc | Stavros Sachtouris | metadata = dict(m1='v1', m2='v2', m3='v3') |
245 | 304a92dc | Stavros Sachtouris | FR.json = dict(meta=vm_recv['server']) |
246 | 304a92dc | Stavros Sachtouris | for k, v in metadata.items(): |
247 | 304a92dc | Stavros Sachtouris | r = self.client.create_server_metadata(vm_id, k, v)
|
248 | 304a92dc | Stavros Sachtouris | self.assert_dicts_are_equal(r, vm_recv['server']) |
249 | d560c67b | Stavros Sachtouris | self.assertEqual(SP.mock_calls[-1], call( |
250 | d560c67b | Stavros Sachtouris | vm_id, 'meta/%s' % k,
|
251 | d560c67b | Stavros Sachtouris | json_data=dict(meta={k: v}), success=201)) |
252 | 304a92dc | Stavros Sachtouris | |
253 | d224bb37 | Stavros Sachtouris | @patch('%s.servers_get' % compute_pkg, return_value=FR()) |
254 | d224bb37 | Stavros Sachtouris | def test_get_server_metadata(self, SG): |
255 | 304a92dc | Stavros Sachtouris | vm_id = vm_recv['server']['id'] |
256 | 304a92dc | Stavros Sachtouris | metadata = dict(m1='v1', m2='v2', m3='v3') |
257 | 304a92dc | Stavros Sachtouris | FR.json = dict(metadata=dict(values=metadata)) |
258 | 304a92dc | Stavros Sachtouris | r = self.client.get_server_metadata(vm_id)
|
259 | b6403d2d | Stavros Sachtouris | SG.assert_called_once_with(vm_id, '/meta')
|
260 | 304a92dc | Stavros Sachtouris | self.assert_dicts_are_equal(r, metadata)
|
261 | 304a92dc | Stavros Sachtouris | |
262 | 304a92dc | Stavros Sachtouris | for k, v in metadata.items(): |
263 | 304a92dc | Stavros Sachtouris | FR.json = dict(meta={k: v})
|
264 | 304a92dc | Stavros Sachtouris | r = self.client.get_server_metadata(vm_id, k)
|
265 | 304a92dc | Stavros Sachtouris | self.assert_dicts_are_equal(r, {k: v})
|
266 | d224bb37 | Stavros Sachtouris | self.assertEqual(SG.mock_calls[-1], call(vm_id, '/meta/%s' % k)) |
267 | 304a92dc | Stavros Sachtouris | |
268 | d224bb37 | Stavros Sachtouris | @patch('%s.servers_post' % compute_pkg, return_value=FR()) |
269 | e750a969 | Stavros Sachtouris | def test_update_server_metadata(self, SP): |
270 | 304a92dc | Stavros Sachtouris | vm_id = vm_recv['server']['id'] |
271 | 304a92dc | Stavros Sachtouris | metadata = dict(m1='v1', m2='v2', m3='v3') |
272 | 304a92dc | Stavros Sachtouris | FR.json = dict(metadata=metadata)
|
273 | 304a92dc | Stavros Sachtouris | r = self.client.update_server_metadata(vm_id, **metadata)
|
274 | 304a92dc | Stavros Sachtouris | self.assert_dicts_are_equal(r, metadata)
|
275 | b6403d2d | Stavros Sachtouris | SP.assert_called_once_with( |
276 | e750a969 | Stavros Sachtouris | vm_id, 'meta',
|
277 | b6403d2d | Stavros Sachtouris | json_data=dict(metadata=metadata), success=201) |
278 | 304a92dc | Stavros Sachtouris | |
279 | d224bb37 | Stavros Sachtouris | @patch('%s.servers_delete' % compute_pkg, return_value=FR()) |
280 | dbd50059 | Stavros Sachtouris | def test_delete_server_metadata(self, SD): |
281 | 304a92dc | Stavros Sachtouris | vm_id = vm_recv['server']['id'] |
282 | 304a92dc | Stavros Sachtouris | key = 'metakey'
|
283 | 304a92dc | Stavros Sachtouris | self.client.delete_server_metadata(vm_id, key)
|
284 | b6403d2d | Stavros Sachtouris | SD.assert_called_once_with(vm_id, 'meta/' + key)
|
285 | 304a92dc | Stavros Sachtouris | |
286 | 8c40c4a6 | Stavros Sachtouris | @patch('%s.flavors_get' % compute_pkg, return_value=FR()) |
287 | 8c40c4a6 | Stavros Sachtouris | def test_list_flavors(self, FG): |
288 | 304a92dc | Stavros Sachtouris | FR.json = flavor_list |
289 | 8c40c4a6 | Stavros Sachtouris | for cmd in ('', 'detail'): |
290 | 8c40c4a6 | Stavros Sachtouris | r = self.client.list_flavors(detail=(cmd == 'detail')) |
291 | 8c40c4a6 | Stavros Sachtouris | self.assertEqual(FG.mock_calls[-1], call(command=cmd)) |
292 | 8c40c4a6 | Stavros Sachtouris | self.assert_dicts_are_equal(dict(values=r), flavor_list['flavors']) |
293 | 304a92dc | Stavros Sachtouris | |
294 | ae9c3b5f | Stavros Sachtouris | @patch('%s.flavors_get' % compute_pkg, return_value=FR()) |
295 | ae9c3b5f | Stavros Sachtouris | def test_get_flavor_details(self, FG): |
296 | 304a92dc | Stavros Sachtouris | FR.json = dict(flavor=flavor_list['flavors']) |
297 | 304a92dc | Stavros Sachtouris | r = self.client.get_flavor_details(fid)
|
298 | b6403d2d | Stavros Sachtouris | FG.assert_called_once_with(fid) |
299 | 304a92dc | Stavros Sachtouris | self.assert_dicts_are_equal(r, flavor_list['flavors']) |
300 | 304a92dc | Stavros Sachtouris | |
301 | b2347a17 | Stavros Sachtouris | @patch('%s.images_get' % compute_pkg, return_value=FR()) |
302 | b2347a17 | Stavros Sachtouris | def test_list_images(self, IG): |
303 | 304a92dc | Stavros Sachtouris | FR.json = img_list |
304 | b2347a17 | Stavros Sachtouris | for cmd in ('', 'detail'): |
305 | b2347a17 | Stavros Sachtouris | r = self.client.list_images(detail=(cmd == 'detail')) |
306 | b2347a17 | Stavros Sachtouris | self.assertEqual(IG.mock_calls[-1], call(command=cmd)) |
307 | b2347a17 | Stavros Sachtouris | expected = img_list['images']['values'] |
308 | b2347a17 | Stavros Sachtouris | for i in range(len(r)): |
309 | b2347a17 | Stavros Sachtouris | self.assert_dicts_are_equal(expected[i], r[i])
|
310 | 304a92dc | Stavros Sachtouris | |
311 | 937ef4dd | Stavros Sachtouris | @patch('%s.images_get' % compute_pkg, return_value=FR()) |
312 | 937ef4dd | Stavros Sachtouris | def test_get_image_details(self, IG): |
313 | 304a92dc | Stavros Sachtouris | FR.json = img_recv |
314 | 304a92dc | Stavros Sachtouris | r = self.client.get_image_details(img_ref)
|
315 | b6403d2d | Stavros Sachtouris | IG.assert_called_once_with(img_ref) |
316 | 304a92dc | Stavros Sachtouris | self.assert_dicts_are_equal(r, img_recv['image']) |
317 | 304a92dc | Stavros Sachtouris | |
318 | d224bb37 | Stavros Sachtouris | @patch('%s.images_get' % compute_pkg, return_value=FR()) |
319 | 304a92dc | Stavros Sachtouris | def test_get_image_metadata(self, IG): |
320 | b6403d2d | Stavros Sachtouris | for key in ('', '50m3k3y'): |
321 | b6403d2d | Stavros Sachtouris | FR.json = dict(meta=img_recv['image']) if ( |
322 | b6403d2d | Stavros Sachtouris | key) else dict(metadata=dict(values=img_recv['image'])) |
323 | b6403d2d | Stavros Sachtouris | r = self.client.get_image_metadata(img_ref, key)
|
324 | b6403d2d | Stavros Sachtouris | self.assertEqual(IG.mock_calls[-1], call( |
325 | b6403d2d | Stavros Sachtouris | '%s' % img_ref,
|
326 | b6403d2d | Stavros Sachtouris | '/meta%s' % (('/%s' % key) if key else ''))) |
327 | b6403d2d | Stavros Sachtouris | self.assert_dicts_are_equal(img_recv['image'], r) |
328 | 304a92dc | Stavros Sachtouris | |
329 | 0651cda3 | Stavros Sachtouris | @patch('%s.servers_delete' % compute_pkg, return_value=FR()) |
330 | 0651cda3 | Stavros Sachtouris | def test_delete_server(self, SD): |
331 | 304a92dc | Stavros Sachtouris | vm_id = vm_recv['server']['id'] |
332 | 304a92dc | Stavros Sachtouris | self.client.delete_server(vm_id)
|
333 | 1df5305d | Stavros Sachtouris | SD.assert_called_once_with(vm_id) |
334 | 304a92dc | Stavros Sachtouris | |
335 | f711008c | Stavros Sachtouris | @patch('%s.images_delete' % compute_pkg, return_value=FR()) |
336 | f711008c | Stavros Sachtouris | def test_delete_image(self, ID): |
337 | 304a92dc | Stavros Sachtouris | self.client.delete_image(img_ref)
|
338 | 1df5305d | Stavros Sachtouris | ID.assert_called_once_with(img_ref) |
339 | 304a92dc | Stavros Sachtouris | |
340 | 71017d87 | Stavros Sachtouris | @patch('%s.images_put' % compute_pkg, return_value=FR()) |
341 | 71017d87 | Stavros Sachtouris | def test_create_image_metadata(self, IP): |
342 | 71017d87 | Stavros Sachtouris | (key, val) = ('k1', 'v1') |
343 | 304a92dc | Stavros Sachtouris | FR.json = dict(meta=img_recv['image']) |
344 | 71017d87 | Stavros Sachtouris | r = self.client.create_image_metadata(img_ref, key, val)
|
345 | 1df5305d | Stavros Sachtouris | IP.assert_called_once_with( |
346 | 71017d87 | Stavros Sachtouris | img_ref, 'meta/%s' % key,
|
347 | 1df5305d | Stavros Sachtouris | json_data=dict(meta={key: val}))
|
348 | 71017d87 | Stavros Sachtouris | self.assert_dicts_are_equal(r, img_recv['image']) |
349 | 304a92dc | Stavros Sachtouris | |
350 | d224bb37 | Stavros Sachtouris | @patch('%s.images_post' % compute_pkg, return_value=FR()) |
351 | 428aa852 | Stavros Sachtouris | def test_update_image_metadata(self, IP): |
352 | 304a92dc | Stavros Sachtouris | metadata = dict(m1='v1', m2='v2', m3='v3') |
353 | 304a92dc | Stavros Sachtouris | FR.json = dict(metadata=metadata)
|
354 | 304a92dc | Stavros Sachtouris | r = self.client.update_image_metadata(img_ref, **metadata)
|
355 | 1df5305d | Stavros Sachtouris | IP.assert_called_once_with( |
356 | 1df5305d | Stavros Sachtouris | img_ref, 'meta',
|
357 | 1df5305d | Stavros Sachtouris | json_data=dict(metadata=metadata))
|
358 | 304a92dc | Stavros Sachtouris | self.assert_dicts_are_equal(r, metadata)
|
359 | 304a92dc | Stavros Sachtouris | |
360 | d224bb37 | Stavros Sachtouris | @patch('%s.images_delete' % compute_pkg, return_value=FR()) |
361 | 0482817c | Stavros Sachtouris | def test_delete_image_metadata(self, ID): |
362 | 304a92dc | Stavros Sachtouris | key = 'metakey'
|
363 | 304a92dc | Stavros Sachtouris | self.client.delete_image_metadata(img_ref, key)
|
364 | 1df5305d | Stavros Sachtouris | ID.assert_called_once_with(img_ref, '/meta/%s' % key)
|
365 | 304a92dc | Stavros Sachtouris | |
366 | 630dea9b | Stavros Sachtouris | |
367 | 304a92dc | Stavros Sachtouris | if __name__ == '__main__': |
368 | 304a92dc | Stavros Sachtouris | from sys import argv |
369 | 304a92dc | Stavros Sachtouris | from kamaki.clients.test import runTestCase |
370 | 630dea9b | Stavros Sachtouris | not_found = True
|
371 | 630dea9b | Stavros Sachtouris | if not argv[1:] or argv[1] == 'Compute': |
372 | 630dea9b | Stavros Sachtouris | not_found = False
|
373 | 630dea9b | Stavros Sachtouris | runTestCase(Compute, 'Compute Client', argv[2:]) |
374 | 630dea9b | Stavros Sachtouris | if not argv[1:] or argv[1] == 'ComputeRestApi': |
375 | 630dea9b | Stavros Sachtouris | not_found = False
|
376 | 630dea9b | Stavros Sachtouris | runTestCase(ComputeRestApi, 'ComputeRestApi Client', argv[2:]) |
377 | 630dea9b | Stavros Sachtouris | if not_found:
|
378 | 630dea9b | Stavros Sachtouris | print('TestCase %s not found' % argv[1]) |