Exemple #1
0
        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");
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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.");
        }
Exemple #4
0
        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");
        }
Exemple #5
0
        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.");
        }
Exemple #6
0
        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.");
        }