Beispiel #1
0
    def test_flavor_access(self):
        """Test that API returns information only for flavors the user has
        access."""
        # try to get details of a private flavor with access
        response = self.myget('flavors/%d' % self.flavor4.id)
        self.assertSuccess(response)
        api_flavor = json.loads(response.content)['flavor']
        self.assertEquals(api_flavor['name'], self.flavor4.name)

        # try to get details of a public flavor
        response = self.myget('flavors/%d' % self.flavor8.id)
        self.assertSuccess(response)
        api_flavor = json.loads(response.content)['flavor']
        self.assertEquals(api_flavor['name'], self.flavor8.name)

        # try to get details of a non-public flavor with no access
        response = self.myget('flavors/%d' % self.flavor7.id)
        self.assertItemNotFound(response)

        # try to get details of a flavor with no access, but with spawned VM
        vm = VirtualMachineFactory(flavor=self.flavor7)
        response = self.myget('flavors/%d' % self.flavor7.id, user=vm.userid)
        self.assertSuccess(response)
        api_flavor = json.loads(response.content)['flavor']
        self.assertEquals(api_flavor['name'], self.flavor7.name)
Beispiel #2
0
 def test_correct_state(self):
     vm = VirtualMachineFactory()
     vm.operstate = 'foo'
     self.assertEqual(utils.get_rsapi_state(vm), "UNKNOWN")
     vm.operstate = "STARTED"
     vm.deleted = True
     self.assertEqual(utils.get_rsapi_state(vm), "DELETED")
     vm.deleted = False
     vm.backendopcode = "OP_INSTANCE_REBOOT"
     vm.backendjobstatus = "waiting"
     self.assertEqual(utils.get_rsapi_state(vm), "REBOOT")
Beispiel #3
0
 def test_correct_state(self):
     vm = VirtualMachineFactory()
     vm.operstate = 'foo'
     self.assertEqual(utils.get_rsapi_state(vm), "UNKNOWN")
     vm.operstate = "STARTED"
     vm.deleted = True
     self.assertEqual(utils.get_rsapi_state(vm), "DELETED")
     vm.deleted = False
     vm.backendopcode = "OP_INSTANCE_REBOOT"
     vm.backendjobstatus = "waiting"
     self.assertEqual(utils.get_rsapi_state(vm), "REBOOT")
Beispiel #4
0
    def test_create_volume(self, mrapi):
        vm = VirtualMachineFactory(
            operstate="ACTIVE",
            flavor__volume_type__disk_template="ext_vlmc")
        vt = VolumeTypeFactory(disk_template="ext_vlmc")
        user = vm.userid
        _data = {"display_name": "test_vol",
                 "size": 2,
                 "volume_type": vt.id}

        # Test standalone create success
        mrapi().ModifyInstance.return_value = 42
        with mocked_quotaholder():
            r = self.post(VOLUMES_URL, user,
                          json.dumps({"volume": _data}), "json")
        self.assertSuccess(r)

        # Test create and attach success
        _data["server_id"] = vm.id
        mrapi().ModifyInstance.return_value = 42
        with mocked_quotaholder():
            r = self.post(VOLUMES_URL, user,
                          json.dumps({"volume": _data}), "json")
        self.assertSuccess(r)

        # Test create without size, name and server
        for attr in ["display_name", "size", "server_id"]:
            data = deepcopy(_data)
            del data["size"]
            with mocked_quotaholder():
                r = self.post(VOLUMES_URL, user,
                              json.dumps({"volume": data}), "json")
            self.assertBadRequest(r)

        # Test invalid size
        data = deepcopy(_data)
        data["size"] = -2
        with mocked_quotaholder():
            r = self.post(VOLUMES_URL, user,
                          json.dumps({"volume": data}), "json")
        self.assertBadRequest(r)

        # Test deleted server or invalid state
        data = deepcopy(_data)
        vm.deleted = True
        vm.save()
        with mocked_quotaholder():
            r = self.post(VOLUMES_URL, user,
                          json.dumps({"volume": data}), "json")
        self.assertBadRequest(r)

        vm.deleted = False
        vm.operstate = "ERROR"
        vm.save()
        with mocked_quotaholder():
            r = self.post(VOLUMES_URL, user,
                          json.dumps({"volume": data}), "json")
        self.assertBadRequest(r)
        vm.operstate = "ACTIVE"
        vm.save()

        # Test volume type different from VM's flavor or invalid vype
        data = deepcopy(_data)
        for disk_type in ["file", "plain", "drbd", "rbd"]:
            vtype = VolumeTypeFactory(disk_template=disk_type)
            data["volume_type"] = vtype.id
            with mocked_quotaholder():
                r = self.post(VOLUMES_URL, user,
                              json.dumps({"volume": data}), "json")
            self.assertBadRequest(r)
        for vtype in [434132421243, "foo"]:
            data["volume_type"] = vtype
            with mocked_quotaholder():
                r = self.post(VOLUMES_URL, user,
                              json.dumps({"volume": data}), "json")
            self.assertBadRequest(r)

        # Test source for invalid disk template
        for disk_type in ["file", "plain", "drbd", "rbd"]:
            temp_vm = VirtualMachineFactory(
                operstate="ACTIVE",
                flavor__volume_type__disk_template=disk_type)
            for attr in ["snapshot_id", "imageRef"]:
                data = deepcopy(_data)
                data["server_id"] = temp_vm.id
                data[attr] = "3214231-413242134123-431242"
                with mocked_quotaholder():
                    r = self.post(VOLUMES_URL, user,
                                  json.dumps({"volume": data}), "json")
                self.assertBadRequest(r)

        # Test snapshot and image together
        data = deepcopy(_data)
        data["snapshot_id"] = "3214231-413242134123-431242"
        data["imageRef"] = "3214231-413242134123-431242"
        with mocked_quotaholder():
            r = self.post(VOLUMES_URL, user,
                          json.dumps({"volume": data}), "json")
        self.assertBadRequest(r)

        # Test with Snapshot source

        # Test unknwon snapshot
        data = deepcopy(_data)
        data["snapshot_id"] = "94321904321-432142134214-23142314"
        with mocked_quotaholder():
            r = self.post(VOLUMES_URL, user,
                          json.dumps({"volume": data}), "json")
        self.assertBadRequest(r)

        vm.task = None
        vm.action = None
        vm.save()
        # Test success
        snapshot = Mock()
        snapshot.return_value = {'location': 'pithos://foo',
                                 'mapfile': '1234',
                                 'id': 1,
                                 'name': 'test_image',
                                 'size': 1024,
                                 'is_snapshot': True,
                                 'is_public': True,
                                 'version': 42,
                                 'owner': 'user',
                                 'status': 'AVAILABLE',
                                 'disk_format': 'diskdump'}
        data["snapshot_id"] = 1
        with patch("synnefo.volume.util.get_snapshot", snapshot):
            with mocked_quotaholder():
                r = self.post(VOLUMES_URL, user,
                              json.dumps({"volume": data}), "json")
        self.assertSuccess(r)

        # Test with Snapshot source

        # Test unknwon snapshot
        data = deepcopy(_data)
        data["imageRef"] = "94321904321-432142134214-23142314"
        with mocked_quotaholder():
            r = self.post(VOLUMES_URL, user,
                          json.dumps({"volume": data}), "json")
        self.assertBadRequest(r)

        vm.task = None
        vm.action = None
        vm.save()
        data["server_id"] = vm.id
        # Test success
        image = Mock()
        image.return_value = {'location': 'pithos://foo',
                              'mapfile': '1234',
                              'id': 2,
                              'name': 'test_image',
                              'size': 1024,
                              'is_snapshot': False,
                              'is_image': False,
                              'is_public': True,
                              'owner': 'user',
                              'version': 42,
                              'status': 'AVAILABLE',
                              'disk_format': 'diskdump'}
        data["imageRef"] = 2
        with patch("synnefo.api.util.get_image", image):
            with mocked_quotaholder():
                r = self.post(VOLUMES_URL, user,
                              json.dumps({"volume": data}), "json")
        self.assertSuccess(r)
Beispiel #5
0
    def test_create_volume(self, mrapi):
        vm = VirtualMachineFactory(
            operstate="ACTIVE", flavor__volume_type__disk_template="ext_vlmc")
        user = vm.userid
        _data = {"display_name": "test_vol", "size": 2, "server_id": vm.id}

        # Test Success
        mrapi().ModifyInstance.return_value = 42
        with mocked_quotaholder():
            r = self.post(VOLUMES_URL, user, json.dumps({"volume": _data}),
                          "json")
        self.assertSuccess(r)

        # Test create without size, name and server
        for attr in ["display_name", "size", "server_id"]:
            data = deepcopy(_data)
            del data["size"]
            with mocked_quotaholder():
                r = self.post(VOLUMES_URL, user, json.dumps({"volume": data}),
                              "json")
            self.assertBadRequest(r)

        # Test invalid size
        data = deepcopy(_data)
        data["size"] = -2
        with mocked_quotaholder():
            r = self.post(VOLUMES_URL, user, json.dumps({"volume": data}),
                          "json")
        self.assertBadRequest(r)

        # Test deleted server or invalid state
        data = deepcopy(_data)
        vm.deleted = True
        vm.save()
        with mocked_quotaholder():
            r = self.post(VOLUMES_URL, user, json.dumps({"volume": data}),
                          "json")
        self.assertBadRequest(r)

        vm.deleted = False
        vm.operstate = "ERROR"
        vm.save()
        with mocked_quotaholder():
            r = self.post(VOLUMES_URL, user, json.dumps({"volume": data}),
                          "json")
        self.assertBadRequest(r)
        vm.operstate = "ACTIVE"
        vm.save()

        # Test volume type different from VM's flavor or invalid vype
        data = deepcopy(_data)
        for disk_type in ["file", "plain", "drbd", "rbd"]:
            vtype = VolumeTypeFactory(disk_template=disk_type)
            data["volume_type"] = vtype.id
            with mocked_quotaholder():
                r = self.post(VOLUMES_URL, user, json.dumps({"volume": data}),
                              "json")
            self.assertBadRequest(r)
        for vtype in [434132421243, "foo"]:
            data["volume_type"] = vtype
            with mocked_quotaholder():
                r = self.post(VOLUMES_URL, user, json.dumps({"volume": data}),
                              "json")
            self.assertBadRequest(r)

        # Test source for invalid disk template
        for disk_type in ["file", "plain", "drbd", "rbd"]:
            temp_vm = VirtualMachineFactory(
                operstate="ACTIVE",
                flavor__volume_type__disk_template=disk_type)
            for attr in ["snapshot_id", "imageRef"]:
                data = deepcopy(_data)
                data["server_id"] = temp_vm.id
                data[attr] = "3214231-413242134123-431242"
                with mocked_quotaholder():
                    r = self.post(VOLUMES_URL, user,
                                  json.dumps({"volume": data}), "json")
                self.assertBadRequest(r)

        # Test snapshot and image together
        data = deepcopy(_data)
        data["snapshot_id"] = "3214231-413242134123-431242"
        data["imageRef"] = "3214231-413242134123-431242"
        with mocked_quotaholder():
            r = self.post(VOLUMES_URL, user, json.dumps({"volume": data}),
                          "json")
        self.assertBadRequest(r)

        # Test with Snapshot source

        # Test unknwon snapshot
        data = deepcopy(_data)
        data["snapshot_id"] = "94321904321-432142134214-23142314"
        with mocked_quotaholder():
            r = self.post(VOLUMES_URL, user, json.dumps({"volume": data}),
                          "json")
        self.assertBadRequest(r)

        vm.task = None
        vm.action = None
        vm.save()
        # Test success
        snapshot = Mock()
        snapshot.return_value = {
            'location': 'pithos://foo',
            'mapfile': '1234',
            'id': 1,
            'name': 'test_image',
            'size': 1024,
            'is_snapshot': True,
            'is_public': True,
            'version': 42,
            'owner': 'user',
            'status': 'AVAILABLE',
            'disk_format': 'diskdump'
        }
        data["snapshot_id"] = 1
        with patch("synnefo.volume.util.get_snapshot", snapshot):
            with mocked_quotaholder():
                r = self.post(VOLUMES_URL, user, json.dumps({"volume": data}),
                              "json")
        self.assertSuccess(r)

        # Test with Snapshot source

        # Test unknwon snapshot
        data = deepcopy(_data)
        data["imageRef"] = "94321904321-432142134214-23142314"
        with mocked_quotaholder():
            r = self.post(VOLUMES_URL, user, json.dumps({"volume": data}),
                          "json")
        self.assertBadRequest(r)

        vm.task = None
        vm.action = None
        vm.save()
        data["server_id"] = vm.id
        # Test success
        image = Mock()
        image.return_value = {
            'location': 'pithos://foo',
            'mapfile': '1234',
            'id': 2,
            'name': 'test_image',
            'size': 1024,
            'is_snapshot': False,
            'is_image': False,
            'is_public': True,
            'owner': 'user',
            'version': 42,
            'status': 'AVAILABLE',
            'disk_format': 'diskdump'
        }
        data["imageRef"] = 2
        with patch("synnefo.api.util.get_image", image):
            with mocked_quotaholder():
                r = self.post(VOLUMES_URL, user, json.dumps({"volume": data}),
                              "json")
        self.assertSuccess(r)