예제 #1
0
        public void QueueProcessorMonitor_WorkerCreated()
        {
            var mockProcessFactory      = new Mock <IProcessFactory>();
            var mockQueueConfigLoader   = new Mock <IQueueConfigLoader>();
            var mockChildProcessTracker = new Mock <IChildProcessTracker>();

            var triggersCatalogForTesting = new TriggersCatalogForTesting();

            _ = new QueueWorkerMonitor(mockProcessFactory.Object, mockQueueConfigLoader.Object, triggersCatalogForTesting, mockChildProcessTracker.Object);

            triggersCatalogForTesting.CallOnChanged(Guid.NewGuid());
            triggersCatalogForTesting.CallOnDeleted(Guid.NewGuid());
            triggersCatalogForTesting.CallOnCreated(Guid.NewGuid());
        }
        public void QueueProcessorMonitor_Start_Success()
        {
            //----------------------------Arrange-----------------------------
            var mockProcessFactory      = new Mock <IProcessFactory>();
            var mockQueueConfigLoader   = new Mock <IQueueConfigLoader>();
            var mockProcess             = new Mock <IProcess>();
            var mockTriggerCatalog      = new Mock <ITriggersCatalog>();
            var mockChildProcessTracker = new Mock <IChildProcessTracker>();
            var mockTriggerObject       = new Mock <ITrigger>();

            mockTriggerObject.Setup(o => o.Concurrency).Returns(1);
            mockQueueConfigLoader.Setup(o => o.Configs).Returns(new List <ITrigger> {
                mockTriggerObject.Object
            });

            var pass = true;

            mockProcessFactory.Setup(o => o.Start(It.IsAny <ProcessStartInfo>()))
            .Callback <ProcessStartInfo>((startInfo) => { if (pass)
                                                          {
                                                              pass = (GlobalConstants.QueueWorkerExe == startInfo.FileName);
                                                          }
                                         })
            .Returns(mockProcess.Object);

            //----------------------------Act---------------------------------
            var processMonitor = new QueueWorkerMonitor(
                mockProcessFactory.Object,
                mockQueueConfigLoader.Object,
                mockTriggerCatalog.Object,
                mockChildProcessTracker.Object);

            mockProcess.SetupSequence(o => o.WaitForExit(1000))
            .Returns(() => { Thread.Sleep(1000); return(false); })
            .Returns(false).Returns(true)
            .Returns(() => { Thread.Sleep(1000); return(false); })
            .Returns(false).Returns(() => { processMonitor.Shutdown(); return(true); });

            new Thread(() => processMonitor.Start()).Start();
            Thread.Sleep(5000);
            //----------------------------Assert------------------------------
            mockProcess.Verify(o => o.WaitForExit(1000), Times.Exactly(6));
            mockProcessFactory.Verify(o => o.Start(It.IsAny <ProcessStartInfo>()), Times.Exactly(2));

            Assert.IsTrue(pass, "Queue worker exe incorrect");
        }