root / kamaki / clients / compute / test.py @ 428aa852
History | View | Annotate | Download (13.8 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 | 304a92dc | Stavros Sachtouris | from mock import patch, Mock, call |
35 | 304a92dc | Stavros Sachtouris | from unittest import TestCase |
36 | 304a92dc | Stavros Sachtouris | from json import loads |
37 | 304a92dc | Stavros Sachtouris | |
38 | 304a92dc | Stavros Sachtouris | from kamaki.clients import Client, ClientError |
39 | 304a92dc | Stavros Sachtouris | from kamaki.clients.cyclades import CycladesClient |
40 | 304a92dc | Stavros Sachtouris | from kamaki.clients.cyclades_rest_api import CycladesClientApi |
41 | 304a92dc | Stavros Sachtouris | |
42 | edf8ad52 | Stavros Sachtouris | |
43 | d224bb37 | Stavros Sachtouris | compute_pkg_pkg = 'kamaki.clients.connection.kamakicon.KamakiHTTPConnection'
|
44 | edf8ad52 | Stavros Sachtouris | compute_pkg = 'kamaki.clients.cyclades.CycladesClient'
|
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 | 304a92dc | Stavros Sachtouris | dict(id=41, name="C1R1024D20"), |
89 | 304a92dc | Stavros Sachtouris | dict(id=42, name="C1R1024D40"), |
90 | 304a92dc | 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 | net_send = dict(network=dict(dhcp=False, name='someNet')) |
101 | 304a92dc | Stavros Sachtouris | net_recv = dict(network=dict( |
102 | 304a92dc | Stavros Sachtouris | status="PENDING",
|
103 | 304a92dc | Stavros Sachtouris | updated="2013-03-05T15:04:51.758780+00:00",
|
104 | 304a92dc | Stavros Sachtouris | name="someNet",
|
105 | 304a92dc | Stavros Sachtouris | created="2013-03-05T15:04:51.758728+00:00",
|
106 | 304a92dc | Stavros Sachtouris | cidr6=None,
|
107 | 304a92dc | Stavros Sachtouris | id="2130",
|
108 | 304a92dc | Stavros Sachtouris | gateway6=None,
|
109 | 304a92dc | Stavros Sachtouris | public=False,
|
110 | 304a92dc | Stavros Sachtouris | dhcp=False,
|
111 | 304a92dc | Stavros Sachtouris | cidr="192.168.1.0/24",
|
112 | 304a92dc | Stavros Sachtouris | type="MAC_FILTERED",
|
113 | 304a92dc | Stavros Sachtouris | gateway=None,
|
114 | 304a92dc | Stavros Sachtouris | attachments=dict(values=[dict(name='att1'), dict(name='att2')]))) |
115 | 304a92dc | Stavros Sachtouris | net_list = dict(networks=dict(values=[ |
116 | 304a92dc | Stavros Sachtouris | dict(id=1, name='n1'), |
117 | 304a92dc | Stavros Sachtouris | dict(id=2, name='n2'), |
118 | 304a92dc | Stavros Sachtouris | dict(id=3, name='n3')])) |
119 | 304a92dc | Stavros Sachtouris | |
120 | 304a92dc | Stavros Sachtouris | |
121 | 304a92dc | Stavros Sachtouris | class FR(object): |
122 | 304a92dc | Stavros Sachtouris | """FR stands for Fake Response"""
|
123 | 304a92dc | Stavros Sachtouris | json = vm_recv |
124 | 304a92dc | Stavros Sachtouris | headers = {} |
125 | 304a92dc | Stavros Sachtouris | content = json |
126 | 304a92dc | Stavros Sachtouris | status = None
|
127 | 304a92dc | Stavros Sachtouris | status_code = 200
|
128 | 304a92dc | Stavros Sachtouris | |
129 | 304a92dc | Stavros Sachtouris | def release(self): |
130 | 304a92dc | Stavros Sachtouris | pass
|
131 | 304a92dc | Stavros Sachtouris | |
132 | 304a92dc | Stavros Sachtouris | |
133 | 304a92dc | Stavros Sachtouris | class Cyclades(TestCase): |
134 | 304a92dc | Stavros Sachtouris | |
135 | 304a92dc | Stavros Sachtouris | def assert_dicts_are_equal(self, d1, d2): |
136 | 304a92dc | Stavros Sachtouris | for k, v in d1.items(): |
137 | 304a92dc | Stavros Sachtouris | self.assertTrue(k in d2) |
138 | 304a92dc | Stavros Sachtouris | if isinstance(v, dict): |
139 | 304a92dc | Stavros Sachtouris | self.assert_dicts_are_equal(v, d2[k])
|
140 | 304a92dc | Stavros Sachtouris | else:
|
141 | 304a92dc | Stavros Sachtouris | self.assertEqual(unicode(v), unicode(d2[k])) |
142 | 304a92dc | Stavros Sachtouris | |
143 | 304a92dc | Stavros Sachtouris | """Set up a Cyclades thorough test"""
|
144 | 304a92dc | Stavros Sachtouris | def setUp(self): |
145 | 304a92dc | Stavros Sachtouris | self.url = 'http://cyclades.example.com' |
146 | 304a92dc | Stavros Sachtouris | self.token = 'cyc14d3s70k3n' |
147 | 304a92dc | Stavros Sachtouris | self.client = CycladesClient(self.url, self.token) |
148 | 304a92dc | Stavros Sachtouris | from kamaki.clients.connection.kamakicon import KamakiHTTPConnection |
149 | 304a92dc | Stavros Sachtouris | self.C = KamakiHTTPConnection
|
150 | 304a92dc | Stavros Sachtouris | |
151 | 304a92dc | Stavros Sachtouris | def tearDown(self): |
152 | 304a92dc | Stavros Sachtouris | FR.status_code = 200
|
153 | 304a92dc | Stavros Sachtouris | FR.json = vm_recv |
154 | 304a92dc | Stavros Sachtouris | |
155 | edf8ad52 | Stavros Sachtouris | @patch(
|
156 | edf8ad52 | Stavros Sachtouris | '%s.get_image_details' % compute_pkg,
|
157 | edf8ad52 | Stavros Sachtouris | return_value=img_recv['image'])
|
158 | edf8ad52 | Stavros Sachtouris | def test_create_server(self, GID): |
159 | edf8ad52 | Stavros Sachtouris | with patch.object(
|
160 | edf8ad52 | Stavros Sachtouris | CycladesClient, 'servers_post',
|
161 | edf8ad52 | Stavros Sachtouris | side_effect=ClientError( |
162 | edf8ad52 | Stavros Sachtouris | 'REQUEST ENTITY TOO LARGE',
|
163 | edf8ad52 | Stavros Sachtouris | status=403)):
|
164 | 304a92dc | Stavros Sachtouris | self.assertRaises(
|
165 | 304a92dc | Stavros Sachtouris | ClientError, |
166 | 304a92dc | Stavros Sachtouris | self.client.create_server,
|
167 | 304a92dc | Stavros Sachtouris | vm_name, fid, img_ref) |
168 | edf8ad52 | Stavros Sachtouris | self.assertEqual(GID.mock_calls[-1], call(img_ref)) |
169 | 304a92dc | Stavros Sachtouris | |
170 | 304a92dc | Stavros Sachtouris | with patch.object(
|
171 | edf8ad52 | Stavros Sachtouris | CycladesClient, 'servers_post',
|
172 | edf8ad52 | Stavros Sachtouris | return_value=FR()) as post:
|
173 | 304a92dc | Stavros Sachtouris | r = self.client.create_server(vm_name, fid, img_ref)
|
174 | edf8ad52 | Stavros Sachtouris | self.assertEqual(r, FR.json['server']) |
175 | edf8ad52 | Stavros Sachtouris | self.assertEqual(GID.mock_calls[-1], call(img_ref)) |
176 | edf8ad52 | Stavros Sachtouris | self.assertEqual(post.mock_calls[-1], call(json_data=vm_send)) |
177 | 304a92dc | Stavros Sachtouris | prsn = 'Personality string (does not work with real servers)'
|
178 | 304a92dc | Stavros Sachtouris | self.client.create_server(vm_name, fid, img_ref, prsn)
|
179 | edf8ad52 | Stavros Sachtouris | expected = dict(server=dict(vm_send['server'])) |
180 | edf8ad52 | Stavros Sachtouris | expected['server']['personality'] = prsn |
181 | edf8ad52 | Stavros Sachtouris | self.assertEqual(post.mock_calls[-1], call(json_data=expected)) |
182 | 304a92dc | Stavros Sachtouris | |
183 | 0067c031 | Stavros Sachtouris | @patch('%s.servers_get' % compute_pkg, return_value=FR()) |
184 | 0067c031 | Stavros Sachtouris | def test_list_servers(self, SG): |
185 | 304a92dc | Stavros Sachtouris | FR.json = vm_list |
186 | 0067c031 | Stavros Sachtouris | for detail in (False, True): |
187 | 0067c031 | Stavros Sachtouris | r = self.client.list_servers(detail)
|
188 | 0067c031 | Stavros Sachtouris | for i, vm in enumerate(vm_list['servers']['values']): |
189 | 0067c031 | Stavros Sachtouris | self.assert_dicts_are_equal(r[i], vm)
|
190 | 0067c031 | Stavros Sachtouris | self.assertEqual(i + 1, len(r)) |
191 | 0067c031 | Stavros Sachtouris | self.assertEqual(SG.mock_calls[-1], call( |
192 | 0067c031 | Stavros Sachtouris | changes_since=None,
|
193 | 0067c031 | Stavros Sachtouris | command='detail' if detail else '')) |
194 | 304a92dc | Stavros Sachtouris | |
195 | 26ccd6fb | Stavros Sachtouris | @patch('%s.servers_get' % compute_pkg, return_value=FR()) |
196 | 26ccd6fb | Stavros Sachtouris | def test_get_server_details(self, SG): |
197 | 304a92dc | Stavros Sachtouris | vm_id = vm_recv['server']['id'] |
198 | 304a92dc | Stavros Sachtouris | r = self.client.get_server_details(vm_id)
|
199 | 304a92dc | Stavros Sachtouris | self.assert_dicts_are_equal(r, vm_recv['server']) |
200 | 26ccd6fb | Stavros Sachtouris | self.assertEqual(SG.mock_calls[-1], call(vm_id)) |
201 | 304a92dc | Stavros Sachtouris | |
202 | 2ace03e5 | Stavros Sachtouris | @patch('%s.servers_put' % compute_pkg, return_value=FR()) |
203 | 2ace03e5 | Stavros Sachtouris | def test_update_server_name(self, SP): |
204 | 304a92dc | Stavros Sachtouris | vm_id = vm_recv['server']['id'] |
205 | 304a92dc | Stavros Sachtouris | new_name = vm_name + '_new'
|
206 | 304a92dc | Stavros Sachtouris | self.client.update_server_name(vm_id, new_name)
|
207 | 2ace03e5 | Stavros Sachtouris | self.assertEqual(SP.mock_calls[-1], call(vm_id, json_data=dict( |
208 | 2ace03e5 | Stavros Sachtouris | server=dict(name=new_name))))
|
209 | 304a92dc | Stavros Sachtouris | |
210 | 876aae74 | Stavros Sachtouris | @patch('%s.servers_post' % compute_pkg, return_value=FR()) |
211 | 876aae74 | Stavros Sachtouris | def test_reboot_server(self, SP): |
212 | 304a92dc | Stavros Sachtouris | vm_id = vm_recv['server']['id'] |
213 | 876aae74 | Stavros Sachtouris | for hard in (None, True): |
214 | 876aae74 | Stavros Sachtouris | self.client.reboot_server(vm_id, hard=hard)
|
215 | 876aae74 | Stavros Sachtouris | self.assertEqual(SP.mock_calls[-1], call( |
216 | 876aae74 | Stavros Sachtouris | vm_id, 'action',
|
217 | 876aae74 | Stavros Sachtouris | json_data=dict(reboot=dict(type='HARD' if hard else 'SOFT')))) |
218 | 304a92dc | Stavros Sachtouris | |
219 | d560c67b | Stavros Sachtouris | @patch('%s.servers_put' % compute_pkg, return_value=FR()) |
220 | d560c67b | Stavros Sachtouris | def test_create_server_metadata(self, SP): |
221 | 304a92dc | Stavros Sachtouris | vm_id = vm_recv['server']['id'] |
222 | 304a92dc | Stavros Sachtouris | metadata = dict(m1='v1', m2='v2', m3='v3') |
223 | 304a92dc | Stavros Sachtouris | FR.json = dict(meta=vm_recv['server']) |
224 | 304a92dc | Stavros Sachtouris | for k, v in metadata.items(): |
225 | 304a92dc | Stavros Sachtouris | r = self.client.create_server_metadata(vm_id, k, v)
|
226 | 304a92dc | Stavros Sachtouris | self.assert_dicts_are_equal(r, vm_recv['server']) |
227 | d560c67b | Stavros Sachtouris | self.assertEqual(SP.mock_calls[-1], call( |
228 | d560c67b | Stavros Sachtouris | vm_id, 'meta/%s' % k,
|
229 | d560c67b | Stavros Sachtouris | json_data=dict(meta={k: v}), success=201)) |
230 | 304a92dc | Stavros Sachtouris | |
231 | d224bb37 | Stavros Sachtouris | @patch('%s.servers_get' % compute_pkg, return_value=FR()) |
232 | d224bb37 | Stavros Sachtouris | def test_get_server_metadata(self, SG): |
233 | 304a92dc | Stavros Sachtouris | vm_id = vm_recv['server']['id'] |
234 | 304a92dc | Stavros Sachtouris | metadata = dict(m1='v1', m2='v2', m3='v3') |
235 | 304a92dc | Stavros Sachtouris | FR.json = dict(metadata=dict(values=metadata)) |
236 | 304a92dc | Stavros Sachtouris | r = self.client.get_server_metadata(vm_id)
|
237 | d224bb37 | Stavros Sachtouris | self.assertEqual(SG.mock_calls[-1], call(vm_id, '/meta')) |
238 | 304a92dc | Stavros Sachtouris | self.assert_dicts_are_equal(r, metadata)
|
239 | 304a92dc | Stavros Sachtouris | |
240 | 304a92dc | Stavros Sachtouris | for k, v in metadata.items(): |
241 | 304a92dc | Stavros Sachtouris | FR.json = dict(meta={k: v})
|
242 | 304a92dc | Stavros Sachtouris | r = self.client.get_server_metadata(vm_id, k)
|
243 | 304a92dc | Stavros Sachtouris | self.assert_dicts_are_equal(r, {k: v})
|
244 | d224bb37 | Stavros Sachtouris | self.assertEqual(SG.mock_calls[-1], call(vm_id, '/meta/%s' % k)) |
245 | 304a92dc | Stavros Sachtouris | |
246 | d224bb37 | Stavros Sachtouris | @patch('%s.servers_post' % compute_pkg, return_value=FR()) |
247 | e750a969 | Stavros Sachtouris | def test_update_server_metadata(self, SP): |
248 | 304a92dc | Stavros Sachtouris | vm_id = vm_recv['server']['id'] |
249 | 304a92dc | Stavros Sachtouris | metadata = dict(m1='v1', m2='v2', m3='v3') |
250 | 304a92dc | Stavros Sachtouris | FR.json = dict(metadata=metadata)
|
251 | 304a92dc | Stavros Sachtouris | r = self.client.update_server_metadata(vm_id, **metadata)
|
252 | 304a92dc | Stavros Sachtouris | self.assert_dicts_are_equal(r, metadata)
|
253 | e750a969 | Stavros Sachtouris | self.assertEqual(SP.mock_calls[-1], call( |
254 | e750a969 | Stavros Sachtouris | vm_id, 'meta',
|
255 | e750a969 | Stavros Sachtouris | json_data=dict(metadata=metadata), success=201)) |
256 | 304a92dc | Stavros Sachtouris | |
257 | d224bb37 | Stavros Sachtouris | @patch('%s.servers_delete' % compute_pkg, return_value=FR()) |
258 | dbd50059 | Stavros Sachtouris | def test_delete_server_metadata(self, SD): |
259 | 304a92dc | Stavros Sachtouris | vm_id = vm_recv['server']['id'] |
260 | 304a92dc | Stavros Sachtouris | key = 'metakey'
|
261 | 304a92dc | Stavros Sachtouris | self.client.delete_server_metadata(vm_id, key)
|
262 | dbd50059 | Stavros Sachtouris | self.assertEqual(SD.mock_calls[-1], call(vm_id, 'meta/' + key)) |
263 | 304a92dc | Stavros Sachtouris | |
264 | 8c40c4a6 | Stavros Sachtouris | @patch('%s.flavors_get' % compute_pkg, return_value=FR()) |
265 | 8c40c4a6 | Stavros Sachtouris | def test_list_flavors(self, FG): |
266 | 304a92dc | Stavros Sachtouris | FR.json = flavor_list |
267 | 8c40c4a6 | Stavros Sachtouris | for cmd in ('', 'detail'): |
268 | 8c40c4a6 | Stavros Sachtouris | r = self.client.list_flavors(detail=(cmd == 'detail')) |
269 | 8c40c4a6 | Stavros Sachtouris | self.assertEqual(FG.mock_calls[-1], call(command=cmd)) |
270 | 8c40c4a6 | Stavros Sachtouris | self.assert_dicts_are_equal(dict(values=r), flavor_list['flavors']) |
271 | 304a92dc | Stavros Sachtouris | |
272 | ae9c3b5f | Stavros Sachtouris | @patch('%s.flavors_get' % compute_pkg, return_value=FR()) |
273 | ae9c3b5f | Stavros Sachtouris | def test_get_flavor_details(self, FG): |
274 | 304a92dc | Stavros Sachtouris | FR.json = dict(flavor=flavor_list['flavors']) |
275 | 304a92dc | Stavros Sachtouris | r = self.client.get_flavor_details(fid)
|
276 | ae9c3b5f | Stavros Sachtouris | self.assertEqual(FG.mock_calls[-1], call(fid)) |
277 | 304a92dc | Stavros Sachtouris | self.assert_dicts_are_equal(r, flavor_list['flavors']) |
278 | 304a92dc | Stavros Sachtouris | |
279 | b2347a17 | Stavros Sachtouris | @patch('%s.images_get' % compute_pkg, return_value=FR()) |
280 | b2347a17 | Stavros Sachtouris | def test_list_images(self, IG): |
281 | 304a92dc | Stavros Sachtouris | FR.json = img_list |
282 | b2347a17 | Stavros Sachtouris | for cmd in ('', 'detail'): |
283 | b2347a17 | Stavros Sachtouris | r = self.client.list_images(detail=(cmd == 'detail')) |
284 | b2347a17 | Stavros Sachtouris | self.assertEqual(IG.mock_calls[-1], call(command=cmd)) |
285 | b2347a17 | Stavros Sachtouris | expected = img_list['images']['values'] |
286 | b2347a17 | Stavros Sachtouris | for i in range(len(r)): |
287 | b2347a17 | Stavros Sachtouris | self.assert_dicts_are_equal(expected[i], r[i])
|
288 | 304a92dc | Stavros Sachtouris | |
289 | 937ef4dd | Stavros Sachtouris | @patch('%s.images_get' % compute_pkg, return_value=FR()) |
290 | 937ef4dd | Stavros Sachtouris | def test_get_image_details(self, IG): |
291 | 304a92dc | Stavros Sachtouris | FR.json = img_recv |
292 | 304a92dc | Stavros Sachtouris | r = self.client.get_image_details(img_ref)
|
293 | 937ef4dd | Stavros Sachtouris | self.assertEqual(IG.mock_calls[-1], call(img_ref)) |
294 | 304a92dc | Stavros Sachtouris | self.assert_dicts_are_equal(r, img_recv['image']) |
295 | 304a92dc | Stavros Sachtouris | |
296 | d224bb37 | Stavros Sachtouris | @patch('%s.images_get' % compute_pkg, return_value=FR()) |
297 | 304a92dc | Stavros Sachtouris | def test_get_image_metadata(self, IG): |
298 | 304a92dc | Stavros Sachtouris | FR.json = dict(metadata=dict(values=img_recv['image'])) |
299 | 304a92dc | Stavros Sachtouris | r = self.client.get_image_metadata(img_ref)
|
300 | 5656f78c | Stavros Sachtouris | self.assertEqual(IG.mock_calls[-1], call('%s' % img_ref, '/meta')) |
301 | 304a92dc | Stavros Sachtouris | self.assert_dicts_are_equal(img_recv['image'], r) |
302 | 304a92dc | Stavros Sachtouris | FR.json = dict(meta=img_recv['image']) |
303 | 304a92dc | Stavros Sachtouris | key = 'somekey'
|
304 | 5656f78c | Stavros Sachtouris | r = self.client.get_image_metadata(img_ref, key)
|
305 | 5656f78c | Stavros Sachtouris | self.assertEqual(
|
306 | 5656f78c | Stavros Sachtouris | IG.mock_calls[-1],
|
307 | 5656f78c | Stavros Sachtouris | call('%s' % img_ref, '/meta/%s' % key)) |
308 | 5656f78c | Stavros Sachtouris | self.assert_dicts_are_equal(img_recv['image'], r) |
309 | 304a92dc | Stavros Sachtouris | |
310 | 0651cda3 | Stavros Sachtouris | @patch('%s.servers_delete' % compute_pkg, return_value=FR()) |
311 | 0651cda3 | Stavros Sachtouris | def test_delete_server(self, SD): |
312 | 304a92dc | Stavros Sachtouris | vm_id = vm_recv['server']['id'] |
313 | 304a92dc | Stavros Sachtouris | self.client.delete_server(vm_id)
|
314 | 0651cda3 | Stavros Sachtouris | self.assertEqual(SD.mock_calls[-1], call(vm_id)) |
315 | 304a92dc | Stavros Sachtouris | |
316 | f711008c | Stavros Sachtouris | @patch('%s.images_delete' % compute_pkg, return_value=FR()) |
317 | f711008c | Stavros Sachtouris | def test_delete_image(self, ID): |
318 | 304a92dc | Stavros Sachtouris | self.client.delete_image(img_ref)
|
319 | f711008c | Stavros Sachtouris | self.assertEqual(ID.mock_calls[-1], call(img_ref)) |
320 | 304a92dc | Stavros Sachtouris | |
321 | 71017d87 | Stavros Sachtouris | @patch('%s.images_put' % compute_pkg, return_value=FR()) |
322 | 71017d87 | Stavros Sachtouris | def test_create_image_metadata(self, IP): |
323 | 71017d87 | Stavros Sachtouris | (key, val) = ('k1', 'v1') |
324 | 304a92dc | Stavros Sachtouris | FR.json = dict(meta=img_recv['image']) |
325 | 71017d87 | Stavros Sachtouris | r = self.client.create_image_metadata(img_ref, key, val)
|
326 | 71017d87 | Stavros Sachtouris | self.assertEqual(IP.mock_calls[-1], call( |
327 | 71017d87 | Stavros Sachtouris | img_ref, 'meta/%s' % key,
|
328 | 71017d87 | Stavros Sachtouris | json_data=dict(meta={key: val})))
|
329 | 71017d87 | Stavros Sachtouris | self.assert_dicts_are_equal(r, img_recv['image']) |
330 | 304a92dc | Stavros Sachtouris | |
331 | d224bb37 | Stavros Sachtouris | @patch('%s.images_post' % compute_pkg, return_value=FR()) |
332 | 428aa852 | Stavros Sachtouris | def test_update_image_metadata(self, IP): |
333 | 304a92dc | Stavros Sachtouris | metadata = dict(m1='v1', m2='v2', m3='v3') |
334 | 304a92dc | Stavros Sachtouris | FR.json = dict(metadata=metadata)
|
335 | 304a92dc | Stavros Sachtouris | r = self.client.update_image_metadata(img_ref, **metadata)
|
336 | 428aa852 | Stavros Sachtouris | self.assertEqual(
|
337 | 428aa852 | Stavros Sachtouris | IP.mock_calls[-1],
|
338 | 428aa852 | Stavros Sachtouris | call(img_ref, 'meta', json_data=dict(metadata=metadata))) |
339 | 304a92dc | Stavros Sachtouris | self.assert_dicts_are_equal(r, metadata)
|
340 | 304a92dc | Stavros Sachtouris | |
341 | 428aa852 | Stavros Sachtouris | """
|
342 | d224bb37 | Stavros Sachtouris | @patch('%s.images_delete' % compute_pkg, return_value=FR())
|
343 | 304a92dc | Stavros Sachtouris | def test_delete_image_metadata(self, images_delete):
|
344 | 304a92dc | Stavros Sachtouris | key = 'metakey'
|
345 | 304a92dc | Stavros Sachtouris | self.client.delete_image_metadata(img_ref, key)
|
346 | 304a92dc | Stavros Sachtouris | self.assertEqual(
|
347 | 304a92dc | Stavros Sachtouris | (img_ref, '/meta/' + key),
|
348 | 304a92dc | Stavros Sachtouris | images_delete.call_args[0])
|
349 | 304a92dc | Stavros Sachtouris | """
|
350 | 304a92dc | Stavros Sachtouris | |
351 | 304a92dc | Stavros Sachtouris | if __name__ == '__main__': |
352 | 304a92dc | Stavros Sachtouris | from sys import argv |
353 | 304a92dc | Stavros Sachtouris | from kamaki.clients.test import runTestCase |
354 | 304a92dc | Stavros Sachtouris | runTestCase(Cyclades, 'Cyclades (multi) Client', argv[1:]) |