예제 #1
0
        public void Run_WithRestrictionOfOneAndMultipleAcrions_AllActionsAreRunned()
        {
            // Arrange
            var action1 = A.Fake <IAction>();

            A.CallTo(() => action1.Action()).Invokes(() => Thread.Sleep(50));

            var action2 = A.Fake <IAction>();

            A.CallTo(() => action2.Action()).Invokes(() => Thread.Sleep(50));

            var action3 = A.Fake <IAction>();

            A.CallTo(() => action3.Action()).Invokes(() => Thread.Sleep(50));

            var runner = new RestrictedThreadPoolRunner(1);

            // Act
            runner.Run(action1.Action, action2.Action, action3.Action);

            // Assert
            Thread.Sleep(1000);
            A.CallTo(() => action1.Action())
            .MustHaveHappened(Repeated.Exactly.Once);

            A.CallTo(() => action2.Action())
            .MustHaveHappened(Repeated.Exactly.Once);

            A.CallTo(() => action3.Action())
            .MustHaveHappened(Repeated.Exactly.Once);
        }
예제 #2
0
        public void Run_DisposeWhileRunning_ExitsGracefully()
        {
            // Arrange
            var action1 = A.Fake <IAction>();

            A.CallTo(() => action1.Action()).Invokes(() => Thread.Sleep(200));

            var action2 = A.Fake <IAction>();

            A.CallTo(() => action2.Action()).Invokes(() => Thread.Sleep(200));

            // Act
            using (var runner = new RestrictedThreadPoolRunner(1))
            {
                runner.Run(action1.Action, action2.Action);
            }

            // Assert
            Thread.Sleep(1000);

            A.CallTo(() => action1.Action())
            .MustHaveHappened(Repeated.Exactly.Once);

            A.CallTo(() => action2.Action())
            .MustNotHaveHappened();
        }
예제 #3
0
        public void Run_WithRestrictionOfTwoAndTwoActions_ActionsAreRunnedOnDifferentThreads()
        {
            // Arrange
            int?   thread1 = null;
            Action action1 = () => { thread1 = Thread.CurrentThread.ManagedThreadId; Thread.Sleep(30); };

            int?   thread2 = null;
            Action action2 = () => { thread2 = Thread.CurrentThread.ManagedThreadId; Thread.Sleep(30); };

            var runner = new RestrictedThreadPoolRunner(2);

            // Act
            runner.Run(action1, action2);

            // Assert
            Thread.Sleep(100);

            Assert.NotNull(thread1);
            Assert.NotEqual(Thread.CurrentThread.ManagedThreadId, thread1);

            Assert.NotNull(thread2);
            Assert.NotEqual(Thread.CurrentThread.ManagedThreadId, thread2);

            Assert.NotEqual(thread1, thread2);
        }