コード例 #1
0
        public void IntegrationHandlesExceptionDuringIntegration()
        {
            var triggered            = false;
            var trigger              = GenerateRunOnceTrigger(() => triggered = true);
            var executionFactoryMock = new Mock <ITaskExecutionFactory>(MockBehavior.Strict);

            InitialiseExecutionContext(executionFactoryMock);
            var project = new ProjectStub("Test")
            {
                TaskExecutionFactory = executionFactoryMock.Object,
                OnLoadState          = () => { },
                OnSaveState          = () => { },
                Clock       = new SystemClock(),
                OnIntegrate = ir =>
                {
                    throw new Exception();
                }
            };

            project.Triggers.Add(trigger);
            project.Start();

            // Give the project time to start
            Thread.Sleep(100);
            project.Stop();

            // Give the project time to stop
            Thread.Sleep(1000);
            Assert.IsTrue(triggered);
            Assert.IsNull(project.MainThreadException);
            Assert.AreEqual(IntegrationStatus.Error, project.PersistedState.LastIntegration.Status);
        }
コード例 #2
0
        public void StopCleansUpTriggers()
        {
            var cleaned = false;
            var trigger = new TriggerStub
            {
                OnCleanUp     = () => cleaned = true,
                OnCheckAction = () => null
            };
            var project = new ProjectStub("Test")
            {
                OnLoadState = () => { }
            };

            project.Triggers.Add(trigger);
            project.Start();

            // Give the project time to start
            Thread.Sleep(100);
            project.Stop();

            // Give the project time to stop
            Thread.Sleep(1000);
            Assert.IsTrue(cleaned);
            Assert.IsNull(project.MainThreadException);
        }
コード例 #3
0
        public void StopMessageStopsProject()
        {
            var stopped = false;
            var project = new ProjectStub
            {
                Name        = "Test",
                OnLoadState = () => { },
                OnStop      = () => stopped = true
            };
            var request = new Messages.Blank();

            project.Start();
            Thread.Sleep(100);
            project.Stop(request);
            Thread.Sleep(500);
            Assert.IsTrue(stopped);
        }
コード例 #4
0
        public void StopStopsAStartedProject()
        {
            var project = new ProjectStub("Test")
            {
                OnLoadState = () => { }
            };

            project.Start();

            // Give the project time to start
            Thread.Sleep(100);
            project.Stop();

            // Give the project time to stop
            Thread.Sleep(1000);
            Assert.AreEqual(ProjectState.Stopped, project.State);
            Assert.IsNull(project.MainThreadException);
        }
コード例 #5
0
        public void IntegrationAsksHostAndContinuesOnAllowed()
        {
            var triggered = false;
            var trigger   = GenerateRunOnceTrigger(() => triggered = true);
            var ran       = false;
            var task      = new TaskStub
            {
                OnRunAction = tc =>
                {
                    ran = true;
                    return(null);
                }
            };
            var hostMock = new Mock <ServerItem>(MockBehavior.Strict);

            hostMock.Setup(h => h.AskToIntegrate(It.IsAny <IntegrationContext>()));
            var executionFactoryMock = new Mock <ITaskExecutionFactory>(MockBehavior.Strict);

            InitialiseExecutionContext(executionFactoryMock);
            var project = new ProjectStub("Test", task)
            {
                Host = hostMock.Object,
                TaskExecutionFactory = executionFactoryMock.Object,
                OnLoadState          = () => { },
                OnSaveState          = () => { },
                Clock = new SystemClock()
            };

            project.Triggers.Add(trigger);
            project.Start();

            // Give the project time to start
            Thread.Sleep(100);
            project.Stop();

            // Give the project time to stop
            Thread.Sleep(1000);
            Assert.IsTrue(triggered);
            Assert.IsTrue(ran);
            Assert.IsNull(project.MainThreadException);
        }
コード例 #6
0
        public void IntegrationStartsFromTrigger()
        {
            var triggered = false;
            var trigger   = GenerateRunOnceTrigger(() => triggered = true);
            var ran       = false;
            var task      = new TaskStub
            {
                OnRunAction = tc =>
                {
                    ran = true;
                    return(null);
                }
            };
            var executionFactoryMock = new Mock <ITaskExecutionFactory>(MockBehavior.Strict);

            InitialiseExecutionContext(executionFactoryMock);
            var project = new ProjectStub("Test", task)
            {
                TaskExecutionFactory = executionFactoryMock.Object,
                OnLoadState          = () => { },
                OnSaveState          = () => { },
                Clock = new SystemClock()
            };

            project.Triggers.Add(trigger);
            project.Start();

            // Give the project time to start
            Thread.Sleep(100);
            project.Stop();

            // Give the project time to stop
            Thread.Sleep(1000);
            Assert.IsTrue(triggered);
            Assert.IsTrue(ran);
            Assert.IsNull(project.MainThreadException);
        }