示例#1
0
        public void ShouldInterruptJobOnRemoval()
        {
            // arrange
            var mark1 = new ManualResetEvent(false);
            var mark2 = new ManualResetEvent(false);

            var proceed = new ManualResetEvent(false);

            var trigger = new ManualTrigger();

            var jobId = scheduler.AddAction(trigger, ctx =>
            {
                mark1.Set();

                proceed.WaitOne();

                mark2.Set();
            });

            trigger.TriggerNow();
            mark1.WaitOne();

            // act
            scheduler.RemoveJob(jobId);
            proceed.Set();

            // assert
            Assert.That(mark2.WaitOne(TimeSpan.FromSeconds(0.1)), Is.False, "Job should be interrupted");
        }
示例#2
0
        public void ShouldInterruptJobOnRemoval()
        {
            // arrange
            var mark1 = new ManualResetEvent(false);
            var mark2 = new ManualResetEvent(false);

            var proceed = new ManualResetEvent(false);

            var trigger = new ManualTrigger();

            var jobId = scheduler.AddAction(trigger, ctx =>
            {
                mark1.Set();

                proceed.WaitOne();

                mark2.Set();
            });

            trigger.TriggerNow();
            mark1.WaitOne();

            // act
            scheduler.RemoveJob(jobId);
            proceed.Set();

            // assert
            Assert.That(mark2.WaitOne(TimeSpan.FromSeconds(0.1)), Is.False, "Job should be interrupted");
        }
示例#3
0
        public void FailOfJobShouldNotPreventNextExecution()
        {
            // arrange
            var mark1   = new ManualResetEvent(false);
            var trigger = new ManualTrigger();

            scheduler.AddAction(trigger, ctx =>
            {
                mark1.Set();

                throw new Exception("Exception in job");
            });

            trigger.TriggerNow();
            mark1.WaitOne();
            mark1.Reset();

            // act
            trigger.TriggerNow();

            // assert
            Assert.That(mark1.WaitOne(TimeSpan.FromSeconds(0.1)), Is.True, "Job should be executed");
        }
示例#4
0
        public void ShouldInvokeJobBasedOnWaitSource()
        {
            // arrange
            var jobExecuted = new ManualResetEvent(false);

            var trigger = new ManualTrigger();

            scheduler.AddJob<SetOnExecute>(cfg => cfg.UseWaitSource(trigger).WithParameter(jobExecuted));

            // act
            trigger.TriggerNow();

            // assert
            Assert.That(jobExecuted.WaitOne(TimeSpan.FromSeconds(0.1)), Is.True, "Job should be executed");
        }
示例#5
0
        public void ShouldInvokeJobBasedOnWaitSource()
        {
            // arrange
            var jobExecuted = new ManualResetEvent(false);

            var trigger = new ManualTrigger();

            scheduler.AddJob <SetOnExecute>(cfg => cfg.UseWaitSource(trigger).WithParameter(jobExecuted));

            // act
            trigger.TriggerNow();

            // assert
            Assert.That(jobExecuted.WaitOne(TimeSpan.FromSeconds(0.1)), Is.True, "Job should be executed");
        }
示例#6
0
        public void ShouldNotTriggerJobAfterRemovingFromScheduler()
        {
            // arrange
            var jobExecuted = new ManualResetEvent(false);

            var trigger = new ManualTrigger();

            var jobId = scheduler.AddJob<SetOnExecute>(cfg => cfg.UseWaitSource(trigger).WithParameter(jobExecuted));

            // act
            scheduler.RemoveJob(jobId);
            trigger.TriggerNow();

            // assert
            Assert.That(jobExecuted.WaitOne(0), Is.False, "Job should not be executed");
        }
示例#7
0
        public void ShouldNotTriggerJobAfterRemovingFromScheduler()
        {
            // arrange
            var jobExecuted = new ManualResetEvent(false);

            var trigger = new ManualTrigger();

            var jobId = scheduler.AddJob <SetOnExecute>(cfg => cfg.UseWaitSource(trigger).WithParameter(jobExecuted));

            // act
            scheduler.RemoveJob(jobId);
            trigger.TriggerNow();

            // assert
            Assert.That(jobExecuted.WaitOne(0), Is.False, "Job should not be executed");
        }
示例#8
0
        public void FailOfJobShouldNotPreventNextExecution()
        {
            // arrange
            var mark1 = new ManualResetEvent(false);
            var trigger = new ManualTrigger();

            scheduler.AddAction(trigger, ctx =>
            {
                mark1.Set();

                throw new Exception("Exception in job");
            });

            trigger.TriggerNow();
            mark1.WaitOne();
            mark1.Reset();

            // act
            trigger.TriggerNow();

            // assert
            Assert.That(mark1.WaitOne(TimeSpan.FromSeconds(0.1)), Is.True, "Job should be executed");
        }