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
        print
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