Revision db113224 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
33 35

  
34
import time
36
from kamaki.clients import ClientError
35 37

  
36
from kamaki.clients import livetest, ClientError
37
from kamaki.clients.cyclades import CycladesClient
38 38

  
39

  
40
class Cyclades(livetest.Generic):
39
class Cyclades(TestCase):
41 40
    """Set up a Cyclades thorough test"""
42 41
    def setUp(self):
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'])
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)
63 46

  
64 47
    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)
48
        pass
172 49

  
50
    """
173 51
    def test_parallel_creation(self):
174
        """test create with multiple threads
52
        ""test create with multiple threads
175 53
        Do not use this in regular livetest
176
        """
54
        ""
177 55
        from kamaki.clients import SilentEvent
178 56
        c1 = SilentEvent(
179 57
            self._create_server,
......
225 103
        c8.start()
226 104

  
227 105
    def test_create_server(self):
228
        """Test create_server"""
106
        ""Test create_server""
229 107
        self.server1 = self._create_server(
230 108
            self.servname1,
231 109
            self.flavorid,
......
240 118
        self.assertEqual(self.server1["status"], "BUILD")
241 119

  
242 120
    def test_list_servers(self):
243
        """Test list servers"""
121
        ""Test list servers""
244 122
        self.server1 = self._create_server(
245 123
            self.servname1,
246 124
            self.flavorid,
......
255 133
        servers = self.client.list_servers()
256 134
        dservers = self.client.list_servers(detail=True)
257 135

  
258
        """detailed and simple are same size"""
136
        ""detailed and simple are same size""
259 137
        self.assertEqual(len(dservers), len(servers))
260 138
        for i in range(len(servers)):
261 139
            for field in (
......
269 147
                self.assertFalse(field in servers[i])
270 148
                self.assertTrue(field in dservers[i])
271 149

  
272
        """detailed and simple contain same names"""
150
        ""detailed and simple contain same names""
273 151
        names = sorted(map(lambda x: x["name"], servers))
274 152
        dnames = sorted(map(lambda x: x["name"], dservers))
275 153
        self.assertEqual(names, dnames)
276 154

  
277 155
    def _test_0030_wait_test_servers_to_build(self):
278
        """Pseudo-test to wait for VMs to load"""
156
        ""Pseudo-test to wait for VMs to load""
279 157
        print('')
280 158
        self._wait_for_status(self.server1['id'], 'BUILD')
281 159
        self._wait_for_status(self.server2['id'], 'BUILD')
282 160

  
283 161
    def test_get_server_details(self):
284
        """Test get_server_details"""
162
        ""Test get_server_details""
285 163
        self.server1 = self._create_server(
286 164
            self.servname1,
287 165
            self.flavorid,
......
297 175
        self.assertEqual(r["status"], "ACTIVE")
298 176

  
299 177
    def test_update_server_name(self):
300
        """Test update_server_name"""
178
        ""Test update_server_name""
301 179
        self.server1 = self._create_server(
302 180
            self.servname1,
303 181
            self.flavorid,
......
316 194
        self.servers[new_name] = changed
317 195

  
318 196
    def test_reboot_server(self):
319
        """Test reboot server"""
197
        ""Test reboot server""
320 198
        self.server1 = self._create_server(
321 199
            self.servname1,
322 200
            self.flavorid,
......
338 216
        self.assertTrue(self._has_status(self.server2['id'], 'REBOOT'))
339 217

  
340 218
    def _test_0070_wait_test_servers_to_reboot(self):
341
        """Pseudo-test to wait for VMs to load"""
219
        ""Pseudo-test to wait for VMs to load""
342 220
        print('')
343 221
        self._wait_for_status(self.server1['id'], 'REBOOT')
344 222
        self._wait_for_status(self.server2['id'], 'REBOOT')
345 223

  
346 224
    def test_create_server_metadata(self):
347
        """Test create_server_metadata"""
225
        ""Test create_server_metadata""
348 226
        self.server1 = self._create_server(
349 227
            self.servname1,
350 228
            self.flavorid,
......
361 239
        self.assert_dicts_are_deeply_equal(r1, r2)
362 240

  
363 241
    def test_get_server_metadata(self):
364
        """Test get server_metadata"""
242
        ""Test get server_metadata""
365 243
        self.server1 = self._create_server(
366 244
            self.servname1,
367 245
            self.flavorid,
......
377 255
        self.assertEqual(r['mymeta_0'], 'val_0')
378 256

  
379 257
    def test_update_server_metadata(self):
380
        """Test update_server_metadata"""
258
        ""Test update_server_metadata""
381 259
        self.server1 = self._create_server(
382 260
            self.servname1,
383 261
            self.flavorid,
......
396 274
        self.assertTrue(r2['mymeta3'], 'val3')
397 275

  
398 276
    def test_delete_server_metadata(self):
399
        """Test delete_server_metadata"""
277
        ""Test delete_server_metadata""
400 278
        self.server1 = self._create_server(
401 279
            self.servname1,
402 280
            self.flavorid,
......
417 295
            self.assertEqual(err.status, 404)
418 296

  
419 297
    def test_list_flavors(self):
420
        """Test flavors_get"""
298
        ""Test flavors_get""
421 299
        self._test_0120_list_flavors()
422 300

  
423 301
    def _test_0120_list_flavors(self):
......
427 305
        self.assertTrue('SNF:disk_template' in r[0])
428 306

  
429 307
    def test_get_flavor_details(self):
430
        """Test test_get_flavor_details"""
308
        ""Test test_get_flavor_details""
431 309
        self._test_0130_get_flavor_details()
432 310

  
433 311
    def _test_0130_get_flavor_details(self):
......
435 313
        self.assert_dicts_are_deeply_equal(self._flavor_details, r)
436 314

  
437 315
    def test_list_images(self):
438
        """Test list_images"""
316
        ""Test list_images""
439 317
        self._test_0140_list_images()
440 318

  
441 319
    def _test_0140_list_images(self):
......
448 326
        self.assert_dicts_are_deeply_equal(detailed_img, self.img_details)
449 327

  
450 328
    def test_get_image_details(self):
451
        """Test image_details"""
329
        ""Test image_details""
452 330
        self._test_0150_get_image_details()
453 331

  
454 332
    def _test_0150_get_image_details(self):
......
456 334
        self.assert_dicts_are_deeply_equal(r, self.img_details)
457 335

  
458 336
    def test_get_image_metadata(self):
459
        """Test get_image_metadata"""
337
        ""Test get_image_metadata""
460 338
        self._test_0160_get_image_metadata()
461 339

  
462 340
    def _test_0160_get_image_metadata(self):
......
468 346
            self.assertEqual(r[key], val)
469 347

  
470 348
    def test_shutdown_server(self):
471
        """Test shutdown_server"""
349
        ""Test shutdown_server""
472 350
        self.server1 = self._create_server(
473 351
            self.servname1,
474 352
            self.flavorid,
......
483 361
        self.assertEqual(r['status'], 'STOPPED')
484 362

  
485 363
    def test_start_server(self):
486
        """Test start_server"""
364
        ""Test start_server""
487 365
        self.server1 = self._create_server(
488 366
            self.servname1,
489 367
            self.flavorid,
......
500 378
        self.assertEqual(r['status'], 'ACTIVE')
501 379

  
502 380
    def test_get_server_console(self):
503
        """Test get_server_console"""
381
        ""Test get_server_console""
504 382
        self.server2 = self._create_server(
505 383
            self.servname2,
506 384
            self.flavorid + 2,
......
516 394
        self.assertTrue('type' in r)
517 395

  
518 396
    def test_get_firewall_profile(self):
519
        """Test get_firewall_profile"""
397
        ""Test get_firewall_profile""
520 398
        self.server1 = self._create_server(
521 399
            self.servname1,
522 400
            self.flavorid,
......
529 407
        self.assertTrue(fprofile in self.PROFILES)
530 408

  
531 409
    def test_set_firewall_profile(self):
532
        """Test set_firewall_profile"""
410
        ""Test set_firewall_profile""
533 411
        self.server1 = self._create_server(
534 412
            self.servname1,
535 413
            self.flavorid,
......
581 459
            self.assertTrue(term in r)
582 460

  
583 461
    def test_create_network(self):
584
        """Test create_network"""
462
        ""Test create_network""
585 463
        self._test_0230_create_network()
586 464

  
587 465
    def _test_0230_create_network(self):
......
612 490
            self.assertEqual(self.network1[param], val)
613 491

  
614 492
    def test_connect_server(self):
615
        """Test connect_server"""
493
        ""Test connect_server""
616 494
        self.server1 = self._create_server(
617 495
            self.servname1,
618 496
            self.flavorid,
......
629 507
            self.server1['id']))
630 508

  
631 509
    def test_disconnect_server(self):
632
        """Test disconnect_server"""
510
        ""Test disconnect_server""
633 511
        self.test_connect_server()
634 512
        self._test_0250_disconnect_server()
635 513

  
......
645 523
        self._wait_for_network(self.network2['id'], 'ACTIVE')
646 524

  
647 525
    def test_list_server_nics(self):
648
        """Test list_server_nics"""
526
        ""Test list_server_nics""
649 527
        self.server1 = self._create_server(
650 528
            self.servname1,
651 529
            self.flavorid,
......
666 544
        self.assertTrue(len(r) > len0)
667 545

  
668 546
    def test_list_networks(self):
669
        """Test list_network"""
547
        ""Test list_network""
670 548
        self.network1 = self._create_network(self.netname1)
671 549
        self._wait_for_network(self.network1['id'], 'ACTIVE')
672 550
        self._test_0290_list_networks()
......
691 569
                self.assertTrue(term in net.keys())
692 570

  
693 571
    def test_get_network_details(self):
694
        """Test get_network_details"""
695 572
        self.network1 = self._create_network(self.netname1)
696 573
        self._test_0300_get_network_details()
697 574

  
......
727 604
        r = self.client.get_network_details(self.network2['id'])
728 605
        self.assertEqual(r['name'], updated_name)
729 606

  
730
    """ Don't have auth to test this
607
    "" Don't have auth to test this
731 608
    def test_delete_image(self):
732 609
        ""Test delete_image""
733 610
        self._test_0330_delete_image()

Also available in: Unified diff