public void CancelInSetupWorksAsExpected()
        {
            // --- Arrange
            using (s_SetupAutoResetEvent = new AutoResetEvent(false))
            {
                var schedule = new ScheduleInformation
                {
                    FrequencyType = TaskFrequencyType.Second,
                    Frequency     = 2,
                };
                s_Context = new DefaultTaskExecutionContext(new MemoryNamedQueueProvider());
                var processor =
                    new ScheduledTaskProcessor <TaskWithSetupAutoResetEvent>(s_Context)
                {
                    ScheduleInfo = schedule
                };
                TaskWithSetupAutoResetEvent.Counter = 0;

                // --- Act
                processor.Start();
                s_SetupAutoResetEvent.WaitOne(5000).ShouldBeTrue("Task did not get to setup phase in 5 seconds");
                processor.Stop();

                // --- Assert
                TaskWithSetupAutoResetEvent.Counter.ShouldEqual(0);
            }
        }
        public void CancelExceptionThrownWhileRunningWorksAsExpected()
        {
            // --- Arrange
            using (s_RunAutoResetEvent = new AutoResetEvent(false))
            {
                var schedule = new ScheduleInformation
                {
                    FrequencyType = TaskFrequencyType.Second,
                    Frequency = 2,
                };
                s_Context = new DefaultTaskExecutionContext(new MemoryNamedQueueProvider());
                var processor =
                    new ScheduledTaskProcessor<TaskWithExceptionThrownWhileRunning>(s_Context) { ScheduleInfo = schedule };
                TaskWithExceptionThrownWhileRunning.Counter = 0;

                // --- Act
                processor.Start();
                s_RunAutoResetEvent.WaitOne(5000).ShouldBeTrue("Task did not get to setup phase in 5 seconds");
                processor.Stop();

                // --- Assert
                TaskWithExceptionThrownWhileRunning.Counter.ShouldEqual(1);
            }
        }
        public void FaultyScheduledTaskWorksAsExpected()
        {
            // --- Arrange
            var schedule = new ScheduleInformation
            {
                FrequencyType = TaskFrequencyType.Second,
                Frequency     = 2,
            };
            var context   = new DefaultTaskExecutionContext(new MemoryNamedQueueProvider());
            var processor =
                new ScheduledTaskProcessor <FaultyTask>(context)
            {
                ScheduleInfo = schedule
            };

            // --- Act
            FaultyTask.Counter = 0;
            processor.Start();
            Thread.Sleep(5000);
            processor.Stop();

            // --- Assert
            FaultyTask.Counter.ShouldBeLessThanOrEqualTo(3);
        }
        public void ScheduledTaskWorksAsExpected()
        {
            // --- Arrange
            var schedule = new ScheduleInformation
            {
                FrequencyType = TaskFrequencyType.Second,
                Frequency = 2,
            };
            var context = new DefaultTaskExecutionContext(new MemoryNamedQueueProvider());
            var processor =
                new ScheduledTaskProcessor<SimpleTask>(context) { ScheduleInfo = schedule };

            // --- Act
            SimpleTask.Counter = 0;
            processor.Start();
            Thread.Sleep(5000);
            processor.Stop();

            // --- Assert
            SimpleTask.Counter.ShouldBeLessThanOrEqualTo(3);
        }