public void ProcessThread_Start_GivenValid_ExpectNewProcessCreated() { var mockConfig = new Mock <IJobConfig>(); var mockChildProcessTracker = new Mock <IChildProcessTracker>(); var mockProcessFactory = new Mock <IProcessFactory>(); var mockProcess = new Mock <IProcess>(); mockProcess.Setup(o => o.WaitForExit(It.IsAny <int>())).Returns(true); var process = mockProcess.Object; mockProcessFactory.Setup(o => o.Start(_startInfo)).Returns(process); var expectedConfig = mockConfig.Object; var processThread = new ProcessThreadForTesting(_startInfo, mockChildProcessTracker.Object, mockProcessFactory.Object, expectedConfig); var done = false; processThread.OnProcessDied += (config) => done = true; processThread.Start(); while (!done) { } mockChildProcessTracker.Verify(o => o.Add(process), Times.Once); mockProcessFactory.Verify(o => o.Start(_startInfo), Times.Once); // also need to verify a restart mockProcess.Verify(o => o.WaitForExit(It.IsAny <int>())); }
public void ProcessThread_Kill_GivenDeadProcess_DoNotThrow() { var mockConfig = new Mock <IJobConfig>(); var mockChildProcessTracker = new Mock <IChildProcessTracker>(); var mockProcessFactory = new Mock <IProcessFactory>(); var mockProcess = new Mock <IProcess>(); mockProcess.Setup(o => o.WaitForExit(It.IsAny <int>())).Returns(true); var process = mockProcess.Object; mockProcessFactory.Setup(o => o.Start(_startInfo)).Returns(process); var expectedConfig = mockConfig.Object; var processThread = new ProcessThreadForTesting(_startInfo, mockChildProcessTracker.Object, mockProcessFactory.Object, expectedConfig); var done = false; processThread.OnProcessDied += (config) => done = true; processThread.Start(); while (!done) { } try { processThread.Kill(); } catch { Assert.Fail("kill throws exception when it should not"); } }
public void ProcessThread_Constructor() { var mockConfig = new Mock <IJobConfig>(); var mockChildProcessTracker = new Mock <IChildProcessTracker>(); var mockProcessFactory = new Mock <IProcessFactory>(); var expectedConfig = mockConfig.Object; var processThread = new ProcessThreadForTesting(_startInfo, mockChildProcessTracker.Object, mockProcessFactory.Object, expectedConfig); Assert.AreEqual(mockConfig.Object, processThread.Config); Assert.IsFalse(processThread.IsAlive); Assert.AreEqual(0, processThread.Pid); }
public void ProcessThreadList_GivenWorkerDies_ExpectOnProcessDiedCalled() { var mockConfig = new Mock <IJobConfig>(); var mockProcessFactory = new Mock <ITestProcessFactory>(); var process = new ProcessThreadForTesting(mockConfig.Object); mockProcessFactory.Setup(o => o.New()).Returns(process); mockConfig.Setup(o => o.Concurrency).Returns(102); var expectedConfig = mockConfig.Object; var list = new ProcessThreadListForTesting(expectedConfig, mockProcessFactory.Object); var lists_OnProcessDiedCalled = false; list.OnProcessDied += (config) => lists_OnProcessDiedCalled = true; Assert.AreEqual(expectedConfig, list.Config); Assert.IsTrue(list.NeedUpdate); list.Monitor(); mockProcessFactory.Verify(o => o.New(), Times.Exactly(Environment.ProcessorCount)); process.ForceProcessDiedEvent(); Assert.IsTrue(lists_OnProcessDiedCalled); }