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()
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()
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']))
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)
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()
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()
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()
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)])