def test_invocation_protocol_remote_fds(self): # In default, we have 5 fds in remote_fds storlet_request = DockerStorletRequest(self.storlet_id, {}, {}, iter(StringIO()), options=self.options) protocol = StorletInvocationProtocol(storlet_request, self.pipe_path, self.log_file, 1, self.logger) self.assertEqual(5, len(protocol.remote_fds)) # extra_resources expands the remote_fds storlet_request = DockerStorletRequest(self.storlet_id, {}, {}, iter(StringIO()), options=self.options) protocol = StorletInvocationProtocol(storlet_request, self.pipe_path, self.log_file, 1, self.logger, extra_sources=[storlet_request]) self.assertEqual(6, len(protocol.remote_fds)) # 2 more extra_resources expands the remote_fds storlet_request = DockerStorletRequest(self.storlet_id, {}, {}, iter(StringIO()), options=self.options) protocol = StorletInvocationProtocol(storlet_request, self.pipe_path, self.log_file, 1, self.logger, extra_sources=[storlet_request] * 3) self.assertEqual(8, len(protocol.remote_fds))
def invocation_flow(self, sreq, extra_sources=None): """ Invoke the backend protocl with gateway :param sreq: StorletRequest instance :param extra_sources (WIP): A list of StorletRequest instance to gather as extra resoureces to feed to storlet container as data source :return: StorletResponse instance """ run_time_sbox = RunTimeSandbox(self.scope, self.conf, self.logger) docker_updated = self.update_docker_container_from_cache(sreq) run_time_sbox.activate_storlet_daemon(sreq, docker_updated) self._add_system_params(sreq) slog_path = self.paths.get_host_slog_path(sreq.storlet_main) storlet_pipe_path = \ self.paths.get_host_storlet_pipe(sreq.storlet_main) sprotocol = StorletInvocationProtocol(sreq, storlet_pipe_path, slog_path, self.storlet_timeout, self.logger, extra_sources=extra_sources) sresp = sprotocol.communicate() self._upload_storlet_logs(slog_path, sreq) return sresp
def setUp(self): self.pipe_path = tempfile.mktemp() self.log_file = tempfile.mktemp() self.logger = FakeLogger() self.storlet_id = 'Storlet-1.0.jar' self.options = {'storlet_main': 'org.openstack.storlet.Storlet', 'storlet_dependency': 'dep1,dep2', 'storlet_language': 'java', 'file_manager': FakeFileManager('storlet', 'dep')} storlet_request = DockerStorletRequest( self.storlet_id, {}, {}, iter(StringIO()), options=self.options) self.protocol = StorletInvocationProtocol( storlet_request, self.pipe_path, self.log_file, 1, self.logger)