Exemple #1
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);
        }
Exemple #2
0
        static void Main(string[] args)
        {
            //Debugger.Launch();

            if (args.Length == 0)
            {
                ExitWithError("Must specify container-id as the first argument.", -1);
            }

            containerId = args[0];

            hostJobObject = new JobObject(null);

            hostProcess = ProcessHelper.WrapProcess(Process.GetCurrentProcess());

            var input  = Console.In;
            var output = Console.Out;

            using (var transport = MessageTransport.Create(input, output))
            {
                processTracker = new ProcessTracker(transport, hostJobObject, hostProcess, new ProcessHelper());

                var createProcessHandler      = new CreateProcessHandler(new ProcessRunner(), processTracker);
                var pingHandler               = new PingHandler();
                var findProcessByIdHandler    = new FindProcessByIdHandler(processTracker);
                var stopProcessHandler        = new StopProcessHandler(processTracker);
                var stopAllProcessesHandler   = new StopAllProcessesHandler(processTracker);
                var waitForProcessExitHandler = new WaitForProcessExitHandler(processTracker);

                var dispatcher = new MessageDispatcher();
                dispatcher.RegisterMethod <CreateProcessRequest>(
                    CreateProcessRequest.MethodName,
                    async(request) =>
                {
                    var result = await createProcessHandler.ExecuteAsync(request.@params);
                    return(new CreateProcessResponse(request.id, result));
                });
                dispatcher.RegisterMethod <PingRequest>(
                    PingRequest.MethodName,
                    async(request) =>
                {
                    await pingHandler.ExecuteAsync();
                    return(new PingResponse(request.id));
                });
                dispatcher.RegisterMethod <FindProcessByIdRequest>(
                    FindProcessByIdRequest.MethodName,
                    async(request) =>
                {
                    var result = await findProcessByIdHandler.ExecuteAsync(request.@params);
                    return(new FindProcessByIdResponse(request.id, result));
                });
                dispatcher.RegisterMethod <StopProcessRequest>(
                    StopProcessRequest.MethodName,
                    async(request) =>
                {
                    await stopProcessHandler.ExecuteAsync(request.@params);
                    return(new StopProcessResponse(request.id));
                });
                dispatcher.RegisterMethod <StopAllProcessesRequest>(
                    StopAllProcessesRequest.MethodName,
                    async(request) =>
                {
                    await stopAllProcessesHandler.ExecuteAsync(request.@params);
                    return(new StopAllProcessesResponse(request.id));
                });
                dispatcher.RegisterMethod <WaitForProcessExitRequest>(
                    WaitForProcessExitRequest.MethodName,
                    async(request) =>
                {
                    var result = await waitForProcessExitHandler.ExecuteAsync(request.@params);
                    return(new WaitForProcessExitResponse(request.id, result));
                });

                transport.SubscribeRequest(
                    async(request) =>
                {
                    var response = await dispatcher.DispatchAsync(request);
                    await transport.PublishResponseAsync(response);
                });

                transport.Start();

                ReportOk();
                exitEvent.WaitOne();
            }
        }