public void EnsureAScheduledRunOnceRuns() { var schedule = new ScheduleOneOff { ScheduleSpecificTime = DateTime.UtcNow.AddMilliseconds(5000) }; schedule.Save(); var tos = new WfTriggerOnSchedule { Name = "EnsureAScheduledRunOnceRuns_Job " + DateTime.Now, TriggerEnabled = true, WorkflowToRun = CreateLoggingWorkflow("EnsureAScheduledRunOnceRuns") }; tos.ScheduleForTrigger.Add(schedule.As <Schedule>()); tos.Save(); ToDelete.Add(tos.Id); ToDelete.Add(tos.WorkflowToRun.Id); ToDelete.Add(tos.ScheduleForTrigger.First().Id); var workflow = WaitForWfRun(tos); Assert.AreEqual(1, workflow.RunningInstances.Count(), "Ensure the workflow actually ran once"); }
private static Workflow WaitForWfRun(WfTriggerOnSchedule tos) { long relTypeId = new EntityRef("core:workflowBeingRun").Id; Workflow workflow = null; // wait up to a minute checking if it starts. for (int i = 0; i < maximumChecks; i++) { Thread.Sleep(secondsBetweenChecks * 1000); // refetch the workflow to see if it tried to run workflow = Entity.Get <Workflow>(tos.WorkflowToRun); // manually clear entity-relationship-cache, because 'RunningInstances' is one of the special relationships that // we've set to suppress invalidations for performance reasons. See Entity.SaveInvalidate. EntityRelationshipCache.Instance.Remove(EntityRelationshipCacheTypeKey.Create(workflow.Id, Direction.Reverse, relTypeId), true); if (workflow.RunningInstances.Count > 0) { Console.WriteLine("WaitForWfRun: waiting time " + i * secondsBetweenChecks); break; } } return(workflow); }
public void CreateScheduleWithNoTriggerTest( ) { var tos = new WfTriggerOnSchedule { WorkflowToRun = CreateLoggingWorkflow() }; tos.Save( ); ToDelete.Add(tos.Id); ToDelete.Add(tos.WorkflowToRun.Id); Assert.AreEqual(null, SchedulingHelper.Instance.GetJobDetail(SchedulingSyncHelper.GetJobId(tos)), "No job should be scheduled."); }
public void TwoTriggersTest_22065() { var schedule = new ScheduleOneOff { ScheduleSpecificTime = DateTime.UtcNow.AddMilliseconds(500), }; schedule.Save(); var tos1 = new WfTriggerOnSchedule { TriggerEnabled = true, WorkflowToRun = CreateLoggingWorkflow("TwoTriggersTest_22065-1") }; tos1.ScheduleForTrigger.Add(schedule.As <Schedule>()); tos1.Save(); ToDelete.Add(tos1.Id); ToDelete.Add(tos1.WorkflowToRun.Id); ToDelete.Add(tos1.ScheduleForTrigger.First().Id); var tos2 = new WfTriggerOnSchedule { TriggerEnabled = true, WorkflowToRun = CreateLoggingWorkflow("TwoTriggersTest_22065-2") }; tos2.ScheduleForTrigger.Add(schedule.As <Schedule>()); tos2.Save(); ToDelete.Add(tos2.Id); ToDelete.Add(tos2.WorkflowToRun.Id); ToDelete.Add(tos2.ScheduleForTrigger.First().Id); var workflow1 = WaitForWfRun(tos1); var workflow2 = WaitForWfRun(tos2); Assert.AreEqual(1, workflow1.RunningInstances.Count(), "Ensure the workflow1 actually ran once"); Assert.AreEqual(1, workflow2.RunningInstances.Count(), "Ensure the workflow2 actually ran once"); }
public void CreateDisabledScheduleTest( ) { var tos = new WfTriggerOnSchedule { WorkflowToRun = CreateLoggingWorkflow() }; tos.ScheduleForTrigger.Add(new ScheduleDailyRepeat { SdrTimeOfDay = SqlDateTime.MinValue.Value.AddHours(23).ToUniversalTime() }.As <Schedule>( )); tos.TriggerEnabled = false; tos.Save( ); ToDelete.Add(tos.Id); ToDelete.Add(tos.WorkflowToRun.Id); ToDelete.Add(tos.ScheduleForTrigger.First( ).Id); Assert.AreEqual(null, SchedulingHelper.Instance.GetJobDetail(SchedulingSyncHelper.GetJobId(tos)), "No job should be scheduled."); }
public void CreateScheduleThenDelete( ) { var tos = new WfTriggerOnSchedule { WorkflowToRun = CreateLoggingWorkflow() }; tos.ScheduleForTrigger.Add(new ScheduleDailyRepeat { SdrTimeOfDay = SqlDateTime.MinValue.Value.AddHours(23).ToUniversalTime() }.As <Schedule>( )); tos.Save( ); ToDelete.Add(tos.Id); ToDelete.Add(tos.WorkflowToRun.Id); ToDelete.Add(tos.ScheduleForTrigger.First( ).Id); Assert.IsNotNull(SchedulingHelper.Instance.GetJobDetail(SchedulingSyncHelper.GetJobId(tos)), "Ensure the job was scheduled"); Entity.Delete(tos); Assert.IsNull(SchedulingHelper.Instance.GetJobDetail(SchedulingSyncHelper.GetJobId(tos)), "Ensure the job was unscheduled after delete."); }