Exemplo n.º 1
0
    def teardownVolume(self, sdUUID, imgUUID, volUUID):
        if (sdUUID, volUUID) not in self.prepared_volumes:
            error = exception.VolumeDoesNotExist
            return response.error_raw(error.code, error.msg)

        del self.prepared_volumes[(sdUUID, volUUID)]
        return response.success()
Exemplo n.º 2
0
    def setVolumeSize(self, sdUUID, spUUID, imgUUID, volUUID, capacity):
        if (sdUUID, volUUID) not in self.prepared_volumes:
            error = exception.VolumeDoesNotExist
            return response.error_raw(error.code, error.msg)

        self.prepared_volumes[(sdUUID, volUUID)]['capacity'] = capacity
        return response.success()
Exemplo n.º 3
0
    def getVolumeSize(self, domainID, poolID, imageID, volumeID):
        key = (domainID, imageID, volumeID)
        if key not in self.prepared_volumes:
            error = exception.VolumeDoesNotExist
            return response.error_raw(error.code, error.msg)

        vol_info = self.prepared_volumes[key]

        # NOTE: The real API return strings.
        return response.success(apparentsize=str(vol_info['apparentsize']),
                                truesize=str(vol_info['truesize']))
Exemplo n.º 4
0
    def getVolumeInfo(self, sdUUID, spUUID, imgUUID, volUUID):
        key = (sdUUID, imgUUID, volUUID)
        if key not in self.prepared_volumes:
            error = exception.VolumeDoesNotExist
            return response.error_raw(error.code, error.msg)

        # NOTE: The real API returns strings.
        vol_info = self.prepared_volumes[key].copy()
        vol_info["apparentsize"] = str(vol_info["apparentsize"])
        vol_info["truesize"] = str(vol_info["truesize"])
        vol_info["capacity"] = str(vol_info["capacity"])

        return response.success(info=vol_info)
Exemplo n.º 5
0
    def sendExtendMsg(self, spUUID, volDict, newSize, callbackFunc):
        # Volume extend is done async using mailbox in real code, and the
        # caller verifies that volume size has been extended by given callback
        # function. For testing purpose this method only implements the API
        # call and checks that the volume exists in the prepared volumes dict.
        # The test should check for this method call in the extend_requests,
        # and decide whether to extend the volume before invoking the callback
        # function.
        key = (volDict['domainID'], volDict["imageID"], volDict['volumeID'])
        if key not in self.prepared_volumes:
            error = exception.VolumeDoesNotExist
            return response.error_raw(error.code, error.msg)

        self.extend_requests.append((spUUID, volDict, newSize, callbackFunc))
        return response.success()
Exemplo n.º 6
0
    def _callMethod(self, methodName, *args, **kwargs):
        try:
            method = _COMMAND_CONVERTER[methodName]
        except KeyError as e:
            raise Exception("Attempt to call function: %s with "
                            "arguments: %s error: %s" %
                            (methodName, args, e))

        class_name, method_name = method.split('.')
        params = self._prepare_args(class_name, method_name, args, kwargs)

        req = JsonRpcRequest(method, params, reqId=str(uuid4()))

        responses = self._client.call(
            req, timeout=self._timeouts.get(
                method_name,
                kwargs.pop('_transport_timeout', self._default_timeout)))
        if responses:
            resp = responses[0]
        else:
            raise JsonRpcNoResponseError(method)

        if resp.error is not None:
            return response.error_raw(resp.error["code"],
                                      resp.error["message"])

        if not self._xml_compat:
            return response.success_raw(resp.result)

        if resp.result and resp.result is not True:
            # None is translated to True inside our JSONRPC implementation
            if isinstance(resp.result, list):
                return response.success(items=resp.result)
            elif isinstance(resp.result, six.string_types):
                return response.success(resp.result)
            else:
                return response.success(**resp.result)

        return response.success()
Exemplo n.º 7
0
    def _callMethod(self, methodName, *args, **kwargs):
        try:
            method = _COMMAND_CONVERTER[methodName]
        except KeyError as e:
            raise Exception("Attempt to call function: %s with "
                            "arguments: %s error: %s" % (methodName, args, e))

        class_name, method_name = method.split('.')
        params = self._prepare_args(class_name, method_name, args, kwargs)

        req = JsonRpcRequest(method, params, reqId=str(uuid4()))

        responses = self._client.call(req,
                                      timeout=self._timeouts.get(
                                          method_name,
                                          kwargs.pop('_transport_timeout',
                                                     self._default_timeout)))
        if responses:
            resp = responses[0]
        else:
            raise JsonRpcNoResponseError(method)

        if resp.error is not None:
            return response.error_raw(resp.error["code"],
                                      resp.error["message"])

        if not self._xml_compat:
            return response.success_raw(resp.result)

        if resp.result and resp.result is not True:
            # None is translated to True inside our JSONRPC implementation
            if isinstance(resp.result, list):
                return response.success(items=resp.result)
            elif isinstance(resp.result, six.string_types):
                return response.success(resp.result)
            else:
                return response.success(**resp.result)

        return response.success()
Exemplo n.º 8
0
    def getVolumeInfo(self, sdUUID, spUUID, imgUUID, volUUID):
        if (sdUUID, volUUID) not in self.prepared_volumes:
            error = exception.VolumeDoesNotExist
            return response.error_raw(error.code, error.msg)

        return response.success(info=self.prepared_volumes[(sdUUID, volUUID)])