def test_validate_dependency_registration(self): # w/o dependency parameter obj = 'dep_file' params = {'Dependency-Version': '1.0'} StorletGatewayDocker.validate_dependency_registration(params, obj) # w/ correct dependency parameter params = { 'Dependency-Permissions': '755', 'Dependency-Version': '1.0'} StorletGatewayDocker.validate_dependency_registration(params, obj) # w/ wrong dependency parameter params = { 'Dependency-Permissions': '400', 'Dependency-Version': '1.0'} with self.assertRaises(ValueError): StorletGatewayDocker.validate_dependency_registration(params, obj) # w/ invalid dependency parameter params = { 'Dependency-Permissions': 'foo', 'Dependency-Version': '1.0'} with self.assertRaises(ValueError): StorletGatewayDocker.validate_dependency_registration(params, obj) params = { 'Dependency-Permissions': '888', 'Dependency-Version': '1.0'} with self.assertRaises(ValueError): StorletGatewayDocker.validate_dependency_registration(params, obj)
def test_check_mandatory_params(self): params = {'keyA': 'valueA', 'keyB': 'valueB', 'keyC': 'valueC'} # all mandatory headers are included StorletGatewayDocker._check_mandatory_params( params, ['keyA', 'keyB']) # some of mandatory headers are missing with self.assertRaises(ValueError): StorletGatewayDocker._check_mandatory_params( params, ['keyA', 'KeyD'])
def set_storlet_request(self, req_resp, params): self.gateway = StorletGatewayDocker(self.conf, self.logger, self.app, self.version, self.account, self.container, self.obj) self.gateway_method = getattr(self.gateway, "gateway" + self.server.title() + self.method.title() + "Flow") # Set the Storlet Metadata to storletgateway md = {} md['X-Object-Meta-Storlet-Main'] = self.storlet_metadata['main'] md['X-Object-Meta-Storlet-Dependency'] = self.storlet_metadata['dependencies'] md['Content-Length'] = self.storlet_metadata['size'] #md['ETag'] = self.storlet_metadata['etag'] self.gateway.storlet_metadata = md # Simulate Storlet request new_env = dict(req_resp.environ) req = Request.blank(new_env['PATH_INFO'], new_env) req.headers['X-Run-Storlet'] = self.storlet_name self.gateway.augmentStorletRequest(req) req.environ['QUERY_STRING'] = params.replace(',', '&') return req
def test_validate_storlet_registration(self): # correct name and headers obj = 'storlet-1.0.jar' params = {'Language': 'java', 'Interface-Version': '1.0', 'Dependency': 'dep_file', 'Object-Metadata': 'no', 'Main': 'path.to.storlet.class'} StorletGatewayDocker.validate_storlet_registration(params, obj) # some header keys are missing params = {'Language': 'java', 'Interface-Version': '1.0', 'Dependency': 'dep_file', 'Object-Metadata': 'no'} with self.assertRaises(ValueError): StorletGatewayDocker.validate_storlet_registration(params, obj) # wrong name obj = 'storlet.jar' params = {'Language': 'java', 'Interface-Version': '1.0', 'Dependency': 'dep_file', 'Object-Metadata': 'no', 'Main': 'path.to.storlet.class'} with self.assertRaises(ValueError): StorletGatewayDocker.validate_storlet_registration(params, obj)
class SDSGatewayStorlet(): def __init__(self, conf, logger, request_data): self.conf = conf self.logger = logger self.app = request_data['app'] self.version = request_data['api_version'] self.account = request_data['account'] self.container = request_data['container'] self.obj = request_data['object'] self.gateway = None self.storlet_metadata = None self.storlet_name = None self.method = request_data['method'] self.server = self.conf['execution_server'] self.gateway_method = None def set_storlet_request(self, req_resp, params): self.gateway = StorletGatewayDocker(self.conf, self.logger, self.app, self.version, self.account, self.container, self.obj) self.gateway_method = getattr(self.gateway, "gateway" + self.server.title() + self.method.title() + "Flow") # Set the Storlet Metadata to storletgateway md = {} md['X-Object-Meta-Storlet-Main'] = self.storlet_metadata['main'] md['X-Object-Meta-Storlet-Dependency'] = self.storlet_metadata['dependencies'] md['Content-Length'] = self.storlet_metadata['size'] #md['ETag'] = self.storlet_metadata['etag'] self.gateway.storlet_metadata = md # Simulate Storlet request new_env = dict(req_resp.environ) req = Request.blank(new_env['PATH_INFO'], new_env) req.headers['X-Run-Storlet'] = self.storlet_name self.gateway.augmentStorletRequest(req) req.environ['QUERY_STRING'] = params.replace(',', '&') return req def launch_storlet(self, req_resp, params, input_pipe=None): req = self.set_storlet_request(req_resp, params) (_, app_iter) = self.gateway_method(req, self.container, self.obj, req_resp, input_pipe) return app_iter def execute_storlet(self, req_resp, storlet_data, app_iter): storlet = storlet_data['name'] params = storlet_data['params'] self.storlet_name = storlet self.storlet_metadata = storlet_data self.logger.info('Crystal Filters - Go to execute ' + storlet + ' storlet with parameters "' + params + '"') app_iter = self.launch_storlet(req_resp, params, app_iter) return app_iter