Revision 03493855
b/kamaki/clients/compute_rest_api.py | ||
---|---|---|
92 | 92 |
:returns: request response |
93 | 93 |
""" |
94 | 94 |
data = json_data |
95 |
if json_data is not None:
|
|
95 |
if json_data: |
|
96 | 96 |
data = json.dumps(json_data) |
97 | 97 |
self.set_header('Content-Type', 'application/json') |
98 | 98 |
self.set_header('Content-Length', len(data)) |
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() |
b/kamaki/clients/test/__init__.py | ||
---|---|---|
35 | 35 |
from time import sleep |
36 | 36 |
|
37 | 37 |
from kamaki.clients.test.astakos import Astakos |
38 |
#from kamaki.clients.test.cyclades import Cyclades
|
|
38 |
from kamaki.clients.test.cyclades import Cyclades |
|
39 | 39 |
from kamaki.clients.test.image import Image |
40 | 40 |
#from kamaki.clients.test.pithos import Pithos |
41 | 41 |
|
... | ... | |
64 | 64 |
while self.can_finish < methodid and wait < 4: |
65 | 65 |
sleep(wait) |
66 | 66 |
wait = 2 * wait |
67 |
self._value = methodid |
|
67 | 68 |
self.assertTrue(wait < 4) |
68 | 69 |
|
69 | 70 |
def setUp(self): |
70 | 71 |
from kamaki.clients import SilentEvent |
71 | 72 |
self.SE = SilentEvent |
72 | 73 |
|
73 |
def test_parallel(self):
|
|
74 |
def test_threads(self):
|
|
74 | 75 |
threads = [] |
75 | 76 |
for i in range(4): |
76 | 77 |
threads.append(self.SE(self.thread_content, i)) |
b/kamaki/clients/test/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, Mock |
|
34 |
from unittest import TestCase |
|
35 |
from json import loads |
|
36 |
|
|
37 |
from kamaki.clients import Client, ClientError |
|
38 |
|
|
39 |
img_ref = "1m4g3-r3f3r3nc3" |
|
40 |
vm_name = "my new VM" |
|
41 |
fid = 42 |
|
42 |
vm_send = dict(server=dict( |
|
43 |
flavorRef=fid, |
|
44 |
name=vm_name, |
|
45 |
imageRef=img_ref, |
|
46 |
metadata=dict(os="debian", users="root"))) |
|
47 |
vm_recv = dict(server=dict( |
|
48 |
status="BUILD", |
|
49 |
updated="2013-03-01T10:04:00.637152+00:00", |
|
50 |
hostId="", |
|
51 |
name=vm_name, imageRef=img_ref, |
|
52 |
created="2013-03-01T10:04:00.087324+00:00", |
|
53 |
flavorRef=fid, |
|
54 |
adminPass="n0n3sh@11p@55", |
|
55 |
suspended=False, |
|
56 |
progress=0, |
|
57 |
id=31173, |
|
58 |
metadata=dict(values=dict(os="debian", users="root")))) |
|
59 |
img_recv = dict(image=dict( |
|
60 |
status="ACTIVE", |
|
61 |
updated="2013-02-26T11:10:14+00:00", |
|
62 |
name="Debian Base", |
|
63 |
created="2013-02-26T11:03:29+00:00", |
|
64 |
progress=100, |
|
65 |
id=img_ref, |
|
66 |
metadata=dict(values=dict( |
|
67 |
partition_table="msdos", |
|
68 |
kernel="2.6.32", |
|
69 |
osfamily="linux", |
|
70 |
users="root", |
|
71 |
gui="No GUI", |
|
72 |
sortorder="1", |
|
73 |
os="debian", |
|
74 |
root_partition="1", |
|
75 |
description="Debian 6.0.7 (Squeeze) Base System")))) |
|
76 |
|
|
77 |
|
|
78 |
class Cyclades(TestCase): |
|
79 |
|
|
80 |
def assert_dicts_are_deeply_equal(self, d1, d2): |
|
81 |
for k, v in d1.items(): |
|
82 |
self.assertTrue(k in d2) |
|
83 |
if isinstance(v, dict): |
|
84 |
self.assert_dicts_are_deeply_equal(v, d2[k]) |
|
85 |
else: |
|
86 |
self.assertEqual(unicode(v), unicode(d2[k])) |
|
87 |
|
|
88 |
class FR(object): |
|
89 |
"""FR stands for Fake Response""" |
|
90 |
json = vm_recv |
|
91 |
headers = {} |
|
92 |
content = json |
|
93 |
status = None |
|
94 |
status_code = 200 |
|
95 |
|
|
96 |
def release(self): |
|
97 |
pass |
|
33 | 98 |
|
34 |
import time |
|
35 |
|
|
36 |
from kamaki.clients import livetest, ClientError |
|
37 |
from kamaki.clients.cyclades import CycladesClient |
|
38 |
|
|
39 |
|
|
40 |
class Cyclades(livetest.Generic): |
|
41 | 99 |
"""Set up a Cyclades thorough test""" |
42 | 100 |
def setUp(self): |
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']) |
|
101 |
self.url = 'http://cyclades.example.com' |
|
102 |
self.token = 'cyc14d3s70k3n' |
|
103 |
from kamaki.clients.cyclades import CycladesClient |
|
104 |
self.client = CycladesClient(self.url, self.token) |
|
105 |
from kamaki.clients.connection.kamakicon import KamakiHTTPConnection |
|
106 |
self.C = KamakiHTTPConnection |
|
63 | 107 |
|
64 | 108 |
def tearDown(self): |
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) |
|
172 |
|
|
173 |
def test_parallel_creation(self): |
|
174 |
"""test create with multiple threads |
|
175 |
Do not use this in regular livetest |
|
176 |
""" |
|
177 |
from kamaki.clients import SilentEvent |
|
178 |
c1 = SilentEvent( |
|
179 |
self._create_server, |
|
180 |
self.servname1, |
|
181 |
self.flavorid, |
|
182 |
self.img) |
|
183 |
c2 = SilentEvent( |
|
184 |
self._create_server, |
|
185 |
self.servname2, |
|
186 |
self.flavorid + 2, |
|
187 |
self.img) |
|
188 |
c3 = SilentEvent( |
|
189 |
self._create_server, |
|
190 |
self.servname1, |
|
191 |
self.flavorid, |
|
192 |
self.img) |
|
193 |
c4 = SilentEvent( |
|
194 |
self._create_server, |
|
195 |
self.servname2, |
|
196 |
self.flavorid + 2, |
|
197 |
self.img) |
|
198 |
c5 = SilentEvent( |
|
199 |
self._create_server, |
|
200 |
self.servname1, |
|
201 |
self.flavorid, |
|
202 |
self.img) |
|
203 |
c6 = SilentEvent( |
|
204 |
self._create_server, |
|
205 |
self.servname2, |
|
206 |
self.flavorid + 2, |
|
207 |
self.img) |
|
208 |
c7 = SilentEvent( |
|
209 |
self._create_server, |
|
210 |
self.servname1, |
|
211 |
self.flavorid, |
|
212 |
self.img) |
|
213 |
c8 = SilentEvent( |
|
214 |
self._create_server, |
|
215 |
self.servname2, |
|
216 |
self.flavorid + 2, |
|
217 |
self.img) |
|
218 |
c1.start() |
|
219 |
c2.start() |
|
220 |
c3.start() |
|
221 |
c4.start() |
|
222 |
c5.start() |
|
223 |
c6.start() |
|
224 |
c7.start() |
|
225 |
c8.start() |
|
109 |
pass |
|
226 | 110 |
|
227 | 111 |
def test_create_server(self): |
228 |
"""Test create_server""" |
|
229 |
self.server1 = self._create_server( |
|
230 |
self.servname1, |
|
231 |
self.flavorid, |
|
232 |
self.img) |
|
233 |
self._wait_for_status(self.server1['id'], 'BUILD') |
|
234 |
self._test_0010_create_server() |
|
235 |
|
|
236 |
def _test_0010_create_server(self): |
|
237 |
self.assertEqual(self.server1["name"], self.servname1) |
|
238 |
self.assertEqual(self.server1["flavorRef"], self.flavorid) |
|
239 |
self.assertEqual(self.server1["imageRef"], self.img) |
|
240 |
self.assertEqual(self.server1["status"], "BUILD") |
|
112 |
self.client.get_image_details = Mock(return_value=img_recv['image']) |
|
113 |
with patch.object(Client, 'request', side_effect=ClientError( |
|
114 |
'REQUEST ENTITY TOO LARGE', |
|
115 |
status=403)): |
|
116 |
self.assertRaises( |
|
117 |
ClientError, |
|
118 |
self.client.create_server, |
|
119 |
vm_name, fid, img_ref) |
|
120 |
|
|
121 |
with patch.object( |
|
122 |
self.C, |
|
123 |
'perform_request', |
|
124 |
return_value=self.FR()) as perform_req: |
|
125 |
self.assertRaises( |
|
126 |
ClientError, |
|
127 |
self.client.create_server, |
|
128 |
vm_name, fid, img_ref) |
|
129 |
self.FR.status_code = 202 |
|
130 |
r = self.client.create_server(vm_name, fid, img_ref) |
|
131 |
self.assertEqual(self.client.http_client.url, self.url) |
|
132 |
self.assertEqual(self.client.http_client.path, '/servers') |
|
133 |
(method, data, a_headers, a_params) = perform_req.call_args[0] |
|
134 |
self.assert_dicts_are_deeply_equal(loads(data), vm_send) |
|
135 |
self.assert_dicts_are_deeply_equal(r, vm_recv['server']) |
|
136 |
prsn = 'Personality string (does not work with real servers)' |
|
137 |
self.client.create_server(vm_name, fid, img_ref, prsn) |
|
138 |
(method, data, a_headers, a_params) = perform_req.call_args[0] |
|
139 |
data = loads(data) |
|
140 |
self.assertTrue('personality' in data['server']) |
|
141 |
self.assertEqual(prsn, data['server']['personality']) |
|
241 | 142 |
|
143 |
""" |
|
242 | 144 |
def test_list_servers(self): |
243 |
"""Test list servers""" |
|
244 |
self.server1 = self._create_server( |
|
245 |
self.servname1, |
|
246 |
self.flavorid, |
|
247 |
self.img) |
|
248 |
self.server2 = self._create_server( |
|
249 |
self.servname2, |
|
250 |
self.flavorid + 2, |
|
251 |
self.img) |
|
252 |
self._test_0020_list_servers() |
|
253 | 145 |
|
254 |
def _test_0020_list_servers(self): |
|
255 | 146 |
servers = self.client.list_servers() |
256 | 147 |
dservers = self.client.list_servers(detail=True) |
257 | 148 |
|
258 |
"""detailed and simple are same size"""
|
|
149 |
""detailed and simple are same size""
|
|
259 | 150 |
self.assertEqual(len(dservers), len(servers)) |
260 | 151 |
for i in range(len(servers)): |
261 | 152 |
for field in ( |
... | ... | |
269 | 160 |
self.assertFalse(field in servers[i]) |
270 | 161 |
self.assertTrue(field in dservers[i]) |
271 | 162 |
|
272 |
"""detailed and simple contain same names"""
|
|
163 |
""detailed and simple contain same names""
|
|
273 | 164 |
names = sorted(map(lambda x: x["name"], servers)) |
274 | 165 |
dnames = sorted(map(lambda x: x["name"], dservers)) |
275 | 166 |
self.assertEqual(names, dnames) |
276 | 167 |
|
277 | 168 |
def _test_0030_wait_test_servers_to_build(self): |
278 |
"""Pseudo-test to wait for VMs to load""" |
|
279 |
print('') |
|
280 |
self._wait_for_status(self.server1['id'], 'BUILD') |
|
281 |
self._wait_for_status(self.server2['id'], 'BUILD') |
|
282 |
|
|
283 |
def test_get_server_details(self): |
|
284 |
"""Test get_server_details""" |
|
285 | 169 |
self.server1 = self._create_server( |
286 | 170 |
self.servname1, |
287 | 171 |
self.flavorid, |
... | ... | |
290 | 174 |
self._test_0040_get_server_details() |
291 | 175 |
|
292 | 176 |
def _test_0040_get_server_details(self): |
293 |
r = self.client.get_server_details(self.server1['id']) |
|
294 |
self.assertEqual(r["name"], self.servname1) |
|
295 |
self.assertEqual(r["flavorRef"], self.flavorid) |
|
296 |
self.assertEqual(r["imageRef"], self.img) |
|
297 |
self.assertEqual(r["status"], "ACTIVE") |
|
298 |
|
|
299 |
def test_update_server_name(self): |
|
300 |
"""Test update_server_name""" |
|
301 | 177 |
self.server1 = self._create_server( |
302 | 178 |
self.servname1, |
303 | 179 |
self.flavorid, |
... | ... | |
316 | 192 |
self.servers[new_name] = changed |
317 | 193 |
|
318 | 194 |
def test_reboot_server(self): |
319 |
"""Test reboot server""" |
|
320 |
self.server1 = self._create_server( |
|
321 |
self.servname1, |
|
322 |
self.flavorid, |
|
323 |
self.img) |
|
324 |
self._wait_for_status(self.server1['id'], 'BUILD') |
|
325 |
self.server2 = self._create_server( |
|
326 |
self.servname2, |
|
327 |
self.flavorid + 1, |
|
328 |
self.img) |
|
329 |
self._wait_for_status(self.server2['id'], 'BUILD') |
|
330 |
self._test_0060_reboot_server() |
|
331 |
self._wait_for_status(self.server1['id'], 'REBOOT') |
|
332 |
self._wait_for_status(self.server2['id'], 'REBOOT') |
|
333 |
|
|
334 |
def _test_0060_reboot_server(self): |
|
335 |
self.client.reboot_server(self.server1['id']) |
|
336 |
self.assertTrue(self._has_status(self.server1['id'], 'REBOOT')) |
|
337 |
self.client.reboot_server(self.server2['id'], hard=True) |
|
338 |
self.assertTrue(self._has_status(self.server2['id'], 'REBOOT')) |
|
339 |
|
|
340 |
def _test_0070_wait_test_servers_to_reboot(self): |
|
341 |
"""Pseudo-test to wait for VMs to load""" |
|
342 | 195 |
print('') |
343 | 196 |
self._wait_for_status(self.server1['id'], 'REBOOT') |
344 | 197 |
self._wait_for_status(self.server2['id'], 'REBOOT') |
345 | 198 |
|
346 | 199 |
def test_create_server_metadata(self): |
347 |
"""Test create_server_metadata""" |
|
348 |
self.server1 = self._create_server( |
|
349 |
self.servname1, |
|
350 |
self.flavorid, |
|
351 |
self.img) |
|
352 |
self._test_0080_create_server_metadata() |
|
353 |
|
|
354 |
def _test_0080_create_server_metadata(self): |
|
355 | 200 |
r1 = self.client.create_server_metadata( |
356 | 201 |
self.server1['id'], |
357 | 202 |
'mymeta', |
... | ... | |
361 | 206 |
self.assert_dicts_are_deeply_equal(r1, r2) |
362 | 207 |
|
363 | 208 |
def test_get_server_metadata(self): |
364 |
"""Test get server_metadata""" |
|
365 |
self.server1 = self._create_server( |
|
366 |
self.servname1, |
|
367 |
self.flavorid, |
|
368 |
self.img) |
|
369 |
self._test_0090_get_server_metadata() |
|
370 |
|
|
371 |
def _test_0090_get_server_metadata(self): |
|
372 | 209 |
self.client.create_server_metadata( |
373 | 210 |
self.server1['id'], |
374 | 211 |
'mymeta_0', |
... | ... | |
377 | 214 |
self.assertEqual(r['mymeta_0'], 'val_0') |
378 | 215 |
|
379 | 216 |
def test_update_server_metadata(self): |
380 |
"""Test update_server_metadata""" |
|
381 |
self.server1 = self._create_server( |
|
382 |
self.servname1, |
|
383 |
self.flavorid, |
|
384 |
self.img) |
|
385 |
self._test_0100_update_server_metadata() |
|
386 |
|
|
387 |
def _test_0100_update_server_metadata(self): |
|
388 | 217 |
r1 = self.client.create_server_metadata( |
389 | 218 |
self.server1['id'], |
390 | 219 |
'mymeta3', |
... | ... | |
396 | 225 |
self.assertTrue(r2['mymeta3'], 'val3') |
397 | 226 |
|
398 | 227 |
def test_delete_server_metadata(self): |
399 |
"""Test delete_server_metadata""" |
|
400 |
self.server1 = self._create_server( |
|
401 |
self.servname1, |
|
402 |
self.flavorid, |
|
403 |
self.img) |
|
404 |
self._test_0110_delete_server_metadata() |
|
405 |
|
|
406 |
def _test_0110_delete_server_metadata(self): |
|
407 | 228 |
r1 = self.client.create_server_metadata( |
408 | 229 |
self.server1['id'], |
409 | 230 |
'mymeta', |
... | ... | |
417 | 238 |
self.assertEqual(err.status, 404) |
418 | 239 |
|
419 | 240 |
def test_list_flavors(self): |
420 |
"""Test flavors_get""" |
|
421 |
self._test_0120_list_flavors() |
|
422 |
|
|
423 |
def _test_0120_list_flavors(self): |
|
424 | 241 |
r = self.client.list_flavors() |
425 | 242 |
self.assertTrue(len(r) > 1) |
426 | 243 |
r = self.client.list_flavors(detail=True) |
427 | 244 |
self.assertTrue('SNF:disk_template' in r[0]) |
428 | 245 |
|
429 | 246 |
def test_get_flavor_details(self): |
430 |
"""Test test_get_flavor_details""" |
|
431 |
self._test_0130_get_flavor_details() |
|
432 |
|
|
433 |
def _test_0130_get_flavor_details(self): |
|
434 | 247 |
r = self.client.get_flavor_details(self.flavorid) |
435 | 248 |
self.assert_dicts_are_deeply_equal(self._flavor_details, r) |
436 | 249 |
|
437 | 250 |
def test_list_images(self): |
438 |
"""Test list_images""" |
|
439 |
self._test_0140_list_images() |
|
440 |
|
|
441 |
def _test_0140_list_images(self): |
|
442 | 251 |
r = self.client.list_images() |
443 | 252 |
self.assertTrue(len(r) > 1) |
444 | 253 |
r = self.client.list_images(detail=True) |
... | ... | |
448 | 257 |
self.assert_dicts_are_deeply_equal(detailed_img, self.img_details) |
449 | 258 |
|
450 | 259 |
def test_get_image_details(self): |
451 |
"""Test image_details""" |
|
452 |
self._test_0150_get_image_details() |
|
453 |
|
|
454 |
def _test_0150_get_image_details(self): |
|
455 | 260 |
r = self.client.get_image_details(self.img) |
456 | 261 |
self.assert_dicts_are_deeply_equal(r, self.img_details) |
457 | 262 |
|
458 | 263 |
def test_get_image_metadata(self): |
459 |
"""Test get_image_metadata""" |
|
460 |
self._test_0160_get_image_metadata() |
|
461 |
|
|
462 |
def _test_0160_get_image_metadata(self): |
|
463 | 264 |
r = self.client.get_image_metadata(self.img) |
464 | 265 |
self.assert_dicts_are_deeply_equal( |
465 | 266 |
self.img_details['metadata']['values'], r) |
... | ... | |
468 | 269 |
self.assertEqual(r[key], val) |
469 | 270 |
|
470 | 271 |
def test_shutdown_server(self): |
471 |
"""Test shutdown_server""" |
|
472 |
self.server1 = self._create_server( |
|
473 |
self.servname1, |
|
474 |
self.flavorid, |
|
475 |
self.img) |
|
476 |
self._wait_for_status(self.server1['id'], 'BUILD') |
|
477 |
self._test_0170_shutdown_server() |
|
478 |
|
|
479 |
def _test_0170_shutdown_server(self): |
|
480 | 272 |
self.client.shutdown_server(self.server1['id']) |
481 | 273 |
self._wait_for_status(self.server1['id'], 'ACTIVE') |
482 | 274 |
r = self.client.get_server_details(self.server1['id']) |
483 | 275 |
self.assertEqual(r['status'], 'STOPPED') |
484 | 276 |
|
485 | 277 |
def test_start_server(self): |
486 |
"""Test start_server""" |
|
487 |
self.server1 = self._create_server( |
|
488 |
self.servname1, |
|
489 |
self.flavorid, |
|
490 |
self.img) |
|
491 |
self._wait_for_status(self.server1['id'], 'BUILD') |
|
492 |
self.client.shutdown_server(self.server1['id']) |
|
493 |
self._wait_for_status(self.server1['id'], 'ACTIVE') |
|
494 |
self._test_0180_start_server() |
|
495 |
|
|
496 |
def _test_0180_start_server(self): |
|
497 | 278 |
self.client.start_server(self.server1['id']) |
498 | 279 |
self._wait_for_status(self.server1['id'], 'STOPPED') |
499 | 280 |
r = self.client.get_server_details(self.server1['id']) |
500 | 281 |
self.assertEqual(r['status'], 'ACTIVE') |
501 | 282 |
|
502 | 283 |
def test_get_server_console(self): |
503 |
"""Test get_server_console""" |
|
504 |
self.server2 = self._create_server( |
|
505 |
self.servname2, |
|
506 |
self.flavorid + 2, |
|
507 |
self.img) |
|
508 |
self._wait_for_status(self.server2['id'], 'BUILD') |
|
509 |
self._test_0190_get_server_console() |
|
510 |
|
|
511 |
def _test_0190_get_server_console(self): |
|
512 | 284 |
r = self.client.get_server_console(self.server2['id']) |
513 | 285 |
self.assertTrue('host' in r) |
514 | 286 |
self.assertTrue('password' in r) |
... | ... | |
516 | 288 |
self.assertTrue('type' in r) |
517 | 289 |
|
518 | 290 |
def test_get_firewall_profile(self): |
519 |
"""Test get_firewall_profile""" |
|
520 |
self.server1 = self._create_server( |
|
521 |
self.servname1, |
|
522 |
self.flavorid, |
|
523 |
self.img) |
|
524 |
self._test_0200_get_firewall_profile() |
|
525 |
|
|
526 |
def _test_0200_get_firewall_profile(self): |
|
527 | 291 |
self._wait_for_status(self.server1['id'], 'BUILD') |
528 | 292 |
fprofile = self.client.get_firewall_profile(self.server1['id']) |
529 | 293 |
self.assertTrue(fprofile in self.PROFILES) |
530 | 294 |
|
531 | 295 |
def test_set_firewall_profile(self): |
532 |
"""Test set_firewall_profile""" |
|
533 |
self.server1 = self._create_server( |
|
534 |
self.servname1, |
|
535 |
self.flavorid, |
|
536 |
self.img) |
|
537 |
self._test_0210_set_firewall_profile() |
|
538 |
|
|
539 |
def _test_0210_set_firewall_profile(self): |
|
540 |
|
|
541 | 296 |
self._wait_for_status(self.server1['id'], 'BUILD') |
542 | 297 |
PROFILES = ['DISABLED', 'ENABLED', 'DISABLED', 'PROTECTED'] |
543 | 298 |
fprofile = self.client.get_firewall_profile(self.server1['id']) |
... | ... | |
568 | 323 |
count_success += 1 |
569 | 324 |
|
570 | 325 |
def test_get_server_stats(self): |
571 |
self.server1 = self._create_server( |
|
572 |
self.servname1, |
|
573 |
self.flavorid, |
|
574 |
self.img) |
|
575 |
self._test_0220_get_server_stats() |
|
576 |
|
|
577 |
def _test_0220_get_server_stats(self): |
|
578 | 326 |
r = self.client.get_server_stats(self.server1['id']) |
579 | 327 |
it = ('cpuBar', 'cpuTimeSeries', 'netBar', 'netTimeSeries', 'refresh') |
580 | 328 |
for term in it: |
581 | 329 |
self.assertTrue(term in r) |
582 | 330 |
|
583 | 331 |
def test_create_network(self): |
584 |
"""Test create_network""" |
|
585 |
self._test_0230_create_network() |
|
586 |
|
|
587 |
def _test_0230_create_network(self): |
|
588 | 332 |
print('\twith no params') |
589 | 333 |
self.network1 = self._create_network(self.netname1) |
590 | 334 |
self._wait_for_network(self.network1['id'], 'ACTIVE') |
... | ... | |
612 | 356 |
self.assertEqual(self.network1[param], val) |
613 | 357 |
|
614 | 358 |
def test_connect_server(self): |
615 |
"""Test connect_server""" |
|
616 |
self.server1 = self._create_server( |
|
617 |
self.servname1, |
|
618 |
self.flavorid, |
|
619 |
self.img) |
|
620 |
self.network1 = self._create_network(self.netname1) |
|
621 |
self._wait_for_status(self.server1['id'], 'BUILD') |
|
622 |
self._wait_for_network(self.network1['id'], 'ACTIVE') |
|
623 |
self._test_0240_connect_server() |
|
624 |
|
|
625 |
def _test_0250_connect_server(self): |
|
626 | 359 |
self.client.connect_server(self.server1['id'], self.network1['id']) |
627 | 360 |
self.assertTrue(self._wait_for_nic( |
628 | 361 |
self.network1['id'], |
629 | 362 |
self.server1['id'])) |
630 | 363 |
|
631 | 364 |
def test_disconnect_server(self): |
632 |
"""Test disconnect_server""" |
|
633 |
self.test_connect_server() |
|
634 |
self._test_0250_disconnect_server() |
|
635 |
|
|
636 |
def _test_0250_disconnect_server(self): |
|
637 | 365 |
self.client.disconnect_server(self.server1['id'], self.network1['id']) |
638 | 366 |
self.assertTrue(self._wait_for_nic( |
639 | 367 |
self.network1['id'], |
... | ... | |
641 | 369 |
in_creation=False)) |
642 | 370 |
|
643 | 371 |
def _test_0260_wait_for_second_network(self): |
644 |
self.network2 = self._create_network(self.netname2) |
|
645 |
self._wait_for_network(self.network2['id'], 'ACTIVE') |
|
646 |
|
|
647 |
def test_list_server_nics(self): |
|
648 |
"""Test list_server_nics""" |
|
649 | 372 |
self.server1 = self._create_server( |
650 | 373 |
self.servname1, |
651 | 374 |
self.flavorid, |
... | ... | |
666 | 389 |
self.assertTrue(len(r) > len0) |
667 | 390 |
|
668 | 391 |
def test_list_networks(self): |
669 |
"""Test list_network""" |
|
670 |
self.network1 = self._create_network(self.netname1) |
|
671 |
self._wait_for_network(self.network1['id'], 'ACTIVE') |
|
672 |
self._test_0290_list_networks() |
|
673 |
|
|
674 |
def _test_0290_list_networks(self): |
|
675 | 392 |
r = self.client.list_networks() |
676 | 393 |
self.assertTrue(len(r) > 1) |
677 | 394 |
ids = [net['id'] for net in r] |
... | ... | |
691 | 408 |
self.assertTrue(term in net.keys()) |
692 | 409 |
|
693 | 410 |
def test_get_network_details(self): |
694 |
"""Test get_network_details""" |
|
695 |
self.network1 = self._create_network(self.netname1) |
|
696 |
self._test_0300_get_network_details() |
|
697 |
|
|
698 |
def _test_0300_get_network_details(self): |
|
699 | 411 |
r = self.client.get_network_details(self.network1['id']) |
700 | 412 |
net1 = dict(self.network1) |
701 | 413 |
net1.pop('status') |
... | ... | |
707 | 419 |
self.assert_dicts_are_deeply_equal(net1, r) |
708 | 420 |
|
709 | 421 |
def test_update_network_name(self): |
710 |
self.network2 = self._create_network(self.netname2) |
|
711 |
self._test_0310_update_network_name() |
|
712 |
|
|
713 |
def _test_0310_update_network_name(self): |
|
714 | 422 |
updated_name = self.netname2 + '_upd' |
715 | 423 |
self.client.update_network_name(self.network2['id'], updated_name) |
716 | 424 |
|
... | ... | |
727 | 435 |
r = self.client.get_network_details(self.network2['id']) |
728 | 436 |
self.assertEqual(r['name'], updated_name) |
729 | 437 |
|
730 |
""" Don't have auth to test this |
|
731 | 438 |
def test_delete_image(self): |
732 |
""Test delete_image"" |
|
733 |
self._test_0330_delete_image() |
|
734 |
def _test_0330_delete_image(self): |
|
735 | 439 |
images = self.client.list_images() |
736 | 440 |
self.client.delete_image(images[2]['id']) |
737 | 441 |
try: |
... | ... | |
740 | 444 |
self.assertEqual(err.status, 404) |
741 | 445 |
|
742 | 446 |
def test_create_image_metadata(self): |
743 |
""Test create_image_metadata"" |
|
744 |
self._test_0340_create_image_metadata() |
|
745 |
def _test_0340_create_image_metadata(self): |
|
746 | 447 |
r = self.client.create_image_metadata(self.img, 'mykey', 'myval') |
747 | 448 |
self.assertEqual(r['mykey'], 'myval') |
748 | 449 |
|
749 | 450 |
def test_update_image_metadata(self): |
750 |
""Test update_image_metadata"" |
|
751 |
self._test_0350_update_image_metadata() |
|
752 |
def _test_0350_update_image_metadata(self): |
|
753 | 451 |
r = self.client.create_image_metadata(self.img, 'mykey0', 'myval') |
754 | 452 |
r = self.client.update_image_metadata(self.img, 'mykey0', 'myval0') |
755 | 453 |
self.assertEqual(r['mykey0'], 'myval0') |
756 | 454 |
|
757 | 455 |
def test_delete_image_metadata(self): |
758 |
""Test delete_image_metadata"" |
|
759 |
self._test_0360_delete_image_metadata() |
|
760 |
def _test_0360_delete_image_metadata(self): |
|
761 | 456 |
self.client.create_image_metadata(self.img, 'mykey1', 'myval1') |
762 | 457 |
self.client.delete_image_metadata(self.img, 'mykey1') |
763 | 458 |
r = self.client.get_image_metadata(self.img) |
b/kamaki/clients/test/image.py | ||
---|---|---|
128 | 128 |
|
129 | 129 |
class Image(TestCase): |
130 | 130 |
|
131 |
def assert_dicts_are_deeply_equal(self, d1, d2): |
|
132 |
for k, v in d1.items(): |
|
133 |
self.assertTrue(k in d2) |
|
134 |
if isinstance(v, dict): |
|
135 |
self.assert_dicts_are_deeply_equal(v, d2[k]) |
|
136 |
else: |
|
137 |
self.assertEqual(unicode(v), unicode(d2[k])) |
|
138 |
|
|
131 | 139 |
class FR(object): |
132 | 140 |
json = example_images |
133 | 141 |
headers = {} |
... | ... | |
139 | 147 |
pass |
140 | 148 |
|
141 | 149 |
def setUp(self): |
142 |
self.imgname = 'img_%s' % self.now |
|
143 | 150 |
self.url = 'http://image.example.com' |
144 | 151 |
self.token = 'an1m@g370k3n==' |
145 | 152 |
from kamaki.clients.image import ImageClient |
146 | 153 |
self.client = ImageClient(self.url, self.token) |
147 |
self.cyclades_url = 'http://cyclades.example.com' |
|
148 |
from kamaki.clients.cyclades import CycladesClient |
|
149 |
self.cyclades = CycladesClient(self.cyclades_url, self.token) |
|
150 | 154 |
from kamaki.clients.connection.kamakicon import KamakiHTTPConnection |
151 | 155 |
self.C = KamakiHTTPConnection |
152 | 156 |
|
... | ... | |
154 | 158 |
self.FR.json = example_images |
155 | 159 |
self.FR.status_code = 200 |
156 | 160 |
|
157 |
def assert_dicts_are_deeply_equal(self, d1, d2): |
|
158 |
for k, v in d1.items(): |
|
159 |
self.assertTrue(k in d2) |
|
160 |
if isinstance(v, dict): |
|
161 |
self.assert_dicts_are_deeply_equal(v, d2[k]) |
|
162 |
else: |
|
163 |
self.assertEqual(unicode(v), unicode(d2[k])) |
|
164 |
|
|
165 | 161 |
def test_list_public(self): |
166 | 162 |
with patch.object( |
167 | 163 |
self.C, |
Also available in: Unified diff