public Task<CreateProcessResult> ExecuteAsync(CreateProcessParams p) { var runSpec = new ProcessRunSpec { ExecutablePath = p.executablePath, Arguments = p.arguments, Environment = p.environment, WorkingDirectory = p.workingDirectory, OutputCallback = (data) => { processTracker.HandleProcessData(p.key, ProcessDataType.STDOUT, data); }, ErrorCallback = (data) => { processTracker.HandleProcessData(p.key, ProcessDataType.STDERR, data); }, }; var process = processRunner.Run(runSpec); processTracker.TrackProcess(p.key, process); var result = new CreateProcessResult { id = process.Id, }; return Task.FromResult(result); }
public IProcess Run(ProcessRunSpec runSpec) { Guid processKey = Guid.NewGuid(); var defaultEnvironmentBlock = EnvironmentBlock.CreateSystemDefault(); var environment = defaultEnvironmentBlock.Merge(runSpec.Environment).ToDictionary(); CreateProcessParams @params = new CreateProcessParams { key = processKey, executablePath = runSpec.ExecutablePath, arguments = runSpec.Arguments, environment = environment, workingDirectory = runSpec.WorkingDirectory }; var processDataCallback = BuildProcessDataCallback(runSpec.OutputCallback, runSpec.ErrorCallback); hostClient.SubscribeToProcessData(processKey, processDataCallback); var result = hostClient.CreateProcess(@params); var process = new ConstrainedProcess(hostClient, processKey, result.id, environment); return process; }
public Task <CreateProcessResult> ExecuteAsync(CreateProcessParams p) { var runSpec = new ProcessRunSpec { ExecutablePath = p.executablePath, Arguments = p.arguments, Environment = p.environment, WorkingDirectory = p.workingDirectory, OutputCallback = (data) => { processTracker.HandleProcessData(p.key, ProcessDataType.STDOUT, data); }, ErrorCallback = (data) => { processTracker.HandleProcessData(p.key, ProcessDataType.STDERR, data); }, }; var process = processRunner.Run(runSpec); processTracker.TrackProcess(p.key, process); var result = new CreateProcessResult { id = process.Id, }; return(Task.FromResult(result)); }
public IProcess Run(ProcessRunSpec runSpec) { Guid processKey = Guid.NewGuid(); var defaultEnvironmentBlock = EnvironmentBlock.CreateSystemDefault(); var environment = defaultEnvironmentBlock.Merge(runSpec.Environment).ToDictionary(); CreateProcessParams @params = new CreateProcessParams { key = processKey, executablePath = runSpec.ExecutablePath, arguments = runSpec.Arguments, environment = environment, workingDirectory = runSpec.WorkingDirectory }; var processDataCallback = BuildProcessDataCallback(runSpec.OutputCallback, runSpec.ErrorCallback); hostClient.SubscribeToProcessData(processKey, processDataCallback); var result = hostClient.CreateProcess(@params); var process = new ConstrainedProcess(hostClient, processKey, result.id, environment); return(process); }
public void ReturnsResultFromResponse() { var @params = new CreateProcessParams { executablePath = "foo.exe", }; var result = Client.CreateProcess(@params); Assert.Same(ExpectedResult, result); }
public CreateProcessResult CreateProcess(CreateProcessParams @params) { CreateProcessResponse response; if (!TrySendMessage <CreateProcessRequest, CreateProcessResponse>(new CreateProcessRequest(@params), new TimeSpan(0, 0, 0, 0, DefaultCreateProcessTimeout), out response)) { throw new TimeoutException("CreateProcess timed out"); } return(response.result); }
public void SendsRequestWithParams() { var @params = new CreateProcessParams { executablePath = "foo.exe", }; Client.CreateProcess(@params); MessagingClient.Received(1).SendMessageAsync <CreateProcessRequest, CreateProcessResponse>( Arg.Is <CreateProcessRequest>(request => request.@params == @params ) ); }
public void WhenTimeoutOccurs_ThrowException() { var @params = new CreateProcessParams { executablePath = "foo.exe", }; MessagingClient.SendMessageAsync <CreateProcessRequest, CreateProcessResponse>(null) .ReturnsForAnyArgs(async(call) => { await Task.Delay(16 * 1000); return(ExpectedResponse); }); Assert.Throws <TimeoutException>(() => { Client.CreateProcess(@params); }); }
public CreateProcessHandlerTests() { ProcessRunner = Substitute.For <IProcessRunner>(); ProcessTracker = Substitute.For <IProcessTracker>(); Handler = new CreateProcessHandler(ProcessRunner, ProcessTracker); ExpectedParams = new CreateProcessParams { executablePath = "cmd.exe", arguments = new[] { "/C", "echo Hello" }, key = Guid.NewGuid(), workingDirectory = @"C:\Containers\handle\user", }; ExpectedProcess = Substitute.For <IProcess>(); ProcessRunner.Run(null).ReturnsForAnyArgs(ExpectedProcess); }
public CreateProcessHandlerTests() { ProcessRunner = Substitute.For<IProcessRunner>(); ProcessTracker = Substitute.For<IProcessTracker>(); Handler = new CreateProcessHandler(ProcessRunner, ProcessTracker); ExpectedParams = new CreateProcessParams { executablePath = "cmd.exe", arguments = new[] { "/C", "echo Hello" }, key = Guid.NewGuid(), workingDirectory = @"C:\Containers\handle\user", }; ExpectedProcess = Substitute.For<IProcess>(); ProcessRunner.Run(null).ReturnsForAnyArgs(ExpectedProcess); }
public CreateProcessResult CreateProcess(CreateProcessParams @params) { var response = SendMessage <CreateProcessRequest, CreateProcessResponse>(new CreateProcessRequest(@params)); return(response.result); }