public void ExecuteThreadingStressTest()
        {
            var exHandler = new MockExceptionHandler();

            using (var runner = new LocalTaskRunner(exHandler))
            {
                // Start many tasks tasks.
                for (int i = 0; i < 100; i++)
                {
                    runner.StartTask(TestAsync);
                }

                for (int interation = 0; interation < 11; interation++)
                {
                    // Execute from many different threads in parallel.
                    for (int thread = 0; thread < 100; thread++)
                    {
                        ThreadPool.QueueUserWorkItem(r => ((LocalTaskRunner)r).Execute(), runner);
                    }

                    Thread.Sleep(millisecondsTimeout: 100);
                }

                // Assert that all tasks have finished.
                runner.AssertRunningTaskCount(0);
            }

            async Task TestAsync()
            {
                for (int i = 0; i < 10; i++)
                {
                    await Task.Yield();
                }
            }
        }
        public void StartTaskThreadingStressTest()
        {
            var exHandler = new MockExceptionHandler();

            using (var runner = new LocalTaskRunner(exHandler))
            {
                // Start many tasks tasks in parallel.
                for (int i = 0; i < 100; i++)
                {
                    ThreadPool.QueueUserWorkItem(r => ((LocalTaskRunner)r).StartTask(TestAsync), runner);
                }

                // Wait for tasks to start.
                Thread.Sleep(millisecondsTimeout: 1000);

                // Execute a single tick to finish all tasks.
                runner.Execute();

                // Assert that all tasks have finished.
                runner.AssertRunningTaskCount(0);
            }

            async Task TestAsync()
            {
                await Task.Yield();
            }
        }
        public void Setup()
        {
            MockExceptionHandler.Clear();

            handlerData = new CustomHandlerData();
            handlerData.Attributes["foo"] = "bar";
        }
        public void FinishedTasksAreRemovedFromRunner()
        {
            var exHandler = new MockExceptionHandler();

            using (var runner = new LocalTaskRunner(exHandler))
            {
                runner.AssertRunningTaskCount(0);
                runner.StartTask(TestOfTAsync);
                runner.AssertRunningTaskCount(1);
                runner.Execute();
                runner.AssertRunningTaskCount(0);

                runner.AssertRunningTaskCount(0);
                runner.StartTask(TestAsync);
                runner.AssertRunningTaskCount(1);
                runner.Execute();
                runner.AssertRunningTaskCount(0);
            }

            async Task TestAsync()
            {
                await Task.Yield();
            }

            async Task <int> TestOfTAsync()
            {
                await Task.Yield();

                return(42);
            }
        }
        public void Setup()
        {
            MockExceptionHandler.Clear();

            handlerData = new CustomHandlerData("custom", "an invalid type name");
            handlerData.Attributes["foo"] = "bar";
        }
        public void Setup()
        {
            MockExceptionHandler.Clear();

            handlerData = new CustomHandlerData("custom", typeof(TestHandlerWithMissingConstructor));
            handlerData.Attributes["foo"] = "bar";
        }
        public void CallbackPostThreadingStressTest()
        {
            var exHandler = new MockExceptionHandler();

            using (var runner = new LocalTaskRunner(exHandler))
            {
                // Start the stress tasks.
                for (int i = 0; i < 50; i++)
                {
                    runner.StartTask(StressAsync);
                }

                // Execute enough times to finish all tasks.
                for (int i = 0; i < 99; i++)
                {
                    runner.Execute();
                    Thread.Sleep(10);
                }

                // Assert that all tasks have finished.
                runner.AssertRunningTaskCount(0);
            }

            async Task StressAsync()
            {
                /* This stresses the sync-context by posting callbacks from many different threads. */
                for (int i = 0; i < 50; i++)
                {
                    await Task.Run(() => Thread.Yield());
                }
            }
        }
        public void CanBeDisposedMultipleTimes()
        {
            var exHandler = new MockExceptionHandler();
            var runner    = new LocalTaskRunner(exHandler);

            runner.Dispose();
            runner.Dispose();
        }
        public void DoesNotAllowExecuteAfterDispose()
        {
            var exHandler = new MockExceptionHandler();
            var runner    = new LocalTaskRunner(exHandler);

            runner.Dispose();

            Assert.Throws <ObjectDisposedException>(() => runner.Execute());
        }
        public void DoesNotAllowStartingTaskAfterDispose()
        {
            var exHandler = new MockExceptionHandler();
            var runner    = new LocalTaskRunner(exHandler);

            runner.Dispose();

            Assert.Throws <ObjectDisposedException>(() => runner.StartTask(() => Task.CompletedTask));
            Assert.Throws <ObjectDisposedException>(() => runner.StartTask(() => Task.FromResult <int>(42)));
        }
        public AzureBlobApplicationInstanceIdRenterTests()
        {
            this.ExceptionHandler = new MockExceptionHandler();

            var hostBuilder = new HostBuilder();

            hostBuilder.ConfigureServices(services => services.AddSingleton <IExceptionHandler>(this.ExceptionHandler));
            this.Host   = hostBuilder.Build();
            this.Repo   = new MockBlobContainerRepo();
            this.Renter = new AzureBlobApplicationInstanceIdRenter(this.Host.Services, this.Repo);
        }
        public void ThrowsForTaskCreatorsThatReturnsNull()
        {
            var exHandler = new MockExceptionHandler();

            using (var runner = new LocalTaskRunner(exHandler))
            {
                Assert.Throws <TaskCreatorReturnedNullException>(() => runner.StartTask(TaskReturnNull));
                Assert.Throws <TaskCreatorReturnedNullException>(() => runner.StartTask(TaskOfTReturnNull));
            }

            Task TaskReturnNull() => null;
            Task <int> TaskOfTReturnNull() => null;
        }
        public void ThrowWhenTaskChangesSyncronizationContextInSyncronousPart()
        {
            var exHandler = new MockExceptionHandler();

            using (var runner = new LocalTaskRunner(exHandler))
            {
                Assert.Throws <ContextChangedException>(() => runner.StartTask(TaskThatChangesSyncContext));
            }

            Task TaskThatChangesSyncContext()
            {
                SynchronizationContext.SetSynchronizationContext(new MockSynchronizationContext());
                return(Task.CompletedTask);
            }
        }
        public void ResetsPreviousSynchronizationContextAfterExecute()
        {
            // Set custom sync-context.
            var syncContext = new MockSynchronizationContext();

            SynchronizationContext.SetSynchronizationContext(syncContext);

            var exHandler = new MockExceptionHandler();

            using (var runner = new LocalTaskRunner(exHandler))
            {
                runner.Execute();
            }

            // Verify that its again active.
            Assert.True(SynchronizationContext.Current == syncContext);
        }
        public void ResetsPreviousSynchronizationContextWhenTaskCreatorThrows()
        {
            // Set custom sync-context.
            var syncContext = new MockSynchronizationContext();

            SynchronizationContext.SetSynchronizationContext(syncContext);

            var exHandler = new MockExceptionHandler();

            using (var runner = new LocalTaskRunner(exHandler))
            {
                Assert.Throws <TestException>(() => runner.StartTask(() => throw new TestException()));
            }

            // Verify that its again active.
            Assert.True(SynchronizationContext.Current == syncContext);
        }
        public void StartingCompletedTaskIsReturnedDirectly()
        {
            var tcs = new TaskCompletionSource <int>();

            tcs.SetResult(42);
            Task <int> completedTaskOfInt = tcs.Task;
            Task       completedTask      = tcs.Task;

            var exHandler = new MockExceptionHandler();

            using (var runner = new LocalTaskRunner(exHandler))
            {
                var taskOfInt = runner.StartTask(taskCreator: () => completedTaskOfInt);
                Assert.True(object.ReferenceEquals(completedTaskOfInt, taskOfInt));

                var task = runner.StartTask(taskCreator: () => completedTask);
                Assert.True(object.ReferenceEquals(completedTask, task));
            }
        }
        public void StartingFaultedTaskIsReturnedDirectlyAndErrorIsReported()
        {
            var tcs = new TaskCompletionSource <int>();

            tcs.SetException(new TestException());
            Task <int> faultedTaskOfInt = tcs.Task;
            Task       faultedTask      = tcs.Task;

            var exHandler = new MockExceptionHandler();

            using (var runner = new LocalTaskRunner(exHandler))
            {
                var taskOfInt = runner.StartTask(taskCreator: () => faultedTaskOfInt);
                Assert.True(object.ReferenceEquals(faultedTaskOfInt, taskOfInt));
                exHandler.AssertPop <TestException>();

                var task = runner.StartTask(taskCreator: () => faultedTask);
                Assert.True(object.ReferenceEquals(faultedTask, task));
                exHandler.AssertPop <TestException>();
            }
        }
Beispiel #18
0
 public void Setup()
 {
     this.exceptionHandler = new MockExceptionHandler();
 }