Example #1
0
        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>()));
        }
Example #2
0
        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");
            }
        }
Example #3
0
        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);
        }