Revision 03493855 kamaki/clients/livetest/cyclades.py
b/kamaki/clients/livetest/cyclades.py | ||
---|---|---|
30 | 30 |
# documentation are those of the authors and should not be |
31 | 31 |
# interpreted as representing official policies, either expressed |
32 | 32 |
# or implied, of GRNET S.A. |
33 |
from mock import patch |
|
34 |
from unittest import TestCase |
|
35 | 33 |
|
36 |
from kamaki.clients import ClientError
|
|
34 |
import time
|
|
37 | 35 |
|
36 |
from kamaki.clients import livetest, ClientError |
|
37 |
from kamaki.clients.cyclades import CycladesClient |
|
38 | 38 |
|
39 |
class Cyclades(TestCase): |
|
40 |
"""Set up a Cyclades thorough test""" |
|
39 |
|
|
40 |
class Cyclades(livetest.Generic): |
|
41 |
"""Set up a Cyclades test""" |
|
41 | 42 |
def setUp(self): |
42 |
self.url = 'http://cyclades.example.com' |
|
43 |
self.token = 'cyc14d3s70k3n' |
|
44 |
from kamaki.clients.cyclades import CycladesClient |
|
45 |
self.cyclades = CycladesClient(self.url, self.token) |
|
43 |
|
|
44 |
with open(self['image', 'details']) as f: |
|
45 |
self.img_details = eval(f.read()) |
|
46 |
self.img = self.img_details['id'] |
|
47 |
with open(self['flavor', 'details']) as f: |
|
48 |
self._flavor_details = eval(f.read()) |
|
49 |
self.PROFILES = ('ENABLED', 'DISABLED', 'PROTECTED') |
|
50 |
|
|
51 |
self.servers = {} |
|
52 |
self.now = time.mktime(time.gmtime()) |
|
53 |
self.servname1 = 'serv' + unicode(self.now) |
|
54 |
self.servname2 = self.servname1 + '_v2' |
|
55 |
self.servname1 += '_v1' |
|
56 |
self.flavorid = 1 |
|
57 |
#servers have to be created at the begining... |
|
58 |
self.networks = {} |
|
59 |
self.netname1 = 'net' + unicode(self.now) |
|
60 |
self.netname2 = 'net' + unicode(self.now) + '_v2' |
|
61 |
|
|
62 |
self.client = CycladesClient(self['compute', 'url'], self['token']) |
|
46 | 63 |
|
47 | 64 |
def tearDown(self): |
48 |
pass |
|
65 |
"""Destoy servers used in testing""" |
|
66 |
for net in self.networks.keys(): |
|
67 |
self._delete_network(net) |
|
68 |
for server in self.servers.values(): |
|
69 |
self._delete_server(server['id']) |
|
70 |
print('DEL VM %s (%s)' % (server['id'], server['name'])) |
|
71 |
|
|
72 |
def test_000(self): |
|
73 |
"Prepare a full Cyclades test scenario" |
|
74 |
self.server1 = self._create_server( |
|
75 |
self.servname1, |
|
76 |
self.flavorid, |
|
77 |
self.img) |
|
78 |
self.server2 = self._create_server( |
|
79 |
self.servname2, |
|
80 |
self.flavorid + 2, |
|
81 |
self.img) |
|
82 |
super(self.__class__, self).test_000() |
|
83 |
|
|
84 |
def _create_server(self, servername, flavorid, imageid, personality=None): |
|
85 |
server = self.client.create_server( |
|
86 |
servername, |
|
87 |
flavorid, |
|
88 |
imageid, |
|
89 |
personality) |
|
90 |
print('CREATE VM %s (%s)' % (server['id'], server['name'])) |
|
91 |
self.servers[servername] = server |
|
92 |
return server |
|
93 |
|
|
94 |
def _delete_server(self, servid): |
|
95 |
try: |
|
96 |
current_state = self.client.get_server_details(servid) |
|
97 |
current_state = current_state['status'] |
|
98 |
if current_state == 'DELETED': |
|
99 |
return |
|
100 |
self.client.delete_server(servid) |
|
101 |
self._wait_for_status(servid, current_state) |
|
102 |
self.client.delete_server(servid) |
|
103 |
except: |
|
104 |
return |
|
105 |
|
|
106 |
def _create_network(self, netname, **kwargs): |
|
107 |
net = self.client.create_network(netname, **kwargs) |
|
108 |
self.networks[net['id']] = net |
|
109 |
return net |
|
110 |
|
|
111 |
def _delete_network(self, netid): |
|
112 |
if not netid in self.networks: |
|
113 |
return None |
|
114 |
print('Disconnect nics of network %s' % netid) |
|
115 |
self.client.disconnect_network_nics(netid) |
|
116 |
|
|
117 |
def netwait(wait): |
|
118 |
try: |
|
119 |
self.client.delete_network(netid) |
|
120 |
except ClientError: |
|
121 |
time.sleep(wait) |
|
122 |
self.do_with_progress_bar( |
|
123 |
netwait, |
|
124 |
'Delete network %s' % netid, |
|
125 |
self._waits[:7]) |
|
126 |
return self.networks.pop(netid) |
|
127 |
|
|
128 |
def _wait_for_network(self, netid, status): |
|
129 |
|
|
130 |
def netwait(wait): |
|
131 |
r = self.client.get_network_details(netid) |
|
132 |
if r['status'] == status: |
|
133 |
return |
|
134 |
time.sleep(wait) |
|
135 |
self.do_with_progress_bar( |
|
136 |
netwait, |
|
137 |
'Wait network %s to reach status %s' % (netid, status), |
|
138 |
self._waits[:5]) |
|
139 |
|
|
140 |
def _wait_for_nic(self, netid, servid, in_creation=True): |
|
141 |
self._wait_for_network(netid, 'ACTIVE') |
|
142 |
|
|
143 |
def nicwait(wait): |
|
144 |
nics = self.client.list_server_nics(servid) |
|
145 |
for net in nics: |
|
146 |
found_nic = net['network_id'] == netid |
|
147 |
if (in_creation and found_nic) or not ( |
|
148 |
in_creation or found_nic): |
|
149 |
return |
|
150 |
time.sleep(wait) |
|
151 |
self.do_with_progress_bar( |
|
152 |
nicwait, |
|
153 |
'Wait nic-%s-%s to %sconnect' % ( |
|
154 |
netid, |
|
155 |
servid, |
|
156 |
'' if in_creation else 'dis'), |
|
157 |
self._waits[:5]) |
|
158 |
for net in self.client.list_server_nics(servid): |
|
159 |
if netid == net['network_id']: |
|
160 |
return True |
|
161 |
return False |
|
162 |
|
|
163 |
def _has_status(self, servid, status): |
|
164 |
r = self.client.get_server_details(servid) |
|
165 |
return r['status'] == status |
|
166 |
|
|
167 |
def _wait_for_status(self, servid, status): |
|
168 |
(wait_bar, wait_cb) = self._safe_progress_bar( |
|
169 |
'Server %s in %s' % (servid, status)) |
|
170 |
self.client.wait_server(servid, status, wait_cb=wait_cb) |
|
171 |
self._safe_progress_bar_finish(wait_bar) |
|
49 | 172 |
|
50 |
""" |
|
51 | 173 |
def test_parallel_creation(self): |
52 |
""test create with multiple threads |
|
174 |
"""test create with multiple threads
|
|
53 | 175 |
Do not use this in regular livetest |
54 |
"" |
|
176 |
"""
|
|
55 | 177 |
from kamaki.clients import SilentEvent |
56 | 178 |
c1 = SilentEvent( |
57 | 179 |
self._create_server, |
... | ... | |
103 | 225 |
c8.start() |
104 | 226 |
|
105 | 227 |
def test_create_server(self): |
106 |
""Test create_server""
|
|
228 |
"""Test create_server"""
|
|
107 | 229 |
self.server1 = self._create_server( |
108 | 230 |
self.servname1, |
109 | 231 |
self.flavorid, |
... | ... | |
118 | 240 |
self.assertEqual(self.server1["status"], "BUILD") |
119 | 241 |
|
120 | 242 |
def test_list_servers(self): |
121 |
""Test list servers""
|
|
243 |
"""Test list servers"""
|
|
122 | 244 |
self.server1 = self._create_server( |
123 | 245 |
self.servname1, |
124 | 246 |
self.flavorid, |
... | ... | |
133 | 255 |
servers = self.client.list_servers() |
134 | 256 |
dservers = self.client.list_servers(detail=True) |
135 | 257 |
|
136 |
""detailed and simple are same size""
|
|
258 |
"""detailed and simple are same size"""
|
|
137 | 259 |
self.assertEqual(len(dservers), len(servers)) |
138 | 260 |
for i in range(len(servers)): |
139 | 261 |
for field in ( |
... | ... | |
147 | 269 |
self.assertFalse(field in servers[i]) |
148 | 270 |
self.assertTrue(field in dservers[i]) |
149 | 271 |
|
150 |
""detailed and simple contain same names""
|
|
272 |
"""detailed and simple contain same names"""
|
|
151 | 273 |
names = sorted(map(lambda x: x["name"], servers)) |
152 | 274 |
dnames = sorted(map(lambda x: x["name"], dservers)) |
153 | 275 |
self.assertEqual(names, dnames) |
154 | 276 |
|
155 | 277 |
def _test_0030_wait_test_servers_to_build(self): |
156 |
""Pseudo-test to wait for VMs to load""
|
|
278 |
"""Pseudo-test to wait for VMs to load"""
|
|
157 | 279 |
print('') |
158 | 280 |
self._wait_for_status(self.server1['id'], 'BUILD') |
159 | 281 |
self._wait_for_status(self.server2['id'], 'BUILD') |
160 | 282 |
|
161 | 283 |
def test_get_server_details(self): |
162 |
""Test get_server_details""
|
|
284 |
"""Test get_server_details"""
|
|
163 | 285 |
self.server1 = self._create_server( |
164 | 286 |
self.servname1, |
165 | 287 |
self.flavorid, |
... | ... | |
175 | 297 |
self.assertEqual(r["status"], "ACTIVE") |
176 | 298 |
|
177 | 299 |
def test_update_server_name(self): |
178 |
""Test update_server_name""
|
|
300 |
"""Test update_server_name"""
|
|
179 | 301 |
self.server1 = self._create_server( |
180 | 302 |
self.servname1, |
181 | 303 |
self.flavorid, |
... | ... | |
194 | 316 |
self.servers[new_name] = changed |
195 | 317 |
|
196 | 318 |
def test_reboot_server(self): |
197 |
""Test reboot server""
|
|
319 |
"""Test reboot server"""
|
|
198 | 320 |
self.server1 = self._create_server( |
199 | 321 |
self.servname1, |
200 | 322 |
self.flavorid, |
... | ... | |
216 | 338 |
self.assertTrue(self._has_status(self.server2['id'], 'REBOOT')) |
217 | 339 |
|
218 | 340 |
def _test_0070_wait_test_servers_to_reboot(self): |
219 |
""Pseudo-test to wait for VMs to load""
|
|
341 |
"""Pseudo-test to wait for VMs to load"""
|
|
220 | 342 |
print('') |
221 | 343 |
self._wait_for_status(self.server1['id'], 'REBOOT') |
222 | 344 |
self._wait_for_status(self.server2['id'], 'REBOOT') |
223 | 345 |
|
224 | 346 |
def test_create_server_metadata(self): |
225 |
""Test create_server_metadata""
|
|
347 |
"""Test create_server_metadata"""
|
|
226 | 348 |
self.server1 = self._create_server( |
227 | 349 |
self.servname1, |
228 | 350 |
self.flavorid, |
... | ... | |
239 | 361 |
self.assert_dicts_are_deeply_equal(r1, r2) |
240 | 362 |
|
241 | 363 |
def test_get_server_metadata(self): |
242 |
""Test get server_metadata""
|
|
364 |
"""Test get server_metadata"""
|
|
243 | 365 |
self.server1 = self._create_server( |
244 | 366 |
self.servname1, |
245 | 367 |
self.flavorid, |
... | ... | |
255 | 377 |
self.assertEqual(r['mymeta_0'], 'val_0') |
256 | 378 |
|
257 | 379 |
def test_update_server_metadata(self): |
258 |
""Test update_server_metadata""
|
|
380 |
"""Test update_server_metadata"""
|
|
259 | 381 |
self.server1 = self._create_server( |
260 | 382 |
self.servname1, |
261 | 383 |
self.flavorid, |
... | ... | |
274 | 396 |
self.assertTrue(r2['mymeta3'], 'val3') |
275 | 397 |
|
276 | 398 |
def test_delete_server_metadata(self): |
277 |
""Test delete_server_metadata""
|
|
399 |
"""Test delete_server_metadata"""
|
|
278 | 400 |
self.server1 = self._create_server( |
279 | 401 |
self.servname1, |
280 | 402 |
self.flavorid, |
... | ... | |
295 | 417 |
self.assertEqual(err.status, 404) |
296 | 418 |
|
297 | 419 |
def test_list_flavors(self): |
298 |
""Test flavors_get""
|
|
420 |
"""Test flavors_get"""
|
|
299 | 421 |
self._test_0120_list_flavors() |
300 | 422 |
|
301 | 423 |
def _test_0120_list_flavors(self): |
... | ... | |
305 | 427 |
self.assertTrue('SNF:disk_template' in r[0]) |
306 | 428 |
|
307 | 429 |
def test_get_flavor_details(self): |
308 |
""Test test_get_flavor_details""
|
|
430 |
"""Test test_get_flavor_details"""
|
|
309 | 431 |
self._test_0130_get_flavor_details() |
310 | 432 |
|
311 | 433 |
def _test_0130_get_flavor_details(self): |
... | ... | |
313 | 435 |
self.assert_dicts_are_deeply_equal(self._flavor_details, r) |
314 | 436 |
|
315 | 437 |
def test_list_images(self): |
316 |
""Test list_images""
|
|
438 |
"""Test list_images"""
|
|
317 | 439 |
self._test_0140_list_images() |
318 | 440 |
|
319 | 441 |
def _test_0140_list_images(self): |
... | ... | |
326 | 448 |
self.assert_dicts_are_deeply_equal(detailed_img, self.img_details) |
327 | 449 |
|
328 | 450 |
def test_get_image_details(self): |
329 |
""Test image_details""
|
|
451 |
"""Test image_details"""
|
|
330 | 452 |
self._test_0150_get_image_details() |
331 | 453 |
|
332 | 454 |
def _test_0150_get_image_details(self): |
... | ... | |
334 | 456 |
self.assert_dicts_are_deeply_equal(r, self.img_details) |
335 | 457 |
|
336 | 458 |
def test_get_image_metadata(self): |
337 |
""Test get_image_metadata""
|
|
459 |
"""Test get_image_metadata"""
|
|
338 | 460 |
self._test_0160_get_image_metadata() |
339 | 461 |
|
340 | 462 |
def _test_0160_get_image_metadata(self): |
... | ... | |
346 | 468 |
self.assertEqual(r[key], val) |
347 | 469 |
|
348 | 470 |
def test_shutdown_server(self): |
349 |
""Test shutdown_server""
|
|
471 |
"""Test shutdown_server"""
|
|
350 | 472 |
self.server1 = self._create_server( |
351 | 473 |
self.servname1, |
352 | 474 |
self.flavorid, |
... | ... | |
361 | 483 |
self.assertEqual(r['status'], 'STOPPED') |
362 | 484 |
|
363 | 485 |
def test_start_server(self): |
364 |
""Test start_server""
|
|
486 |
"""Test start_server"""
|
|
365 | 487 |
self.server1 = self._create_server( |
366 | 488 |
self.servname1, |
367 | 489 |
self.flavorid, |
... | ... | |
378 | 500 |
self.assertEqual(r['status'], 'ACTIVE') |
379 | 501 |
|
380 | 502 |
def test_get_server_console(self): |
381 |
""Test get_server_console""
|
|
503 |
"""Test get_server_console"""
|
|
382 | 504 |
self.server2 = self._create_server( |
383 | 505 |
self.servname2, |
384 | 506 |
self.flavorid + 2, |
... | ... | |
394 | 516 |
self.assertTrue('type' in r) |
395 | 517 |
|
396 | 518 |
def test_get_firewall_profile(self): |
397 |
""Test get_firewall_profile""
|
|
519 |
"""Test get_firewall_profile"""
|
|
398 | 520 |
self.server1 = self._create_server( |
399 | 521 |
self.servname1, |
400 | 522 |
self.flavorid, |
... | ... | |
407 | 529 |
self.assertTrue(fprofile in self.PROFILES) |
408 | 530 |
|
409 | 531 |
def test_set_firewall_profile(self): |
410 |
""Test set_firewall_profile""
|
|
532 |
"""Test set_firewall_profile"""
|
|
411 | 533 |
self.server1 = self._create_server( |
412 | 534 |
self.servname1, |
413 | 535 |
self.flavorid, |
... | ... | |
459 | 581 |
self.assertTrue(term in r) |
460 | 582 |
|
461 | 583 |
def test_create_network(self): |
462 |
""Test create_network""
|
|
584 |
"""Test create_network"""
|
|
463 | 585 |
self._test_0230_create_network() |
464 | 586 |
|
465 | 587 |
def _test_0230_create_network(self): |
... | ... | |
490 | 612 |
self.assertEqual(self.network1[param], val) |
491 | 613 |
|
492 | 614 |
def test_connect_server(self): |
493 |
""Test connect_server""
|
|
615 |
"""Test connect_server"""
|
|
494 | 616 |
self.server1 = self._create_server( |
495 | 617 |
self.servname1, |
496 | 618 |
self.flavorid, |
... | ... | |
507 | 629 |
self.server1['id'])) |
508 | 630 |
|
509 | 631 |
def test_disconnect_server(self): |
510 |
""Test disconnect_server""
|
|
632 |
"""Test disconnect_server"""
|
|
511 | 633 |
self.test_connect_server() |
512 | 634 |
self._test_0250_disconnect_server() |
513 | 635 |
|
... | ... | |
523 | 645 |
self._wait_for_network(self.network2['id'], 'ACTIVE') |
524 | 646 |
|
525 | 647 |
def test_list_server_nics(self): |
526 |
""Test list_server_nics""
|
|
648 |
"""Test list_server_nics"""
|
|
527 | 649 |
self.server1 = self._create_server( |
528 | 650 |
self.servname1, |
529 | 651 |
self.flavorid, |
... | ... | |
544 | 666 |
self.assertTrue(len(r) > len0) |
545 | 667 |
|
546 | 668 |
def test_list_networks(self): |
547 |
""Test list_network""
|
|
669 |
"""Test list_network"""
|
|
548 | 670 |
self.network1 = self._create_network(self.netname1) |
549 | 671 |
self._wait_for_network(self.network1['id'], 'ACTIVE') |
550 | 672 |
self._test_0290_list_networks() |
... | ... | |
569 | 691 |
self.assertTrue(term in net.keys()) |
570 | 692 |
|
571 | 693 |
def test_get_network_details(self): |
694 |
"""Test get_network_details""" |
|
572 | 695 |
self.network1 = self._create_network(self.netname1) |
573 | 696 |
self._test_0300_get_network_details() |
574 | 697 |
|
... | ... | |
604 | 727 |
r = self.client.get_network_details(self.network2['id']) |
605 | 728 |
self.assertEqual(r['name'], updated_name) |
606 | 729 |
|
607 |
"" Don't have auth to test this |
|
730 |
""" Don't have auth to test this
|
|
608 | 731 |
def test_delete_image(self): |
609 | 732 |
""Test delete_image"" |
610 | 733 |
self._test_0330_delete_image() |
Also available in: Unified diff