Revision 2cd55da6

b/snf-cyclades-app/synnefo/api/test/floating_ips.py
42 42
from mock import patch, Mock
43 43
from functools import partial
44 44

  
45
from synnefo.cyclades_settings import cyclades_services
46
from synnefo.lib.services import get_service_path
47
from synnefo.lib import join_urls
45 48

  
46
URL = "/api/v1.1/os-floating-ips"
49

  
50
compute_path = get_service_path(cyclades_services, "compute", version="v2.0")
51
URL = join_urls(compute_path, "os-floating-ips")
52
NETWORKS_URL = join_urls(compute_path, "networks")
53
SERVERS_URL = join_urls(compute_path, "servers")
47 54

  
48 55
FloatingIPPoolFactory = partial(NetworkFactory, public=True, deleted=False,
49 56
                                floating_ip_pool=True)
......
195 202
        # Also send a notification to remove the NIC and assert that FIP is in
196 203
        # use until notification from ganeti arrives
197 204
        request = {"removeFloatingIp": {"address": ip.ipv4}}
198
        url = "/api/v1.1/servers/%s/action" % vm.id
205
        url = SERVERS_URL + "/%s/action" % vm.id
199 206
        with patch('synnefo.logic.rapi_pool.GanetiRapiClient') as c:
200 207
            c().ModifyInstance.return_value = 10
201 208
            response = self.post(url, vm.userid, json.dumps(request),
......
219 226
        net = ip.network
220 227
        # Can not remove network with floating IPs
221 228
        with mocked_quotaholder():
222
            response = self.delete("/api/v1.1/networks/%s" % net.id,
229
            response = self.delete(NETWORKS_URL + "/%s" % net.id,
223 230
                                   net.userid)
224 231
        self.assertFault(response, 421, "networkInUse")
225 232
        # But we can with only deleted Floating Ips
226 233
        ip.deleted = True
227 234
        ip.save()
228 235
        with mocked_quotaholder():
229
            response = self.delete("/api/v1.1/networks/%s" % net.id,
236
            response = self.delete(NETWORKS_URL + "/%s" % net.id,
230 237
                                   net.userid)
231 238
        self.assertSuccess(response)
232 239

  
233 240

  
234
POOLS_URL = "/api/v1.1/os-floating-ip-pools"
241
POOLS_URL = join_urls(compute_path, "os-floating-ip-pools")
235 242

  
236 243

  
237 244
class FloatingIPPoolsAPITest(BaseAPITest):
......
259 266
        self.vm = vm
260 267

  
261 268
    def test_bad_request(self):
262
        url = "/api/v1.1/servers/%s/action" % self.vm.id
269
        url = SERVERS_URL + "/%s/action" % self.vm.id
263 270
        response = self.post(url, self.vm.userid, json.dumps({}), "json")
264 271
        self.assertBadRequest(response)
265 272
        response = self.post(url, self.vm.userid,
......
270 277
    @patch('synnefo.logic.rapi_pool.GanetiRapiClient')
271 278
    def test_add_floating_ip(self, mock):
272 279
        # Not exists
273
        url = "/api/v1.1/servers/%s/action" % self.vm.id
280
        url = SERVERS_URL + "/%s/action" % self.vm.id
274 281
        request = {"addFloatingIp": {"address": "10.0.0.1"}}
275 282
        response = self.post(url, self.vm.userid, json.dumps(request), "json")
276 283
        self.assertItemNotFound(response)
......
297 304
    @patch('synnefo.logic.rapi_pool.GanetiRapiClient')
298 305
    def test_remove_floating_ip(self, mock):
299 306
        # Not exists
300
        url = "/api/v1.1/servers/%s/action" % self.vm.id
307
        url = SERVERS_URL + "/%s/action" % self.vm.id
301 308
        request = {"removeFloatingIp": {"address": "10.0.0.1"}}
302 309
        response = self.post(url, self.vm.userid, json.dumps(request), "json")
303 310
        self.assertItemNotFound(response)
b/snf-cyclades-app/synnefo/api/test/networks.py
43 43

  
44 44

  
45 45
class ComputeAPITest(BaseAPITest):
46
    def setUp(self, *args, **kwargs):
47
        super(ComputeAPITest, self).setUp(*args, **kwargs)
46
    def __init__(self, *args, **kwargs):
47
        super(ComputeAPITest, self).__init__(*args, **kwargs)
48 48
        self.compute_path = get_service_path(cyclades_services, 'compute',
49 49
                                             version='v2.0')
50

  
50 51
    def myget(self, path, *args, **kwargs):
51 52
        path = join_urls(self.compute_path, path)
52 53
        return self.get(path, *args, **kwargs)
......
372 373
        net = mfactory.NetworkFactory(state='PENDING', subnet='10.0.0.0/31',
373 374
                                      userid=user)
374 375
        request = {'add': {'serverRef': vm.id}}
375
        response = self.mypost('/api/v1.1/networks/%d/action' % net.id,
376
        response = self.mypost('networks/%d/action' % net.id,
376 377
                               net.userid, json.dumps(request), 'json')
377 378
        # Test that returns BuildInProgress
378 379
        self.assertEqual(response.status_code, 409)
......
400 401

  
401 402
    def test_remove_nic(self, mrapi):
402 403
        user = 'userr'
403
        vm = mfactory.VirtualMachineFactory(name='yo', userid=user)
404
        vm = mfactory.VirtualMachineFactory(name='yo', userid=user,
405
                                            operstate="ACTIVE")
404 406
        net = mfactory.NetworkFactory(state='ACTIVE', userid=user)
405 407
        nic = mfactory.NetworkInterfaceFactory(machine=vm, network=net)
406 408
        mrapi().ModifyInstance.return_value = 1
b/snf-cyclades-app/synnefo/api/test/servers.py
49 49

  
50 50

  
51 51
class ComputeAPITest(BaseAPITest):
52
    def setUp(self, *args, **kwargs):
53
        super(ComputeAPITest, self).setUp(*args, **kwargs)
52
    def __init__(self, *args, **kwargs):
53
        super(ComputeAPITest, self).__init__(*args, **kwargs)
54 54
        self.compute_path = get_service_path(cyclades_services, 'compute',
55 55
                                             version='v2.0')
56 56

  
......
80 80
        self.vm3 = mfactory.VirtualMachineFactory(deleted=True,
81 81
                                                  userid=self.user1)
82 82
        self.vm4 = mfactory.VirtualMachineFactory(userid=self.user2)
83
        super(ServerAPITest, self).setUp()
84 83

  
85 84
    def test_server_list_1(self):
86 85
        """Test if the expected list of servers is returned."""
......
275 274
        mrapi().CreateInstance.return_value = 12
276 275
        with override_settings(settings, DEFAULT_INSTANCE_NETWORKS=[]):
277 276
            with mocked_quotaholder():
278
                response = self.mypost('/api/v1.1/servers', 'test_user',
277
                response = self.mypost('servers', 'test_user',
279 278
                                       json.dumps(self.request), 'json')
280 279
        self.assertEqual(response.status_code, 202)
281 280
        mrapi().CreateInstance.assert_called_once()
......
318 317
                DEFAULT_INSTANCE_NETWORKS=["public", bnet1.network.id,
319 318
                                           bnet2.network.id]):
320 319
            with mocked_quotaholder():
321
                response = self.mypost('/api/v1.1/servers', 'test_user',
320
                response = self.mypost('servers', 'test_user',
322 321
                                       json.dumps(request), 'json')
323 322
        self.assertEqual(response.status_code, 202)
324 323
        name, args, kwargs = mrapi().CreateInstance.mock_calls[0]
......
338 337
        with override_settings(settings,
339 338
                DEFAULT_INSTANCE_NETWORKS=[bnet2.network.id]):
340 339
            with mocked_quotaholder():
341
                response = self.mypost('/api/v1.1/servers', 'test_user',
340
                response = self.mypost('servers', 'test_user',
342 341
                                       json.dumps(request), 'json')
343 342
        self.assertEqual(response.status_code, 202)
344 343
        name, args, kwargs = mrapi().CreateInstance.mock_calls[1]
......
352 351

  
353 352
        # test invalid network in DEFAULT_INSTANCE_NETWORKS
354 353
        with override_settings(settings, DEFAULT_INSTANCE_NETWORKS=[42]):
355
            response = self.mypost('/api/v1.1/servers', 'test_user',
354
            response = self.mypost('servers', 'test_user',
356 355
                                   json.dumps(request), 'json')
357 356
        self.assertFault(response, 500, "internalServerError")
358 357

  
......
360 359
        request = deepcopy(self.request)
361 360
        request["server"]["networks"] = [self.network.id]
362 361
        with override_settings(settings, DEFAULT_INSTANCE_NETWORKS=["public"]):
363
            response = self.mypost('/api/v1.1/servers', 'test_user',
362
            response = self.mypost('servers', 'test_user',
364 363
                                    json.dumps(request), 'json')
365 364
        self.assertFault(response, 403, "forbidden")
366 365
        # test wrong user
......
368 367
        request["server"]["networks"] = [bnet3.network.id]
369 368
        with override_settings(settings, DEFAULT_INSTANCE_NETWORKS=["public"]):
370 369
            with mocked_quotaholder():
371
                response = self.mypost('/api/v1.1/servers', 'dummy_user',
370
                response = self.mypost('servers', 'dummy_user',
372 371
                                       json.dumps(request), 'json')
373 372
        self.assertItemNotFound(response)
374 373

  
......
389 388
        with override_settings(settings,
390 389
                DEFAULT_INSTANCE_NETWORKS=[bnet3.network.id]):
391 390
            with mocked_quotaholder():
392
                response = self.post('/api/v1.1/servers', 'test_user',
391
                response = self.mypost('servers', 'test_user',
393 392
                                     json.dumps(request), 'json')
394 393
        self.assertEqual(response.status_code, 202)
395 394
        api_server = json.loads(response.content)['server']
......
413 412
        request = deepcopy(self.request)
414 413
        request["server"]["flavorRef"] = 42
415 414
        with mocked_quotaholder():
416
            response = self.mypost('/api/v1.1/servers', 'test_user',
415
            response = self.mypost('servers', 'test_user',
417 416
                                   json.dumps(request), 'json')
418 417
        self.assertItemNotFound(response)
419 418

  
......
423 422
    def test_delete_server(self, mrapi):
424 423
        vm = mfactory.VirtualMachineFactory()
425 424
        mrapi().DeleteInstance.return_value = 12
426
        response = self.mydelete('/api/v1.1/servers/%d' % vm.id, vm.userid)
425
        response = self.mydelete('servers/%d' % vm.id, vm.userid)
427 426
        self.assertEqual(response.status_code, 204)
428 427
        mrapi().DeleteInstance.assert_called_once()
429 428

  
......
539 538
        vm = mfactory.VirtualMachineFactory(operstate="BUILD")
540 539
        request = {'start': {}}
541 540
        with mocked_quotaholder():
542
            response = self.mypost('/api/v1.1/servers/%d/action' % vm.id,
541
            response = self.mypost('servers/%d/action' % vm.id,
543 542
                                   vm.userid, json.dumps(request), 'json')
544 543
        self.assertEqual(response.status_code, 409)
545 544
        self.assertFalse(mrapi.mock_calls)
......
548 547
        """Test building in progress"""
549 548
        vm = mfactory.VirtualMachineFactory()
550 549
        mrapi().DeleteInstance.return_value = 2
551
        response = self.mydelete('/api/v1.1/servers/%d' % vm.id,
550
        response = self.mydelete('servers/%d' % vm.id,
552 551
                                 vm.userid)
553 552
        self.assertSuccess(response)
554 553
        mrapi().RemoveInstance.assert_called_once()
......
578 577
        # Check building VM
579 578
        vm = self.get_vm(flavor=flavor, operstate="BUILD")
580 579
        request = {'resize': {'flavorRef': flavor.id}}
581
        response = self.post('/api/v1.1/servers/%d/action' % vm.id,
580
        response = self.mypost('servers/%d/action' % vm.id,
582 581
                             vm.userid, json.dumps(request), 'json')
583 582
        self.assertFault(response, 409, "buildInProgress")
584 583
        # Check same Flavor
585 584
        vm = self.get_vm(flavor=flavor, operstate="STOPPED")
586 585
        request = {'resize': {'flavorRef': flavor.id}}
587
        response = self.post('/api/v1.1/servers/%d/action' % vm.id,
586
        response = self.mypost('servers/%d/action' % vm.id,
588 587
                             vm.userid, json.dumps(request), 'json')
589 588
        self.assertBadRequest(response)
590 589
        # Check flavor with different disk
......
592 591
        flavor3 = mfactory.FlavorFactory(disk=2048)
593 592
        vm = self.get_vm(flavor=flavor2, operstate="STOPPED")
594 593
        request = {'resize': {'flavorRef': flavor3.id}}
595
        response = self.post('/api/v1.1/servers/%d/action' % vm.id,
594
        response = self.mypost('servers/%d/action' % vm.id,
596 595
                             vm.userid, json.dumps(request), 'json')
597 596
        self.assertBadRequest(response)
598 597
        flavor2 = mfactory.FlavorFactory(disk_template="foo")
599 598
        flavor3 = mfactory.FlavorFactory(disk_template="baz")
600 599
        vm = self.get_vm(flavor=flavor2, operstate="STOPPED")
601 600
        request = {'resize': {'flavorRef': flavor3.id}}
602
        response = self.post('/api/v1.1/servers/%d/action' % vm.id,
601
        response = self.mypost('servers/%d/action' % vm.id,
603 602
                             vm.userid, json.dumps(request), 'json')
604 603
        self.assertBadRequest(response)
605 604
        # Check success
......
609 608
                                         cpu=4, ram=2048)
610 609
        request = {'resize': {'flavorRef': flavor4.id}}
611 610
        mrapi().ModifyInstance.return_value = 42
612
        response = self.post('/api/v1.1/servers/%d/action' % vm.id,
611
        response = self.mypost('servers/%d/action' % vm.id,
613 612
                             vm.userid, json.dumps(request), 'json')
614 613
        self.assertEqual(response.status_code, 202)
615 614
        vm = VirtualMachine.objects.get(id=vm.id)
......
625 624
        vm.save()
626 625
        for action in VirtualMachine.ACTIONS:
627 626
            request = {action[0]: ""}
628
            response = self.post('/api/v1.1/servers/%d/action' % vm.id,
627
            response = self.mypost('servers/%d/action' % vm.id,
629 628
                                 vm.userid, json.dumps(request), 'json')
630 629
            self.assertBadRequest(response)
631 630
        # however you can destroy
632 631
        mrapi().DeleteInstance.return_value = 42
633
        response = self.delete('/api/v1.1/servers/%d' % vm.id,
634
                               vm.userid)
632
        response = self.mydelete('servers/%d' % vm.id,
633
                                 vm.userid)
635 634
        self.assertSuccess(response)
636 635

  
637 636
    def get_vm(self, flavor, operstate):
......
659 658

  
660 659
        data = json.dumps({'console': {'type': 'vnc'}})
661 660
        with override_settings(settings, TEST=True):
662
            response = self.mypost('/api/v1.1/servers/%d/action' % vm.id,
661
            response = self.mypost('servers/%d/action' % vm.id,
663 662
                                   vm.userid, data, 'json')
664 663
        self.assertEqual(response.status_code, 200)
665 664
        reply = json.loads(response.content)
b/snf-cyclades-app/synnefo/logic/tests.py
357 357
            db_vm = VirtualMachine.objects.get(id=vm.id)
358 358
            self.assertEqual(db_vm.operstate, vm.operstate)
359 359
        # Test intermediate states
360
        vm.operstate = "STOPPED"
361
        vm.save()
360 362
        for status in ["queued", "waiting", "running"]:
361 363
            msg = self.create_msg(operation='OP_INSTANCE_SET_PARAMS',
362 364
                                  instance=vm.backend_vm_id,
......
774 776

  
775 777
    def test_get_servers_from_db(self):
776 778
        """Test getting a dictionary from each server to its operstate"""
777
        backend = 30000
779
        backends = Backend.objects.all()
778 780
        vm1 = self.get_vm('STARTED')
779 781
        vm2 = self.get_vm('DESTROYED', deleted=True)
780 782
        vm3 = self.get_vm('STOPPED')
781
        self.assertEquals(reconciliation.get_servers_from_db(),
783
        self.assertEquals(reconciliation.get_servers_from_db(backends),
782 784
                    {vm1.id: VMState(state='STARTED', cpu=2, ram=1024, nics=[]),
783 785
                     vm3.id: VMState(state='STOPPED', cpu=2, ram=1024, nics=[])}
784 786
                    )

Also available in: Unified diff