예제 #1
0
        public void JobExecutionCountRemaining_GetterAndSetter()
        {
            PeriodicTrigger trigger = new PeriodicTrigger(DateTime.UtcNow, null, null, 33);

            trigger.JobExecutionCountRemaining = 42;
            Assert.AreEqual(42, trigger.JobExecutionCountRemaining);
        }
예제 #2
0
        public void MisfireAction_GetterAndSetter()
        {
            PeriodicTrigger trigger = new PeriodicTrigger(DateTime.UtcNow, null, null, null);

            trigger.MisfireAction = TriggerScheduleAction.ExecuteJob;
            Assert.AreEqual(TriggerScheduleAction.ExecuteJob, trigger.MisfireAction);
        }
예제 #3
0
        public void ClonePerformsADeepCopy(bool useGenericClonable)
        {
            DateTime now = DateTime.UtcNow;
            PeriodicTrigger trigger = new PeriodicTrigger(now, DateTime.MaxValue, TimeSpan.MaxValue, 42);
            trigger.MisfireAction = TriggerScheduleAction.DeleteJob;
            trigger.MisfireThreshold = TimeSpan.MaxValue;
            trigger.Schedule(TriggerScheduleCondition.Latch, now, null);

            PeriodicTrigger clone = useGenericClonable
                                        ? (PeriodicTrigger) trigger.Clone()
                                        : (PeriodicTrigger) ((ICloneable) trigger).Clone();

            Assert.AreNotSame(trigger, clone);

            Assert.AreEqual(trigger.StartTimeUtc, clone.StartTimeUtc);
            Assert.AreEqual(trigger.EndTimeUtc, clone.EndTimeUtc);
            Assert.AreEqual(trigger.Period, clone.Period);
            Assert.AreEqual(trigger.JobExecutionCountRemaining, clone.JobExecutionCountRemaining);
            Assert.AreEqual(trigger.MisfireAction, clone.MisfireAction);
            Assert.AreEqual(trigger.MisfireThreshold, clone.MisfireThreshold);
            Assert.AreEqual(trigger.IsFirstTime, clone.IsFirstTime);

            Assert.AreEqual(trigger.IsActive, clone.IsActive);
            Assert.AreEqual(trigger.NextFireTimeUtc, clone.NextFireTimeUtc);
            Assert.AreEqual(trigger.NextMisfireThreshold, clone.NextMisfireThreshold);
        }
예제 #4
0
        public void IsFirstTime_GetterAndSetter()
        {
            PeriodicTrigger trigger = new PeriodicTrigger(DateTime.UtcNow, null, TimeSpan.MaxValue, null);

            trigger.IsFirstTime = false;
            Assert.IsFalse(trigger.IsFirstTime);
        }
예제 #5
0
        public void MisfireThreshold_GetterAndSetter()
        {
            PeriodicTrigger trigger = new PeriodicTrigger(DateTime.UtcNow, null, null, null);

            trigger.MisfireThreshold = new TimeSpan(1, 0, 0);
            Assert.AreEqual(new TimeSpan(1, 0, 0), trigger.MisfireThreshold);
        }
예제 #6
0
        public void Schedule(int startDay, int endDay, int periodDays, int jobExecutionCount,
                             TriggerScheduleAction misfireAction,
                             TriggerScheduleCondition condition, int timeBasisDay, bool isFirstTime,
                             TriggerScheduleAction expectedAction, int expectedFireDay,
                             int expectedJobExecutionCountRemaining, bool expectedIsActive, bool expectedIsFirstTime)
        {
            DateTime startTime            = new DateTime(1970, 1, startDay);
            DateTime?endTime              = endDay != 0 ? new DateTime(1970, 1, endDay) : (DateTime?)null;
            TimeSpan?period               = periodDays != 0 ? new TimeSpan(periodDays, 0, 0, 0) : (TimeSpan?)null;
            int?     jobExecutionCountArg = jobExecutionCount >= 0 ? jobExecutionCount : (int?)null;
            DateTime timeBasis            = new DateTime(1970, 1, timeBasisDay);
            DateTime?expectedFireTime     = expectedFireDay != 0
                                                        ? new DateTime(1970, 1, expectedFireDay, 0, 0, 0, DateTimeKind.Utc)
                                                        : (DateTime?)null;
            int?expectedJobExecutionCountRemainingArg = expectedJobExecutionCountRemaining >= 0
                                                                        ? expectedJobExecutionCountRemaining
                                                                        : (int?)null;

            PeriodicTrigger trigger = new PeriodicTrigger(startTime, endTime, period, jobExecutionCountArg);

            trigger.MisfireAction    = misfireAction;
            trigger.MisfireThreshold = TimeSpan.Zero;
            trigger.IsFirstTime      = expectedIsFirstTime;

            TriggerScheduleAction action = trigger.Schedule(condition, timeBasis, null);

            Assert.AreEqual(expectedAction, action);
            DateTimeAssert.AreEqualIncludingKind(expectedFireTime, trigger.NextFireTimeUtc);
            Assert.AreEqual(expectedJobExecutionCountRemainingArg, trigger.JobExecutionCountRemaining);
            Assert.AreEqual(expectedIsActive, trigger.IsActive);
        }
예제 #7
0
        public void ClonePerformsADeepCopy(bool useGenericClonable)
        {
            DateTime        now     = DateTime.UtcNow;
            PeriodicTrigger trigger = new PeriodicTrigger(now, DateTime.MaxValue, TimeSpan.MaxValue, 42);

            trigger.MisfireAction    = TriggerScheduleAction.DeleteJob;
            trigger.MisfireThreshold = TimeSpan.MaxValue;
            trigger.Schedule(TriggerScheduleCondition.Latch, now, null);

            PeriodicTrigger clone = useGenericClonable
                                                        ? (PeriodicTrigger)trigger.Clone()
                                                        : (PeriodicTrigger)((ICloneable)trigger).Clone();

            Assert.AreNotSame(trigger, clone);

            Assert.AreEqual(trigger.StartTimeUtc, clone.StartTimeUtc);
            Assert.AreEqual(trigger.EndTimeUtc, clone.EndTimeUtc);
            Assert.AreEqual(trigger.Period, clone.Period);
            Assert.AreEqual(trigger.JobExecutionCountRemaining, clone.JobExecutionCountRemaining);
            Assert.AreEqual(trigger.MisfireAction, clone.MisfireAction);
            Assert.AreEqual(trigger.MisfireThreshold, clone.MisfireThreshold);
            Assert.AreEqual(trigger.IsFirstTime, clone.IsFirstTime);

            Assert.AreEqual(trigger.IsActive, clone.IsActive);
            Assert.AreEqual(trigger.NextFireTimeUtc, clone.NextFireTimeUtc);
            Assert.AreEqual(trigger.NextMisfireThreshold, clone.NextMisfireThreshold);
        }
예제 #8
0
        public void EndTimeUtc_GetterAndSetter()
        {
            PeriodicTrigger trigger = new PeriodicTrigger(DateTime.MaxValue, null, null, null);

            trigger.EndTimeUtc = new DateTime(2000, 3, 4);
            DateTimeAssert.AreEqualIncludingKind(new DateTime(2000, 3, 4, 0, 0, 0, DateTimeKind.Utc), trigger.EndTimeUtc);
        }
예제 #9
0
		public void EndTimeUtc_GetterAndSetter()
		{
			PeriodicTrigger trigger = new PeriodicTrigger(DateTime.MaxValue, null, null, null);

			trigger.EndTimeUtc = new DateTime(2000, 3, 4);
			DateTimeAssert.AreEqualIncludingKind(new DateTime(2000, 3, 4, 0, 0, 0, DateTimeKind.Utc), trigger.EndTimeUtc);
		}
예제 #10
0
		public void Period_GetterAndSetter()
		{
			PeriodicTrigger trigger = new PeriodicTrigger(DateTime.UtcNow, null, TimeSpan.MaxValue, null);

			TimeSpan value = new TimeSpan(0, 1, 0);
			trigger.Period = value;
			Assert.AreEqual(value, trigger.Period);
		}
예제 #11
0
        public void Period_GetterAndSetter()
        {
            PeriodicTrigger trigger = new PeriodicTrigger(DateTime.UtcNow, null, TimeSpan.MaxValue, null);

            TimeSpan value = new TimeSpan(0, 1, 0);

            trigger.Period = value;
            Assert.AreEqual(value, trigger.Period);
        }
        public void Trigger_GetterAndSetter()
        {
            JobSpec spec = new JobSpec("abc", "some job", "with this key", trigger);

            Trigger newTrigger = PeriodicTrigger.CreateDailyTrigger(DateTime.UtcNow);

            spec.Trigger = newTrigger;
            Assert.AreSame(newTrigger, spec.Trigger);
        }
예제 #13
0
        public override void SetUp()
        {
            base.SetUp();

            scheduler = Mocks.CreateMock <IScheduler>();
            logger    = Mocks.CreateMock <ILogger>();
            jobSpec   = new JobSpec("abc", "some job", "with.this.key", PeriodicTrigger.CreateDailyTrigger(DateTime.UtcNow));
            jobData   = new JobData();
            Mocks.ReplayAll();
        }
        public override void SetUp()
        {
            base.SetUp();

            dummyJobSpec = new JobSpec("job", "test", "dummy", PeriodicTrigger.CreateOneShotTrigger(DateTime.UtcNow));
            dummyJobData = new JobData();
            dummyJobData.State["key"] = "value";

            jobStore = CreateJobStore();
            jobStore.RegisterScheduler(SchedulerGuid, SchedulerName);
        }
예제 #15
0
        public void CreateOneShotTrigger()
        {
            DateTime        now     = DateTime.UtcNow;
            PeriodicTrigger trigger = PeriodicTrigger.CreateOneShotTrigger(DateTime.UtcNow);

            Assert.AreEqual(now.Ticks, trigger.StartTimeUtc.Ticks);
            Assert.IsNull(trigger.Period);
            Assert.IsNull(trigger.EndTimeUtc);
            Assert.AreEqual(1, trigger.JobExecutionCountRemaining);
            Assert.IsTrue(trigger.IsFirstTime);
        }
예제 #16
0
        public void ConstructorSetsProperties()
        {
            TimeSpan interval = new TimeSpan(0, 1, 30);
            PeriodicTrigger trigger = new PeriodicTrigger(new DateTime(2000, 3, 4), new DateTime(1999, 1, 2), interval, 33);

            DateTimeAssert.AreEqualIncludingKind(new DateTime(2000, 3, 4, 0, 0, 0, DateTimeKind.Utc), trigger.StartTimeUtc);
            Assert.AreEqual(interval, trigger.Period);
            Assert.AreEqual(PeriodicTrigger.DefaultMisfireAction, trigger.MisfireAction);
            Assert.AreEqual(null, trigger.MisfireThreshold);
            DateTimeAssert.AreEqualIncludingKind(new DateTime(1999, 1, 2, 0, 0, 0, DateTimeKind.Utc), trigger.EndTimeUtc);
            Assert.AreEqual(33, trigger.JobExecutionCountRemaining);
            Assert.IsTrue(trigger.IsFirstTime);
        }
예제 #17
0
        public void ConstructorSetsProperties()
        {
            TimeSpan        interval = new TimeSpan(0, 1, 30);
            PeriodicTrigger trigger  = new PeriodicTrigger(new DateTime(2000, 3, 4), new DateTime(1999, 1, 2), interval, 33);

            DateTimeAssert.AreEqualIncludingKind(new DateTime(2000, 3, 4, 0, 0, 0, DateTimeKind.Utc), trigger.StartTimeUtc);
            Assert.AreEqual(interval, trigger.Period);
            Assert.AreEqual(PeriodicTrigger.DefaultMisfireAction, trigger.MisfireAction);
            Assert.AreEqual(null, trigger.MisfireThreshold);
            DateTimeAssert.AreEqualIncludingKind(new DateTime(1999, 1, 2, 0, 0, 0, DateTimeKind.Utc), trigger.EndTimeUtc);
            Assert.AreEqual(33, trigger.JobExecutionCountRemaining);
            Assert.IsTrue(trigger.IsFirstTime);
        }
예제 #18
0
        public void SchedulePeriodicTriggerCorrectlyComputesNextCycle()
        {
            // Constructs a 3-day period trigger on an odd date.
            PeriodicTrigger trigger = new PeriodicTrigger(new DateTime(1970, 1, 5), null, new TimeSpan(3, 0, 0, 0), null);

            trigger.MisfireAction    = TriggerScheduleAction.Skip;
            trigger.MisfireThreshold = TimeSpan.Zero;

            // Ensure returns next period if skipping with time basis on an even boundary.
            trigger.Schedule(TriggerScheduleCondition.Misfire, new DateTime(1970, 1, 8), null);
            DateTimeAssert.AreEqualIncludingKind(new DateTime(1970, 1, 11, 0, 0, 0, DateTimeKind.Utc), trigger.NextFireTimeUtc);

            // Ensure returns next period if skipping with time basis at 1/3 beyond even boundary.
            trigger.Schedule(TriggerScheduleCondition.Misfire, new DateTime(1970, 1, 9), null);
            DateTimeAssert.AreEqualIncludingKind(new DateTime(1970, 1, 11, 0, 0, 0, DateTimeKind.Utc), trigger.NextFireTimeUtc);

            // Ensure returns next period if skipping with time basis at 2/3 beyond even boundary.
            trigger.Schedule(TriggerScheduleCondition.Misfire, new DateTime(1970, 1, 10), null);
            DateTimeAssert.AreEqualIncludingKind(new DateTime(1970, 1, 11, 0, 0, 0, DateTimeKind.Utc), trigger.NextFireTimeUtc);
        }
        public void UpdateJob_CanRenameJobsAndAlterOtherProperties()
        {
            Mocks.ReplayAll();

            JobDetails originalJob = CreateRunningJob("originalJob");

            JobSpec updatedJobSpec = new JobSpec("updatedJob", "This is updated.", "The new key",
                                                 PeriodicTrigger.CreateOneShotTrigger(new DateTime(2000, 3, 4)));

            jobStore.UpdateJob("originalJob", updatedJobSpec);

            Assert.IsNull(jobStore.GetJobDetails("originalJob"), "The job should not be accessible under its original name.");

            // The job gets a new job spec, but all other properties should be preserved including
            // the job's execution history.
            JobDetails updatedJob = jobStore.GetJobDetails("updatedJob");

            JobDetails expectedUpdatedJob = originalJob.Clone();

            expectedUpdatedJob.JobSpec = updatedJobSpec;

            JobAssert.AreEqual(expectedUpdatedJob, updatedJob);
        }
예제 #20
0
        public void IsFirstTime_GetterAndSetter()
        {
            PeriodicTrigger trigger = new PeriodicTrigger(DateTime.UtcNow, null, TimeSpan.MaxValue, null);

            trigger.IsFirstTime = false;
            Assert.IsFalse(trigger.IsFirstTime);
        }
예제 #21
0
        public void JobExecutionCountRemaining_GetterAndSetter()
        {
            PeriodicTrigger trigger = new PeriodicTrigger(DateTime.UtcNow, null, null, 33);

            trigger.JobExecutionCountRemaining = 42;
            Assert.AreEqual(42, trigger.JobExecutionCountRemaining);
        }
예제 #22
0
        public void ScheduleThrowsIfConditionIsUnrecognized()
        {
            PeriodicTrigger trigger = new PeriodicTrigger(new DateTime(1970, 1, 5), null, new TimeSpan(3, 0, 0, 0), null);

            trigger.Schedule((TriggerScheduleCondition)9999, DateTime.UtcNow, null);
        }
예제 #23
0
 public void JobExecutionCountRemaining_ThrowsIfValueIsNegative()
 {
     PeriodicTrigger trigger = new PeriodicTrigger(DateTime.UtcNow, null, null, null);
     trigger.JobExecutionCountRemaining = -1;
 }
예제 #24
0
        public void SchedulePeriodicTriggerCorrectlyComputesNextCycle()
        {
            // Constructs a 3-day period trigger on an odd date.
            PeriodicTrigger trigger = new PeriodicTrigger(new DateTime(1970, 1, 5), null, new TimeSpan(3, 0, 0, 0), null);
            trigger.MisfireAction = TriggerScheduleAction.Skip;
            trigger.MisfireThreshold = TimeSpan.Zero;

            // Ensure returns next period if skipping with time basis on an even boundary.
            trigger.Schedule(TriggerScheduleCondition.Misfire, new DateTime(1970, 1, 8), null);
            DateTimeAssert.AreEqualIncludingKind(new DateTime(1970, 1, 11, 0, 0, 0, DateTimeKind.Utc), trigger.NextFireTimeUtc);

            // Ensure returns next period if skipping with time basis at 1/3 beyond even boundary.
            trigger.Schedule(TriggerScheduleCondition.Misfire, new DateTime(1970, 1, 9), null);
            DateTimeAssert.AreEqualIncludingKind(new DateTime(1970, 1, 11, 0, 0, 0, DateTimeKind.Utc), trigger.NextFireTimeUtc);

            // Ensure returns next period if skipping with time basis at 2/3 beyond even boundary.
            trigger.Schedule(TriggerScheduleCondition.Misfire, new DateTime(1970, 1, 10), null);
            DateTimeAssert.AreEqualIncludingKind(new DateTime(1970, 1, 11, 0, 0, 0, DateTimeKind.Utc), trigger.NextFireTimeUtc);
        }
예제 #25
0
 public void ScheduleThrowsIfConditionIsUnrecognized()
 {
     PeriodicTrigger trigger = new PeriodicTrigger(new DateTime(1970, 1, 5), null, new TimeSpan(3, 0, 0, 0), null);
     trigger.Schedule((TriggerScheduleCondition) 9999, DateTime.UtcNow, null);
 }
예제 #26
0
        public void MisfireThreshold_GetterAndSetter()
        {
            PeriodicTrigger trigger = new PeriodicTrigger(DateTime.UtcNow, null, null, null);

            trigger.MisfireThreshold = new TimeSpan(1, 0, 0);
            Assert.AreEqual(new TimeSpan(1, 0, 0), trigger.MisfireThreshold);
        }
예제 #27
0
 public void Period_ThrowsIfValueIsNegative()
 {
     PeriodicTrigger trigger = new PeriodicTrigger(DateTime.UtcNow, null, null, null);
     trigger.Period = TimeSpan.MinValue;
 }
예제 #28
0
 public void Period_ThrowsIfValueIsZero()
 {
     PeriodicTrigger trigger = new PeriodicTrigger(DateTime.UtcNow, null, null, null);
     trigger.Period = TimeSpan.Zero;
 }
예제 #29
0
        public void JobExecutionCountRemaining_ThrowsIfValueIsNegative()
        {
            PeriodicTrigger trigger = new PeriodicTrigger(DateTime.UtcNow, null, null, null);

            trigger.JobExecutionCountRemaining = -1;
        }
예제 #30
0
        public void Schedule(int startDay, int endDay, int periodDays, int jobExecutionCount,
            TriggerScheduleAction misfireAction,
            TriggerScheduleCondition condition, int timeBasisDay, bool isFirstTime,
            TriggerScheduleAction expectedAction, int expectedFireDay,
            int expectedJobExecutionCountRemaining, bool expectedIsActive, bool expectedIsFirstTime)
        {
            DateTime startTime = new DateTime(1970, 1, startDay);
            DateTime? endTime = endDay != 0 ? new DateTime(1970, 1, endDay) : (DateTime?) null;
            TimeSpan? period = periodDays != 0 ? new TimeSpan(periodDays, 0, 0, 0) : (TimeSpan?) null;
            int? jobExecutionCountArg = jobExecutionCount >= 0 ? jobExecutionCount : (int?) null;
            DateTime timeBasis = new DateTime(1970, 1, timeBasisDay);
            DateTime? expectedFireTime = expectedFireDay != 0
                                         	? new DateTime(1970, 1, expectedFireDay, 0, 0, 0, DateTimeKind.Utc)
                                         	: (DateTime?) null;
            int? expectedJobExecutionCountRemainingArg = expectedJobExecutionCountRemaining >= 0
                                                         	? expectedJobExecutionCountRemaining
                                                         	: (int?) null;

            PeriodicTrigger trigger = new PeriodicTrigger(startTime, endTime, period, jobExecutionCountArg);
            trigger.MisfireAction = misfireAction;
            trigger.MisfireThreshold = TimeSpan.Zero;
            trigger.IsFirstTime = expectedIsFirstTime;

            TriggerScheduleAction action = trigger.Schedule(condition, timeBasis, null);
            Assert.AreEqual(expectedAction, action);
            DateTimeAssert.AreEqualIncludingKind(expectedFireTime, trigger.NextFireTimeUtc);
            Assert.AreEqual(expectedJobExecutionCountRemainingArg, trigger.JobExecutionCountRemaining);
            Assert.AreEqual(expectedIsActive, trigger.IsActive);
        }
 protected JobDetails CreatePendingJob(string jobName, DateTime creationTime)
 {
     jobStore.CreateJob(new JobSpec(jobName, "", "key", PeriodicTrigger.CreateOneShotTrigger(creationTime)),
                        creationTime, CreateJobConflictAction.Throw);
     return(jobStore.GetJobDetails(jobName));
 }
예제 #32
0
        public void Period_ThrowsIfValueIsZero()
        {
            PeriodicTrigger trigger = new PeriodicTrigger(DateTime.UtcNow, null, null, null);

            trigger.Period = TimeSpan.Zero;
        }
예제 #33
0
        public void Period_ThrowsIfValueIsNegative()
        {
            PeriodicTrigger trigger = new PeriodicTrigger(DateTime.UtcNow, null, null, null);

            trigger.Period = TimeSpan.MinValue;
        }
예제 #34
0
        public void MisfireAction_GetterAndSetter()
        {
            PeriodicTrigger trigger = new PeriodicTrigger(DateTime.UtcNow, null, null, null);

            trigger.MisfireAction = TriggerScheduleAction.ExecuteJob;
            Assert.AreEqual(TriggerScheduleAction.ExecuteJob, trigger.MisfireAction);
        }