root / kamaki / clients / test / cyclades.py @ 8f5d38df
History | View | Annotate | Download (20.6 kB)
1 | c1004a00 | Stavros Sachtouris | # Copyright 2012-2013 GRNET S.A. All rights reserved.
|
---|---|---|---|
2 | c1004a00 | Stavros Sachtouris | #
|
3 | c1004a00 | Stavros Sachtouris | # Redistribution and use in source and binary forms, with or
|
4 | c1004a00 | Stavros Sachtouris | # without modification, are permitted provided that the following
|
5 | c1004a00 | Stavros Sachtouris | # conditions are met:
|
6 | c1004a00 | Stavros Sachtouris | #
|
7 | c1004a00 | Stavros Sachtouris | # 1. Redistributions of source code must retain the above
|
8 | c1004a00 | Stavros Sachtouris | # copyright notice, this list of conditions and the following
|
9 | c1004a00 | Stavros Sachtouris | # disclaimer.
|
10 | c1004a00 | Stavros Sachtouris | #
|
11 | c1004a00 | Stavros Sachtouris | # 2. Redistributions in binary form must reproduce the above
|
12 | c1004a00 | Stavros Sachtouris | # copyright notice, this list of conditions and the following
|
13 | c1004a00 | Stavros Sachtouris | # disclaimer in the documentation and/or other materials
|
14 | c1004a00 | Stavros Sachtouris | # provided with the distribution.
|
15 | c1004a00 | Stavros Sachtouris | #
|
16 | c1004a00 | Stavros Sachtouris | # THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
|
17 | c1004a00 | Stavros Sachtouris | # OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
18 | c1004a00 | Stavros Sachtouris | # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
19 | c1004a00 | Stavros Sachtouris | # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
|
20 | c1004a00 | Stavros Sachtouris | # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
21 | c1004a00 | Stavros Sachtouris | # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
22 | c1004a00 | Stavros Sachtouris | # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
23 | c1004a00 | Stavros Sachtouris | # USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
24 | c1004a00 | Stavros Sachtouris | # AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
25 | c1004a00 | Stavros Sachtouris | # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
26 | c1004a00 | Stavros Sachtouris | # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
27 | c1004a00 | Stavros Sachtouris | # POSSIBILITY OF SUCH DAMAGE.
|
28 | c1004a00 | Stavros Sachtouris | #
|
29 | c1004a00 | Stavros Sachtouris | # The views and conclusions contained in the software and
|
30 | c1004a00 | Stavros Sachtouris | # documentation are those of the authors and should not be
|
31 | c1004a00 | Stavros Sachtouris | # interpreted as representing official policies, either expressed
|
32 | c1004a00 | Stavros Sachtouris | # or implied, of GRNET S.A.
|
33 | 03493855 | Stavros Sachtouris | from mock import patch, Mock |
34 | 03493855 | Stavros Sachtouris | from unittest import TestCase |
35 | 03493855 | Stavros Sachtouris | from json import loads |
36 | 03493855 | Stavros Sachtouris | |
37 | 03493855 | Stavros Sachtouris | from kamaki.clients import Client, ClientError |
38 | 5ad6a119 | Stavros Sachtouris | from kamaki.clients.cyclades_rest_api import CycladesClientApi |
39 | 03493855 | Stavros Sachtouris | |
40 | 03493855 | Stavros Sachtouris | img_ref = "1m4g3-r3f3r3nc3"
|
41 | 03493855 | Stavros Sachtouris | vm_name = "my new VM"
|
42 | 03493855 | Stavros Sachtouris | fid = 42
|
43 | 03493855 | Stavros Sachtouris | vm_send = dict(server=dict( |
44 | 03493855 | Stavros Sachtouris | flavorRef=fid, |
45 | 03493855 | Stavros Sachtouris | name=vm_name, |
46 | 03493855 | Stavros Sachtouris | imageRef=img_ref, |
47 | 03493855 | Stavros Sachtouris | metadata=dict(os="debian", users="root"))) |
48 | 03493855 | Stavros Sachtouris | vm_recv = dict(server=dict( |
49 | 03493855 | Stavros Sachtouris | status="BUILD",
|
50 | 03493855 | Stavros Sachtouris | updated="2013-03-01T10:04:00.637152+00:00",
|
51 | 03493855 | Stavros Sachtouris | hostId="",
|
52 | 5e194c99 | Stavros Sachtouris | name=vm_name, |
53 | 5e194c99 | Stavros Sachtouris | imageRef=img_ref, |
54 | 03493855 | Stavros Sachtouris | created="2013-03-01T10:04:00.087324+00:00",
|
55 | 03493855 | Stavros Sachtouris | flavorRef=fid, |
56 | 03493855 | Stavros Sachtouris | adminPass="n0n3sh@11p@55",
|
57 | 03493855 | Stavros Sachtouris | suspended=False,
|
58 | 03493855 | Stavros Sachtouris | progress=0,
|
59 | 03493855 | Stavros Sachtouris | id=31173,
|
60 | 03493855 | Stavros Sachtouris | metadata=dict(values=dict(os="debian", users="root")))) |
61 | 03493855 | Stavros Sachtouris | img_recv = dict(image=dict( |
62 | 03493855 | Stavros Sachtouris | status="ACTIVE",
|
63 | 03493855 | Stavros Sachtouris | updated="2013-02-26T11:10:14+00:00",
|
64 | 03493855 | Stavros Sachtouris | name="Debian Base",
|
65 | 03493855 | Stavros Sachtouris | created="2013-02-26T11:03:29+00:00",
|
66 | 03493855 | Stavros Sachtouris | progress=100,
|
67 | 03493855 | Stavros Sachtouris | id=img_ref, |
68 | 03493855 | Stavros Sachtouris | metadata=dict(values=dict( |
69 | 03493855 | Stavros Sachtouris | partition_table="msdos",
|
70 | 03493855 | Stavros Sachtouris | kernel="2.6.32",
|
71 | 03493855 | Stavros Sachtouris | osfamily="linux",
|
72 | 03493855 | Stavros Sachtouris | users="root",
|
73 | 03493855 | Stavros Sachtouris | gui="No GUI",
|
74 | 03493855 | Stavros Sachtouris | sortorder="1",
|
75 | 03493855 | Stavros Sachtouris | os="debian",
|
76 | 03493855 | Stavros Sachtouris | root_partition="1",
|
77 | 03493855 | Stavros Sachtouris | description="Debian 6.0.7 (Squeeze) Base System"))))
|
78 | 257b931a | Stavros Sachtouris | vm_list = dict(servers=dict(values=[ |
79 | 257b931a | Stavros Sachtouris | dict(name='n1', id=1), |
80 | 257b931a | Stavros Sachtouris | dict(name='n2', id=2)])) |
81 | 8f5d38df | Stavros Sachtouris | flavor_list = dict(flavors=dict(values=[ |
82 | 8f5d38df | Stavros Sachtouris | dict(id=1, name="C1R1024D20"), |
83 | 8f5d38df | Stavros Sachtouris | dict(id=2, name="C1R1024D40"), |
84 | 8f5d38df | Stavros Sachtouris | dict(id=3, name="C1R1028D20") |
85 | 8f5d38df | Stavros Sachtouris | ])) |
86 | 03493855 | Stavros Sachtouris | |
87 | 03493855 | Stavros Sachtouris | |
88 | 03493855 | Stavros Sachtouris | class Cyclades(TestCase): |
89 | 03493855 | Stavros Sachtouris | |
90 | 257b931a | Stavros Sachtouris | def assert_dicts_are_equal(self, d1, d2): |
91 | 03493855 | Stavros Sachtouris | for k, v in d1.items(): |
92 | 03493855 | Stavros Sachtouris | self.assertTrue(k in d2) |
93 | 03493855 | Stavros Sachtouris | if isinstance(v, dict): |
94 | 257b931a | Stavros Sachtouris | self.assert_dicts_are_equal(v, d2[k])
|
95 | 03493855 | Stavros Sachtouris | else:
|
96 | 03493855 | Stavros Sachtouris | self.assertEqual(unicode(v), unicode(d2[k])) |
97 | 03493855 | Stavros Sachtouris | |
98 | 03493855 | Stavros Sachtouris | class FR(object): |
99 | 03493855 | Stavros Sachtouris | """FR stands for Fake Response"""
|
100 | 03493855 | Stavros Sachtouris | json = vm_recv |
101 | 03493855 | Stavros Sachtouris | headers = {} |
102 | 03493855 | Stavros Sachtouris | content = json |
103 | 03493855 | Stavros Sachtouris | status = None
|
104 | 03493855 | Stavros Sachtouris | status_code = 200
|
105 | 03493855 | Stavros Sachtouris | |
106 | 03493855 | Stavros Sachtouris | def release(self): |
107 | 03493855 | Stavros Sachtouris | pass
|
108 | c1004a00 | Stavros Sachtouris | |
109 | c1004a00 | Stavros Sachtouris | """Set up a Cyclades thorough test"""
|
110 | c1004a00 | Stavros Sachtouris | def setUp(self): |
111 | 03493855 | Stavros Sachtouris | self.url = 'http://cyclades.example.com' |
112 | 03493855 | Stavros Sachtouris | self.token = 'cyc14d3s70k3n' |
113 | 03493855 | Stavros Sachtouris | from kamaki.clients.cyclades import CycladesClient |
114 | 03493855 | Stavros Sachtouris | self.client = CycladesClient(self.url, self.token) |
115 | 03493855 | Stavros Sachtouris | from kamaki.clients.connection.kamakicon import KamakiHTTPConnection |
116 | 03493855 | Stavros Sachtouris | self.C = KamakiHTTPConnection
|
117 | c1004a00 | Stavros Sachtouris | |
118 | c1004a00 | Stavros Sachtouris | def tearDown(self): |
119 | 257b931a | Stavros Sachtouris | self.FR.status_code = 200 |
120 | e5613073 | Stavros Sachtouris | self.FR.json = vm_recv
|
121 | c1004a00 | Stavros Sachtouris | |
122 | c1004a00 | Stavros Sachtouris | def test_create_server(self): |
123 | 03493855 | Stavros Sachtouris | self.client.get_image_details = Mock(return_value=img_recv['image']) |
124 | 03493855 | Stavros Sachtouris | with patch.object(Client, 'request', side_effect=ClientError( |
125 | 03493855 | Stavros Sachtouris | 'REQUEST ENTITY TOO LARGE',
|
126 | 03493855 | Stavros Sachtouris | status=403)):
|
127 | 03493855 | Stavros Sachtouris | self.assertRaises(
|
128 | 03493855 | Stavros Sachtouris | ClientError, |
129 | 03493855 | Stavros Sachtouris | self.client.create_server,
|
130 | 03493855 | Stavros Sachtouris | vm_name, fid, img_ref) |
131 | 03493855 | Stavros Sachtouris | |
132 | 03493855 | Stavros Sachtouris | with patch.object(
|
133 | 03493855 | Stavros Sachtouris | self.C,
|
134 | 03493855 | Stavros Sachtouris | 'perform_request',
|
135 | 03493855 | Stavros Sachtouris | return_value=self.FR()) as perform_req: |
136 | 03493855 | Stavros Sachtouris | self.assertRaises(
|
137 | 03493855 | Stavros Sachtouris | ClientError, |
138 | 03493855 | Stavros Sachtouris | self.client.create_server,
|
139 | 03493855 | Stavros Sachtouris | vm_name, fid, img_ref) |
140 | 03493855 | Stavros Sachtouris | self.FR.status_code = 202 |
141 | 03493855 | Stavros Sachtouris | r = self.client.create_server(vm_name, fid, img_ref)
|
142 | 03493855 | Stavros Sachtouris | self.assertEqual(self.client.http_client.url, self.url) |
143 | 03493855 | Stavros Sachtouris | self.assertEqual(self.client.http_client.path, '/servers') |
144 | 03493855 | Stavros Sachtouris | (method, data, a_headers, a_params) = perform_req.call_args[0]
|
145 | 257b931a | Stavros Sachtouris | self.assert_dicts_are_equal(loads(data), vm_send)
|
146 | 257b931a | Stavros Sachtouris | self.assert_dicts_are_equal(r, vm_recv['server']) |
147 | 03493855 | Stavros Sachtouris | prsn = 'Personality string (does not work with real servers)'
|
148 | 03493855 | Stavros Sachtouris | self.client.create_server(vm_name, fid, img_ref, prsn)
|
149 | 03493855 | Stavros Sachtouris | (method, data, a_headers, a_params) = perform_req.call_args[0]
|
150 | 03493855 | Stavros Sachtouris | data = loads(data) |
151 | 03493855 | Stavros Sachtouris | self.assertTrue('personality' in data['server']) |
152 | 03493855 | Stavros Sachtouris | self.assertEqual(prsn, data['server']['personality']) |
153 | c1004a00 | Stavros Sachtouris | |
154 | c1004a00 | Stavros Sachtouris | def test_list_servers(self): |
155 | 257b931a | Stavros Sachtouris | self.FR.json = vm_list
|
156 | 257b931a | Stavros Sachtouris | with patch.object(
|
157 | 257b931a | Stavros Sachtouris | self.C,
|
158 | 257b931a | Stavros Sachtouris | 'perform_request',
|
159 | 257b931a | Stavros Sachtouris | return_value=self.FR()) as perform_req: |
160 | 257b931a | Stavros Sachtouris | r = self.client.list_servers()
|
161 | 257b931a | Stavros Sachtouris | self.assertEqual(self.client.http_client.url, self.url) |
162 | 257b931a | Stavros Sachtouris | self.assertEqual(self.client.http_client.path, '/servers') |
163 | 257b931a | Stavros Sachtouris | (method, data, a_headers, a_params) = perform_req.call_args[0]
|
164 | 257b931a | Stavros Sachtouris | self.assert_dicts_are_equal(dict(values=r), vm_list['servers']) |
165 | 257b931a | Stavros Sachtouris | r = self.client.list_servers(detail=True) |
166 | 257b931a | Stavros Sachtouris | self.assertEqual(self.client.http_client.url, self.url) |
167 | 257b931a | Stavros Sachtouris | self.assertEqual(self.client.http_client.path, '/servers/detail') |
168 | 257b931a | Stavros Sachtouris | with patch.object(
|
169 | 257b931a | Stavros Sachtouris | CycladesClientApi, |
170 | 257b931a | Stavros Sachtouris | 'servers_get',
|
171 | 257b931a | Stavros Sachtouris | return_value=self.FR()) as servers_get: |
172 | 257b931a | Stavros Sachtouris | self.client.list_servers(changes_since=True) |
173 | 257b931a | Stavros Sachtouris | self.assertTrue(servers_get.call_args[1]['changes_since']) |
174 | c1004a00 | Stavros Sachtouris | |
175 | e5613073 | Stavros Sachtouris | def test_get_server_details(self): |
176 | e5613073 | Stavros Sachtouris | vm_id = vm_recv['server']['id'] |
177 | e5613073 | Stavros Sachtouris | with patch.object(self.C, 'perform_request', return_value=self.FR()): |
178 | e5613073 | Stavros Sachtouris | r = self.client.get_server_details(vm_id)
|
179 | e5613073 | Stavros Sachtouris | self.assertEqual(self.client.http_client.url, self.url) |
180 | e5613073 | Stavros Sachtouris | self.assertEqual(
|
181 | e5613073 | Stavros Sachtouris | self.client.http_client.path,
|
182 | e5613073 | Stavros Sachtouris | '/servers/%s' % vm_id)
|
183 | e5613073 | Stavros Sachtouris | self.assert_dicts_are_equal(r, vm_recv['server']) |
184 | c1004a00 | Stavros Sachtouris | |
185 | 5e194c99 | Stavros Sachtouris | def test_update_server_name(self): |
186 | 5e194c99 | Stavros Sachtouris | vm_id = vm_recv['server']['id'] |
187 | 5e194c99 | Stavros Sachtouris | new_name = vm_name + '_new'
|
188 | 5e194c99 | Stavros Sachtouris | self.FR.status_code = 204 |
189 | 5e194c99 | Stavros Sachtouris | with patch.object(
|
190 | 5e194c99 | Stavros Sachtouris | self.C,
|
191 | 5e194c99 | Stavros Sachtouris | 'perform_request',
|
192 | 5e194c99 | Stavros Sachtouris | return_value=self.FR()) as perform_req: |
193 | 5e194c99 | Stavros Sachtouris | self.client.update_server_name(vm_id, new_name)
|
194 | 5e194c99 | Stavros Sachtouris | self.assertEqual(self.client.http_client.url, self.url) |
195 | 5e194c99 | Stavros Sachtouris | self.assertEqual(
|
196 | 5e194c99 | Stavros Sachtouris | self.client.http_client.path,
|
197 | 5e194c99 | Stavros Sachtouris | '/servers/%s' % vm_id)
|
198 | 5e194c99 | Stavros Sachtouris | (method, data, a_headers, a_params) = perform_req.call_args[0]
|
199 | 5e194c99 | Stavros Sachtouris | self.assert_dicts_are_equal(
|
200 | 5e194c99 | Stavros Sachtouris | dict(server=dict(name=new_name)), |
201 | 5e194c99 | Stavros Sachtouris | loads(data)) |
202 | c1004a00 | Stavros Sachtouris | |
203 | c1004a00 | Stavros Sachtouris | def test_reboot_server(self): |
204 | e711efe2 | Stavros Sachtouris | vm_id = vm_recv['server']['id'] |
205 | e711efe2 | Stavros Sachtouris | self.FR.status_code = 202 |
206 | e711efe2 | Stavros Sachtouris | with patch.object(
|
207 | e711efe2 | Stavros Sachtouris | self.C,
|
208 | e711efe2 | Stavros Sachtouris | 'perform_request',
|
209 | e711efe2 | Stavros Sachtouris | return_value=self.FR()) as perform_req: |
210 | e711efe2 | Stavros Sachtouris | self.client.reboot_server(vm_id)
|
211 | e711efe2 | Stavros Sachtouris | self.assertEqual(self.client.http_client.url, self.url) |
212 | e711efe2 | Stavros Sachtouris | self.assertEqual(
|
213 | e711efe2 | Stavros Sachtouris | self.client.http_client.path,
|
214 | e711efe2 | Stavros Sachtouris | '/servers/%s/action' % vm_id)
|
215 | e711efe2 | Stavros Sachtouris | (method, data, a_headers, a_params) = perform_req.call_args[0]
|
216 | e711efe2 | Stavros Sachtouris | self.assert_dicts_are_equal(
|
217 | e711efe2 | Stavros Sachtouris | dict(reboot=dict(type='SOFT')), |
218 | e711efe2 | Stavros Sachtouris | loads(data)) |
219 | c1004a00 | Stavros Sachtouris | |
220 | c1004a00 | Stavros Sachtouris | def test_create_server_metadata(self): |
221 | f1cab3a1 | Stavros Sachtouris | vm_id = vm_recv['server']['id'] |
222 | f1cab3a1 | Stavros Sachtouris | metadata = dict(m1='v1', m2='v2', m3='v3') |
223 | f1cab3a1 | Stavros Sachtouris | self.FR.json = dict(meta=vm_recv['server']) |
224 | 774cc124 | Stavros Sachtouris | with patch.object(
|
225 | 774cc124 | Stavros Sachtouris | self.C,
|
226 | 774cc124 | Stavros Sachtouris | 'perform_request',
|
227 | 774cc124 | Stavros Sachtouris | return_value=self.FR()) as perform_req: |
228 | f1cab3a1 | Stavros Sachtouris | self.assertRaises(
|
229 | f1cab3a1 | Stavros Sachtouris | ClientError, |
230 | f1cab3a1 | Stavros Sachtouris | self.client.create_server_metadata,
|
231 | f1cab3a1 | Stavros Sachtouris | vm_id, 'key', 'value') |
232 | 774cc124 | Stavros Sachtouris | self.FR.status_code = 201 |
233 | f1cab3a1 | Stavros Sachtouris | for k, v in metadata.items(): |
234 | f1cab3a1 | Stavros Sachtouris | r = self.client.create_server_metadata(vm_id, k, v)
|
235 | f1cab3a1 | Stavros Sachtouris | self.assertEqual(self.client.http_client.url, self.url) |
236 | f1cab3a1 | Stavros Sachtouris | self.assertEqual(
|
237 | f1cab3a1 | Stavros Sachtouris | self.client.http_client.path,
|
238 | f1cab3a1 | Stavros Sachtouris | '/servers/%s/meta/%s' % (vm_id, k))
|
239 | 774cc124 | Stavros Sachtouris | (method, data, a_headers, a_params) = perform_req.call_args[0]
|
240 | 774cc124 | Stavros Sachtouris | self.assertEqual(dict(meta={k: v}), loads(data)) |
241 | f1cab3a1 | Stavros Sachtouris | self.assert_dicts_are_equal(r, vm_recv['server']) |
242 | c1004a00 | Stavros Sachtouris | |
243 | c1004a00 | Stavros Sachtouris | def test_get_server_metadata(self): |
244 | 774cc124 | Stavros Sachtouris | vm_id = vm_recv['server']['id'] |
245 | 774cc124 | Stavros Sachtouris | metadata = dict(m1='v1', m2='v2', m3='v3') |
246 | 774cc124 | Stavros Sachtouris | with patch.object(self.C, 'perform_request', return_value=self.FR()): |
247 | 774cc124 | Stavros Sachtouris | self.FR.json = dict(metadata=dict(values=metadata)) |
248 | 774cc124 | Stavros Sachtouris | r = self.client.get_server_metadata(vm_id)
|
249 | 774cc124 | Stavros Sachtouris | self.assertEqual(self.client.http_client.url, self.url) |
250 | 774cc124 | Stavros Sachtouris | self.assertEqual(
|
251 | 774cc124 | Stavros Sachtouris | self.client.http_client.path,
|
252 | 774cc124 | Stavros Sachtouris | '/servers/%s/meta' % vm_id)
|
253 | 774cc124 | Stavros Sachtouris | self.assert_dicts_are_equal(r, metadata)
|
254 | 774cc124 | Stavros Sachtouris | |
255 | 774cc124 | Stavros Sachtouris | for k, v in metadata.items(): |
256 | 774cc124 | Stavros Sachtouris | self.FR.json = dict(meta={k: v}) |
257 | 774cc124 | Stavros Sachtouris | r = self.client.get_server_metadata(vm_id, k)
|
258 | 774cc124 | Stavros Sachtouris | self.assertEqual(self.client.http_client.url, self.url) |
259 | 774cc124 | Stavros Sachtouris | self.assertEqual(
|
260 | 774cc124 | Stavros Sachtouris | self.client.http_client.path,
|
261 | 774cc124 | Stavros Sachtouris | '/servers/%s/meta/%s' % (vm_id, k))
|
262 | 774cc124 | Stavros Sachtouris | self.assert_dicts_are_equal(r, {k: v})
|
263 | c1004a00 | Stavros Sachtouris | |
264 | c1004a00 | Stavros Sachtouris | def test_update_server_metadata(self): |
265 | 7bbaf88b | Stavros Sachtouris | vm_id = vm_recv['server']['id'] |
266 | 7bbaf88b | Stavros Sachtouris | metadata = dict(m1='v1', m2='v2', m3='v3') |
267 | 7bbaf88b | Stavros Sachtouris | self.FR.json = dict(metadata=metadata) |
268 | 7bbaf88b | Stavros Sachtouris | with patch.object(
|
269 | 7bbaf88b | Stavros Sachtouris | CycladesClientApi, |
270 | 7bbaf88b | Stavros Sachtouris | 'servers_post',
|
271 | 7bbaf88b | Stavros Sachtouris | return_value=self.FR()) as servers_post: |
272 | 7bbaf88b | Stavros Sachtouris | r = self.client.update_server_metadata(vm_id, **metadata)
|
273 | 7bbaf88b | Stavros Sachtouris | self.assert_dicts_are_equal(r, metadata)
|
274 | 7bbaf88b | Stavros Sachtouris | (called_id, cmd) = servers_post.call_args[0]
|
275 | 7bbaf88b | Stavros Sachtouris | self.assertEqual(called_id, vm_id)
|
276 | 7bbaf88b | Stavros Sachtouris | self.assertEqual(cmd, 'meta') |
277 | 7bbaf88b | Stavros Sachtouris | data = servers_post.call_args[1]['json_data'] |
278 | 7bbaf88b | Stavros Sachtouris | self.assert_dicts_are_equal(data, dict(metadata=metadata)) |
279 | c1004a00 | Stavros Sachtouris | |
280 | c1004a00 | Stavros Sachtouris | def test_delete_server_metadata(self): |
281 | 5ad6a119 | Stavros Sachtouris | vm_id = vm_recv['server']['id'] |
282 | 5ad6a119 | Stavros Sachtouris | key = 'metakey'
|
283 | 5ad6a119 | Stavros Sachtouris | with patch.object(
|
284 | 5ad6a119 | Stavros Sachtouris | CycladesClientApi, |
285 | 5ad6a119 | Stavros Sachtouris | 'servers_delete',
|
286 | 5ad6a119 | Stavros Sachtouris | return_value=self.FR()) as servers_delete: |
287 | 5ad6a119 | Stavros Sachtouris | self.client.delete_server_metadata(vm_id, key)
|
288 | 5ad6a119 | Stavros Sachtouris | self.assertEqual(
|
289 | 5ad6a119 | Stavros Sachtouris | (vm_id, 'meta/' + key),
|
290 | 5ad6a119 | Stavros Sachtouris | servers_delete.call_args[0])
|
291 | c1004a00 | Stavros Sachtouris | |
292 | c1004a00 | Stavros Sachtouris | def test_list_flavors(self): |
293 | 8f5d38df | Stavros Sachtouris | self.FR.json = vm_list
|
294 | 8f5d38df | Stavros Sachtouris | self.FR.json = flavor_list
|
295 | 8f5d38df | Stavros Sachtouris | with patch.object(
|
296 | 8f5d38df | Stavros Sachtouris | self.C,
|
297 | 8f5d38df | Stavros Sachtouris | 'perform_request',
|
298 | 8f5d38df | Stavros Sachtouris | return_value=self.FR()) as perform_req: |
299 | 8f5d38df | Stavros Sachtouris | r = self.client.list_flavors()
|
300 | 8f5d38df | Stavros Sachtouris | self.assertEqual(self.client.http_client.url, self.url) |
301 | 8f5d38df | Stavros Sachtouris | self.assertEqual(self.client.http_client.path, '/flavors') |
302 | 8f5d38df | Stavros Sachtouris | (method, data, a_headers, a_params) = perform_req.call_args[0]
|
303 | 8f5d38df | Stavros Sachtouris | self.assert_dicts_are_equal(dict(values=r), flavor_list['flavors']) |
304 | 8f5d38df | Stavros Sachtouris | r = self.client.list_flavors(detail=True) |
305 | 8f5d38df | Stavros Sachtouris | self.assertEqual(self.client.http_client.url, self.url) |
306 | 8f5d38df | Stavros Sachtouris | self.assertEqual(self.client.http_client.path, '/flavors/detail') |
307 | c1004a00 | Stavros Sachtouris | |
308 | 8f5d38df | Stavros Sachtouris | """
|
309 | c1004a00 | Stavros Sachtouris | def test_get_flavor_details(self):
|
310 | c1004a00 | Stavros Sachtouris | r = self.client.get_flavor_details(self.flavorid)
|
311 | 257b931a | Stavros Sachtouris | self.assert_dicts_are_equal(self._flavor_details, r)
|
312 | c1004a00 | Stavros Sachtouris |
|
313 | c1004a00 | Stavros Sachtouris | def test_list_images(self):
|
314 | c1004a00 | Stavros Sachtouris | r = self.client.list_images()
|
315 | c1004a00 | Stavros Sachtouris | self.assertTrue(len(r) > 1)
|
316 | c1004a00 | Stavros Sachtouris | r = self.client.list_images(detail=True)
|
317 | c1004a00 | Stavros Sachtouris | for detailed_img in r:
|
318 | c1004a00 | Stavros Sachtouris | if detailed_img['id'] == self.img:
|
319 | c1004a00 | Stavros Sachtouris | break
|
320 | 257b931a | Stavros Sachtouris | self.assert_dicts_are_equal(detailed_img, self.img_details)
|
321 | c1004a00 | Stavros Sachtouris |
|
322 | c1004a00 | Stavros Sachtouris | def test_get_image_details(self):
|
323 | c1004a00 | Stavros Sachtouris | r = self.client.get_image_details(self.img)
|
324 | 257b931a | Stavros Sachtouris | self.assert_dicts_are_equal(r, self.img_details)
|
325 | c1004a00 | Stavros Sachtouris |
|
326 | c1004a00 | Stavros Sachtouris | def test_get_image_metadata(self):
|
327 | c1004a00 | Stavros Sachtouris | r = self.client.get_image_metadata(self.img)
|
328 | 257b931a | Stavros Sachtouris | self.assert_dicts_are_equal(
|
329 | c1004a00 | Stavros Sachtouris | self.img_details['metadata']['values'], r)
|
330 | c1004a00 | Stavros Sachtouris | for key, val in self.img_details['metadata']['values'].items():
|
331 | c1004a00 | Stavros Sachtouris | r = self.client.get_image_metadata(self.img, key)
|
332 | c1004a00 | Stavros Sachtouris | self.assertEqual(r[key], val)
|
333 | c1004a00 | Stavros Sachtouris |
|
334 | c1004a00 | Stavros Sachtouris | def test_shutdown_server(self):
|
335 | c1004a00 | Stavros Sachtouris | self.client.shutdown_server(self.server1['id'])
|
336 | c1004a00 | Stavros Sachtouris | self._wait_for_status(self.server1['id'], 'ACTIVE')
|
337 | c1004a00 | Stavros Sachtouris | r = self.client.get_server_details(self.server1['id'])
|
338 | c1004a00 | Stavros Sachtouris | self.assertEqual(r['status'], 'STOPPED')
|
339 | c1004a00 | Stavros Sachtouris |
|
340 | c1004a00 | Stavros Sachtouris | def test_start_server(self):
|
341 | c1004a00 | Stavros Sachtouris | self.client.start_server(self.server1['id'])
|
342 | c1004a00 | Stavros Sachtouris | self._wait_for_status(self.server1['id'], 'STOPPED')
|
343 | c1004a00 | Stavros Sachtouris | r = self.client.get_server_details(self.server1['id'])
|
344 | c1004a00 | Stavros Sachtouris | self.assertEqual(r['status'], 'ACTIVE')
|
345 | c1004a00 | Stavros Sachtouris |
|
346 | c1004a00 | Stavros Sachtouris | def test_get_server_console(self):
|
347 | c1004a00 | Stavros Sachtouris | r = self.client.get_server_console(self.server2['id'])
|
348 | c1004a00 | Stavros Sachtouris | self.assertTrue('host' in r)
|
349 | c1004a00 | Stavros Sachtouris | self.assertTrue('password' in r)
|
350 | c1004a00 | Stavros Sachtouris | self.assertTrue('port' in r)
|
351 | c1004a00 | Stavros Sachtouris | self.assertTrue('type' in r)
|
352 | c1004a00 | Stavros Sachtouris |
|
353 | c1004a00 | Stavros Sachtouris | def test_get_firewall_profile(self):
|
354 | c1004a00 | Stavros Sachtouris | self._wait_for_status(self.server1['id'], 'BUILD')
|
355 | c1004a00 | Stavros Sachtouris | fprofile = self.client.get_firewall_profile(self.server1['id'])
|
356 | c1004a00 | Stavros Sachtouris | self.assertTrue(fprofile in self.PROFILES)
|
357 | c1004a00 | Stavros Sachtouris |
|
358 | c1004a00 | Stavros Sachtouris | def test_set_firewall_profile(self):
|
359 | c1004a00 | Stavros Sachtouris | self._wait_for_status(self.server1['id'], 'BUILD')
|
360 | c1004a00 | Stavros Sachtouris | PROFILES = ['DISABLED', 'ENABLED', 'DISABLED', 'PROTECTED']
|
361 | c1004a00 | Stavros Sachtouris | fprofile = self.client.get_firewall_profile(self.server1['id'])
|
362 | c1004a00 | Stavros Sachtouris | print('')
|
363 | c1004a00 | Stavros Sachtouris | count_success = 0
|
364 | c1004a00 | Stavros Sachtouris | for counter, fprofile in enumerate(PROFILES):
|
365 | c1004a00 | Stavros Sachtouris | npos = counter + 1
|
366 | c1004a00 | Stavros Sachtouris | try:
|
367 | c1004a00 | Stavros Sachtouris | nprofile = PROFILES[npos]
|
368 | c1004a00 | Stavros Sachtouris | except IndexError:
|
369 | c1004a00 | Stavros Sachtouris | nprofile = PROFILES[0]
|
370 | c1004a00 | Stavros Sachtouris | print('\tprofile swap %s: %s -> %s' % (npos, fprofile, nprofile))
|
371 | c1004a00 | Stavros Sachtouris | self.client.set_firewall_profile(self.server1['id'], nprofile)
|
372 | c1004a00 | Stavros Sachtouris | time.sleep(0.5)
|
373 | c1004a00 | Stavros Sachtouris | self.client.reboot_server(self.server1['id'], hard=True)
|
374 | c1004a00 | Stavros Sachtouris | time.sleep(1)
|
375 | c1004a00 | Stavros Sachtouris | self._wait_for_status(self.server1['id'], 'REBOOT')
|
376 | c1004a00 | Stavros Sachtouris | time.sleep(0.5)
|
377 | c1004a00 | Stavros Sachtouris | changed = self.client.get_firewall_profile(self.server1['id'])
|
378 | c1004a00 | Stavros Sachtouris | try:
|
379 | c1004a00 | Stavros Sachtouris | self.assertEqual(changed, nprofile)
|
380 | c1004a00 | Stavros Sachtouris | except AssertionError as err:
|
381 | c1004a00 | Stavros Sachtouris | if count_success:
|
382 | c1004a00 | Stavros Sachtouris | print('\tFAIL in swap #%s' % npos)
|
383 | c1004a00 | Stavros Sachtouris | break
|
384 | c1004a00 | Stavros Sachtouris | else:
|
385 | c1004a00 | Stavros Sachtouris | raise err
|
386 | c1004a00 | Stavros Sachtouris | count_success += 1
|
387 | c1004a00 | Stavros Sachtouris |
|
388 | c1004a00 | Stavros Sachtouris | def test_get_server_stats(self):
|
389 | c1004a00 | Stavros Sachtouris | r = self.client.get_server_stats(self.server1['id'])
|
390 | c1004a00 | Stavros Sachtouris | it = ('cpuBar', 'cpuTimeSeries', 'netBar', 'netTimeSeries', 'refresh')
|
391 | c1004a00 | Stavros Sachtouris | for term in it:
|
392 | c1004a00 | Stavros Sachtouris | self.assertTrue(term in r)
|
393 | c1004a00 | Stavros Sachtouris |
|
394 | c1004a00 | Stavros Sachtouris | def test_create_network(self):
|
395 | c1004a00 | Stavros Sachtouris | print('\twith no params')
|
396 | c1004a00 | Stavros Sachtouris | self.network1 = self._create_network(self.netname1)
|
397 | c1004a00 | Stavros Sachtouris | self._wait_for_network(self.network1['id'], 'ACTIVE')
|
398 | c1004a00 | Stavros Sachtouris | n1id = self.network1['id']
|
399 | c1004a00 | Stavros Sachtouris | self.network1 = self.client.get_network_details(n1id)
|
400 | c1004a00 | Stavros Sachtouris | nets = self.client.list_networks(self.network1['id'])
|
401 | c1004a00 | Stavros Sachtouris | chosen = [net for net in nets if net['id'] == n1id][0]
|
402 | c1004a00 | Stavros Sachtouris | chosen.pop('updated')
|
403 | c1004a00 | Stavros Sachtouris | net1 = dict(self.network1)
|
404 | c1004a00 | Stavros Sachtouris | net1.pop('updated')
|
405 | 257b931a | Stavros Sachtouris | self.assert_dicts_are_equal(chosen, net1)
|
406 | c1004a00 | Stavros Sachtouris | for param, val in dict(
|
407 | c1004a00 | Stavros Sachtouris | cidr='192.168.0.0/24',
|
408 | c1004a00 | Stavros Sachtouris | gateway='192.168.0.1',
|
409 | c1004a00 | Stavros Sachtouris | type='MAC_FILTERED',
|
410 | c1004a00 | Stavros Sachtouris | dhcp=True).items():
|
411 | c1004a00 | Stavros Sachtouris | print('\tdelete %s to avoid max net limit' % n1id)
|
412 | c1004a00 | Stavros Sachtouris | self._delete_network(n1id)
|
413 | c1004a00 | Stavros Sachtouris | kwargs = {param: val}
|
414 | c1004a00 | Stavros Sachtouris | print('\twith %s=%s' % (param, val))
|
415 | c1004a00 | Stavros Sachtouris | self.network1 = self._create_network(self.netname1, **kwargs)
|
416 | c1004a00 | Stavros Sachtouris | n1id = self.network1['id']
|
417 | c1004a00 | Stavros Sachtouris | self._wait_for_network(n1id, 'ACTIVE')
|
418 | c1004a00 | Stavros Sachtouris | self.network1 = self.client.get_network_details(n1id)
|
419 | c1004a00 | Stavros Sachtouris | self.assertEqual(self.network1[param], val)
|
420 | c1004a00 | Stavros Sachtouris |
|
421 | c1004a00 | Stavros Sachtouris | def test_connect_server(self):
|
422 | c1004a00 | Stavros Sachtouris | self.client.connect_server(self.server1['id'], self.network1['id'])
|
423 | c1004a00 | Stavros Sachtouris | self.assertTrue(self._wait_for_nic(
|
424 | c1004a00 | Stavros Sachtouris | self.network1['id'],
|
425 | c1004a00 | Stavros Sachtouris | self.server1['id']))
|
426 | c1004a00 | Stavros Sachtouris |
|
427 | c1004a00 | Stavros Sachtouris | def test_disconnect_server(self):
|
428 | c1004a00 | Stavros Sachtouris | self.client.disconnect_server(self.server1['id'], self.network1['id'])
|
429 | c1004a00 | Stavros Sachtouris | self.assertTrue(self._wait_for_nic(
|
430 | c1004a00 | Stavros Sachtouris | self.network1['id'],
|
431 | c1004a00 | Stavros Sachtouris | self.server1['id'],
|
432 | c1004a00 | Stavros Sachtouris | in_creation=False))
|
433 | c1004a00 | Stavros Sachtouris |
|
434 | c1004a00 | Stavros Sachtouris | def _test_0260_wait_for_second_network(self):
|
435 | c1004a00 | Stavros Sachtouris | self.server1 = self._create_server(
|
436 | c1004a00 | Stavros Sachtouris | self.servname1,
|
437 | c1004a00 | Stavros Sachtouris | self.flavorid,
|
438 | c1004a00 | Stavros Sachtouris | self.img)
|
439 | c1004a00 | Stavros Sachtouris | self.network2 = self._create_network(self.netname2)
|
440 | c1004a00 | Stavros Sachtouris | self._wait_for_status(self.server1['id'], 'BUILD')
|
441 | c1004a00 | Stavros Sachtouris | self._wait_for_network(self.network2['id'], 'ACTIVE')
|
442 | c1004a00 | Stavros Sachtouris | self._test_0280_list_server_nics()
|
443 | c1004a00 | Stavros Sachtouris |
|
444 | c1004a00 | Stavros Sachtouris | def _test_0280_list_server_nics(self):
|
445 | c1004a00 | Stavros Sachtouris | r = self.client.list_server_nics(self.server1['id'])
|
446 | c1004a00 | Stavros Sachtouris | len0 = len(r)
|
447 | c1004a00 | Stavros Sachtouris | self.client.connect_server(self.server1['id'], self.network2['id'])
|
448 | c1004a00 | Stavros Sachtouris | self.assertTrue(self._wait_for_nic(
|
449 | c1004a00 | Stavros Sachtouris | self.network2['id'],
|
450 | c1004a00 | Stavros Sachtouris | self.server1['id']))
|
451 | c1004a00 | Stavros Sachtouris | r = self.client.list_server_nics(self.server1['id'])
|
452 | c1004a00 | Stavros Sachtouris | self.assertTrue(len(r) > len0)
|
453 | c1004a00 | Stavros Sachtouris |
|
454 | c1004a00 | Stavros Sachtouris | def test_list_networks(self):
|
455 | c1004a00 | Stavros Sachtouris | r = self.client.list_networks()
|
456 | c1004a00 | Stavros Sachtouris | self.assertTrue(len(r) > 1)
|
457 | c1004a00 | Stavros Sachtouris | ids = [net['id'] for net in r]
|
458 | c1004a00 | Stavros Sachtouris | names = [net['name'] for net in r]
|
459 | c1004a00 | Stavros Sachtouris | self.assertTrue('1' in ids)
|
460 | c1004a00 | Stavros Sachtouris | #self.assertTrue('public' in names)
|
461 | c1004a00 | Stavros Sachtouris | self.assertTrue(self.network1['id'] in ids)
|
462 | c1004a00 | Stavros Sachtouris | self.assertTrue(self.network1['name'] in names)
|
463 | c1004a00 | Stavros Sachtouris |
|
464 | c1004a00 | Stavros Sachtouris | r = self.client.list_networks(detail=True)
|
465 | c1004a00 | Stavros Sachtouris | ids = [net['id'] for net in r]
|
466 | c1004a00 | Stavros Sachtouris | names = [net['name'] for net in r]
|
467 | c1004a00 | Stavros Sachtouris | for net in r:
|
468 | c1004a00 | Stavros Sachtouris | self.assertTrue(net['id'] in ids)
|
469 | c1004a00 | Stavros Sachtouris | self.assertTrue(net['name'] in names)
|
470 | c1004a00 | Stavros Sachtouris | for term in ('status', 'updated', 'created'):
|
471 | c1004a00 | Stavros Sachtouris | self.assertTrue(term in net.keys())
|
472 | c1004a00 | Stavros Sachtouris |
|
473 | c1004a00 | Stavros Sachtouris | def test_get_network_details(self):
|
474 | c1004a00 | Stavros Sachtouris | r = self.client.get_network_details(self.network1['id'])
|
475 | c1004a00 | Stavros Sachtouris | net1 = dict(self.network1)
|
476 | c1004a00 | Stavros Sachtouris | net1.pop('status')
|
477 | c1004a00 | Stavros Sachtouris | net1.pop('updated', None)
|
478 | c1004a00 | Stavros Sachtouris | net1.pop('attachments')
|
479 | c1004a00 | Stavros Sachtouris | r.pop('status')
|
480 | c1004a00 | Stavros Sachtouris | r.pop('updated', None)
|
481 | c1004a00 | Stavros Sachtouris | r.pop('attachments')
|
482 | 257b931a | Stavros Sachtouris | self.assert_dicts_are_equal(net1, r)
|
483 | c1004a00 | Stavros Sachtouris |
|
484 | c1004a00 | Stavros Sachtouris | def test_update_network_name(self):
|
485 | c1004a00 | Stavros Sachtouris | updated_name = self.netname2 + '_upd'
|
486 | c1004a00 | Stavros Sachtouris | self.client.update_network_name(self.network2['id'], updated_name)
|
487 | c1004a00 | Stavros Sachtouris |
|
488 | c1004a00 | Stavros Sachtouris | def netwait(wait):
|
489 | c1004a00 | Stavros Sachtouris | r = self.client.get_network_details(self.network2['id'])
|
490 | c1004a00 | Stavros Sachtouris | if r['name'] == updated_name:
|
491 | c1004a00 | Stavros Sachtouris | return
|
492 | c1004a00 | Stavros Sachtouris | time.sleep(wait)
|
493 | c1004a00 | Stavros Sachtouris | self.do_with_progress_bar(
|
494 | c1004a00 | Stavros Sachtouris | netwait,
|
495 | c1004a00 | Stavros Sachtouris | 'Network %s name is changing:' % self.network2['id'],
|
496 | c1004a00 | Stavros Sachtouris | self._waits[:5])
|
497 | c1004a00 | Stavros Sachtouris |
|
498 | c1004a00 | Stavros Sachtouris | r = self.client.get_network_details(self.network2['id'])
|
499 | c1004a00 | Stavros Sachtouris | self.assertEqual(r['name'], updated_name)
|
500 | c1004a00 | Stavros Sachtouris |
|
501 | c1004a00 | Stavros Sachtouris | def test_delete_image(self):
|
502 | c1004a00 | Stavros Sachtouris | images = self.client.list_images()
|
503 | c1004a00 | Stavros Sachtouris | self.client.delete_image(images[2]['id'])
|
504 | c1004a00 | Stavros Sachtouris | try:
|
505 | c1004a00 | Stavros Sachtouris | r = self.client.get_image_details(images[2]['id'], success=(400))
|
506 | c1004a00 | Stavros Sachtouris | except ClientError as err:
|
507 | c1004a00 | Stavros Sachtouris | self.assertEqual(err.status, 404)
|
508 | c1004a00 | Stavros Sachtouris |
|
509 | c1004a00 | Stavros Sachtouris | def test_create_image_metadata(self):
|
510 | c1004a00 | Stavros Sachtouris | r = self.client.create_image_metadata(self.img, 'mykey', 'myval')
|
511 | c1004a00 | Stavros Sachtouris | self.assertEqual(r['mykey'], 'myval')
|
512 | c1004a00 | Stavros Sachtouris |
|
513 | c1004a00 | Stavros Sachtouris | def test_update_image_metadata(self):
|
514 | c1004a00 | Stavros Sachtouris | r = self.client.create_image_metadata(self.img, 'mykey0', 'myval')
|
515 | c1004a00 | Stavros Sachtouris | r = self.client.update_image_metadata(self.img, 'mykey0', 'myval0')
|
516 | c1004a00 | Stavros Sachtouris | self.assertEqual(r['mykey0'], 'myval0')
|
517 | c1004a00 | Stavros Sachtouris |
|
518 | c1004a00 | Stavros Sachtouris | def test_delete_image_metadata(self):
|
519 | c1004a00 | Stavros Sachtouris | self.client.create_image_metadata(self.img, 'mykey1', 'myval1')
|
520 | c1004a00 | Stavros Sachtouris | self.client.delete_image_metadata(self.img, 'mykey1')
|
521 | c1004a00 | Stavros Sachtouris | r = self.client.get_image_metadata(self.img)
|
522 | c1004a00 | Stavros Sachtouris | self.assertNotEqual('mykey1' in r)
|
523 | c1004a00 | Stavros Sachtouris | """ |