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;
        }
Exemple #3
0
        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));
        }
Exemple #4
0
        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); });
            }
Exemple #9
0
        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);
        }
Exemple #11
0
        public CreateProcessResult CreateProcess(CreateProcessParams @params)
        {
            var response = SendMessage <CreateProcessRequest, CreateProcessResponse>(new CreateProcessRequest(@params));

            return(response.result);
        }