Revision 5d805533 snf-cyclades-app/synnefo/api/tests/servers.py

b/snf-cyclades-app/synnefo/api/tests/servers.py
37 37
from snf_django.utils.testing import (BaseAPITest, mocked_quotaholder,
38 38
                                      override_settings)
39 39
from synnefo.db.models import (VirtualMachine, VirtualMachineMetadata,
40
                               IPAddress, NetworkInterface)
40
                               IPAddress, NetworkInterface, Volume)
41 41
from synnefo.db import models_factory as mfactory
42 42
from synnefo.logic.utils import get_rsapi_state
43 43
from synnefo.cyclades_settings import cyclades_services
......
320 320
                            'checksum': '1234',
321 321
                            "id": 1,
322 322
                            "name": "test_image",
323
                            "size": "41242",
323
                            "size": 1024,
324
                            "is_snapshot": False,
324 325
                            'disk_format': 'diskdump'}
325 326

  
326 327

  
327 328
@patch('synnefo.api.util.get_image', fixed_image)
329
@patch('synnefo.volume.util.get_snapshot', fixed_image)
328 330
@patch('synnefo.logic.rapi_pool.GanetiRapiClient')
329 331
class ServerCreateAPITest(ComputeAPITest):
330 332
    def setUp(self):
......
585 587
                                       json.dumps(request), 'json')
586 588
        self.assertEqual(response.status_code, 404)
587 589

  
590
    def test_create_server_with_volumes(self, mrapi):
591
        user = "test_user"
592
        mrapi().CreateInstance.return_value = 42
593
        # Test creation without any volumes. Server will use flavor+image
594
        request = deepcopy(self.request)
595
        request["server"]["block_device_mapping_v2"] = []
596
        with mocked_quotaholder():
597
            response = self.mypost("servers", user,
598
                                   json.dumps(request), 'json')
599
        self.assertEqual(response.status_code, 202, msg=response.content)
600
        vm_id = json.loads(response.content)["server"]["id"]
601
        volume = Volume.objects.get(machine_id=vm_id)
602
        self.assertEqual(volume.disk_template, self.flavor.disk_template)
603
        self.assertEqual(volume.size, self.flavor.disk)
604
        self.assertEqual(volume.source, "image:%s" % fixed_image()["id"])
605
        self.assertEqual(volume.delete_on_termination, True)
606
        self.assertEqual(volume.userid, user)
607

  
608
        # Test using an image
609
        request["server"]["block_device_mapping_v2"] = [
610
            {"source_type": "image",
611
             "uuid": fixed_image()["id"],
612
             "volume_size": 10,
613
             "delete_on_termination": False}
614
        ]
615
        with mocked_quotaholder():
616
            response = self.mypost("servers", user,
617
                                   json.dumps(request), 'json')
618
        self.assertEqual(response.status_code, 202, msg=response.content)
619
        vm_id = json.loads(response.content)["server"]["id"]
620
        volume = Volume.objects.get(machine_id=vm_id)
621
        self.assertEqual(volume.disk_template, self.flavor.disk_template)
622
        self.assertEqual(volume.size, 10)
623
        self.assertEqual(volume.source, "image:%s" % fixed_image()["id"])
624
        self.assertEqual(volume.delete_on_termination, False)
625
        self.assertEqual(volume.userid, user)
626
        self.assertEqual(volume.origin, "pithos:" + fixed_image()["checksum"])
627

  
628
        # Test using a snapshot
629
        request["server"]["block_device_mapping_v2"] = [
630
            {"source_type": "snapshot",
631
             "uuid": fixed_image()["id"],
632
             "volume_size": 10,
633
             "delete_on_termination": False}
634
        ]
635
        with mocked_quotaholder():
636
            response = self.mypost("servers", user,
637
                                   json.dumps(request), 'json')
638
        self.assertEqual(response.status_code, 202, msg=response.content)
639
        vm_id = json.loads(response.content)["server"]["id"]
640
        volume = Volume.objects.get(machine_id=vm_id)
641
        self.assertEqual(volume.disk_template, self.flavor.disk_template)
642
        self.assertEqual(volume.size, 10)
643
        self.assertEqual(volume.source, "snapshot:%s" % fixed_image()["id"])
644
        self.assertEqual(volume.origin, fixed_image()["checksum"])
645
        self.assertEqual(volume.delete_on_termination, False)
646
        self.assertEqual(volume.userid, user)
647

  
648
        source_volume = volume
649
        # Test using source volume
650
        request["server"]["block_device_mapping_v2"] = [
651
            {"source_type": "volume",
652
             "uuid": source_volume.id,
653
             "volume_size": source_volume.size,
654
             "delete_on_termination": False}
655
        ]
656
        with mocked_quotaholder():
657
            response = self.mypost("servers", user,
658
                                   json.dumps(request), 'json')
659
        # This will fail because the volume is not AVAILABLE.
660
        self.assertBadRequest(response)
661

  
662
        # Test using a blank volume
663
        request["server"]["block_device_mapping_v2"] = [
664
            {"source_type": "blank",
665
             "volume_size": 10,
666
             "delete_on_termination": True}
667
        ]
668
        with mocked_quotaholder():
669
            response = self.mypost("servers", user,
670
                                   json.dumps(request), 'json')
671
        self.assertBadRequest(response)
672

  
588 673

  
589 674
@patch('synnefo.logic.rapi_pool.GanetiRapiClient')
590 675
class ServerDestroyAPITest(ComputeAPITest):

Also available in: Unified diff