public void RunContainerExit0() { var command = "cmd /c exit"; var cs = new ContainerSettings { SandboxPath = sandbox.path, Layers = sandbox.layers, KillOnClose = true, NetworkId = HostComputeService.FindNatNetwork(), }; using (var container = HostComputeService.CreateContainer(id.ToString(), cs)) { container.Start(); var si = new ProcessStartInfo { CommandLine = command, KillOnClose = false, }; using (var process = container.CreateProcess(si)) { Assert.True(process.WaitForExit(10000), "Process did not exit after 10 seconds"); Assert.Equal(0, process.ExitCode); } container.Shutdown(); } }
public void ProcessKillOnCloseWithKillCannotHang() { var command = "powershell -c sleep 10000"; var cs = new ContainerSettings { SandboxPath = sandbox.path, Layers = sandbox.layers, KillOnClose = true, NetworkId = HostComputeService.FindNatNetwork(), }; using (var container = HostComputeService.CreateContainer(id.ToString(), cs)) { container.Start(); var si = new ProcessStartInfo { CommandLine = command, KillOnClose = true, }; var process = container.CreateProcess(si); process.Kill(); Assert.True(Task.Factory.StartNew(() => { process.Dispose(); }).Wait(10000)); container.Shutdown(); } }
public void ContainerKillOnCloseCannotHang() { var cs = new ContainerSettings { SandboxPath = sandbox.path, Layers = sandbox.layers, KillOnClose = true, NetworkId = HostComputeService.FindNatNetwork(), }; var container = HostComputeService.CreateContainer(id.ToString(), cs); container.Start(); Assert.True(Task.Factory.StartNew(() => { container.Dispose(); }).Wait(10000)); Assert.ThrowsAny <Exception>(() => { HostComputeService.GetComputeSystem(id.ToString()); }); }
static void Main(string[] args) { try { var parent = args[0]; var path = args[1]; var command = args[2]; var id = Guid.NewGuid(); var layers = new Layer[] { new Layer { Id = id, Path = parent } }; ContainerStorage.CreateSandbox(path, layers); try { Console.Out.WriteLine("creating container"); var cs = new ContainerSettings { SandboxPath = path, Layers = layers, KillOnClose = true, NetworkId = HostComputeService.FindNatNetwork(), }; using (var container = HostComputeService.CreateContainer(id.ToString(), cs)) { Console.Out.WriteLine("starting container"); Console.Out.Flush(); container.Start(); try { var si = new ProcessStartInfo { CommandLine = command, RedirectStandardOutput = true, KillOnClose = true, }; using (var process = container.CreateProcess(si)) { Console.Out.Write(process.StandardOutput.ReadToEnd()); process.WaitForExit(5000); Console.Out.WriteLine("process exited with {0}", process.ExitCode); } } finally { Console.Out.WriteLine("shutting down container"); container.Shutdown(Timeout.Infinite); } } } finally { ContainerStorage.DestroyLayer(path); } } catch (Exception e) { Console.Out.WriteLine(e.Message); Console.Out.WriteLine(e.StackTrace); Environment.Exit(1); } }