示例#1
0
        private static async Task SendAddJobMessagesToQueueAsync(QueueClient queueClient, string jobUid)
        {
            try
            {
                var jobSchedule = new JobSchedule
                {
                    RepeatCount    = 99,
                    StartAt        = DateTime.Now,
                    EndAt          = DateTime.Now.AddMinutes(15),
                    RepeatInterval = TimeSpan.FromMinutes(1),
                };

                var scheduleJobMessage = new ScheduleJobMessage
                {
                    SubscriptionName = "scheduling-testsubscription-1",
                    JobUid           = jobUid,
                    Schedule         = jobSchedule,
                };
                var messageBody = JsonConvert.SerializeObject(scheduleJobMessage);
                var message     = new Message(Encoding.UTF8.GetBytes(messageBody));

                await queueClient.SendAsync(message);
            }
            catch (Exception exception)
            {
                Console.WriteLine($"Exception: {exception.Message}");
            }
        }
 public Result <IJobDetail> BuildJob(ScheduleJobMessage scheduleJobMessage)
 => ValidateJobBuilderInput(scheduleJobMessage)
 .OnFailureCompensate(error => Result.Failure($"Unable to build job: {error}"))
 .OnSuccessTry(() => JobBuilder.Create <ScheduledJob>()
               .WithIdentity(scheduleJobMessage.JobUid, scheduleJobMessage.SubscriptionName)
               .UsingJobData(SchedulingConstants.JobUid, scheduleJobMessage.JobUid)
               .UsingJobData(SchedulingConstants.SubscriptionName, scheduleJobMessage.SubscriptionName)
               .Build());
 public void Setup()
 {
     scheduledJobBuilder = new ScheduledJobBuilder();
     defaultMessage      = new ScheduleJobMessage
     {
         JobUid           = "unique id 1234",
         SubscriptionName = "foo",
     };
 }
示例#4
0
        public void Throw_Exception_If_JobUid_Is_Empty()
        {
            var message = new ScheduleJobMessage
            {
                SubscriptionName = "foo",
                JobUid           = string.Empty,
                Schedule         = new JobSchedule(),
            };

            var result = scheduledJobBuilder.BuildJob(message);

            result.Error.Should().Contain("JobUid and SubscriptionName are required");
        }
示例#5
0
        public void Throw_Exception_If_SubscriptionName_Is_Null()
        {
            var message = new ScheduleJobMessage
            {
                SubscriptionName = null,
                JobUid           = "unique id 1234",
                Schedule         = new JobSchedule(),
            };

            var result = scheduledJobBuilder.BuildJob(message);

            result.Error.Should().Contain("JobUid and SubscriptionName are required");
        }
示例#6
0
        public void BuildJob_Throw_Exception_If_Schedule_Is_Missing()
        {
            var message = new ScheduleJobMessage
            {
                JobUid           = "unique id 1234",
                SubscriptionName = "foo",
                Schedule         = null,
            };

            var result = scheduledJobBuilder.BuildJob(message);

            result.Error.Should().Contain("Schedule property is required ");
        }
        private static Result ValidateJobBuilderInput(ScheduleJobMessage scheduleJobMessage)
        {
            if (string.IsNullOrEmpty(scheduleJobMessage.JobUid) || string.IsNullOrEmpty(scheduleJobMessage.SubscriptionName))
            {
                return(Result.Failure("JobUid and SubscriptionName are required for scheduling a job"));
            }

            if (scheduleJobMessage.Schedule == null)
            {
                return(Result.Failure("Schedule property is required in order to schedule job"));
            }

            return(Result.Success());
        }
示例#8
0
        public void Throw_Exception_If_RepeatCount_Is_Negative()
        {
            var message = new ScheduleJobMessage
            {
                SubscriptionName = "foo",
                JobUid           = "unique id 1234",
                Schedule         = new JobSchedule
                {
                    RepeatCount = -1,
                    StartAt     = DateTime.Now.AddMinutes(5),
                }
            };

            var result = scheduledJobBuilder.BuildTrigger(message.JobUid, message.SubscriptionName, message.Schedule);

            result.Error.Should().Contain("Scheduled RepeatCount cannot be a negative number");
        }
示例#9
0
        public void Throw_Exception_If_Scheduled_StartAt_Is_In_The_Past_And_Job_Is_Not_Repeating()
        {
            var message = new ScheduleJobMessage
            {
                SubscriptionName = "foo",
                JobUid           = "unique id 1234",
                Schedule         = new JobSchedule
                {
                    StartAt = DateTime.Now.AddMinutes(-5),
                }
            };

            var result = scheduledJobBuilder.BuildTrigger(message.JobUid, message.SubscriptionName, message.Schedule);

            result.IsFailure.Should().BeTrue();
            result.Error.Should().Contain("StartAt cannot be a date in the past if the job is not set to repeat");
        }
示例#10
0
        public void Throw_Exception_If_RepeatCount_Is_Provided_With_No_RepeatInterval()
        {
            var message = new ScheduleJobMessage
            {
                SubscriptionName = "foo",
                JobUid           = "unique id 1234",
                Schedule         = new JobSchedule
                {
                    StartAt     = DateTime.Now,
                    RepeatCount = 99,
                }
            };

            var result = scheduledJobBuilder.BuildTrigger(message.JobUid, message.SubscriptionName, message.Schedule);

            result.Error.Should().Contain("RepeatCount must also have a RepeatInterval");
        }
示例#11
0
        public void Throw_Exception_If_Scheduled_EndAt_Is_In_The_Past()
        {
            var message = new ScheduleJobMessage
            {
                SubscriptionName = "foo",
                JobUid           = "unique id 1234",
                Schedule         = new JobSchedule
                {
                    EndAt   = DateTime.Now.AddMinutes(-1),
                    StartAt = DateTime.Now.AddMinutes(1),
                }
            };

            var result = scheduledJobBuilder.BuildTrigger(message.JobUid, message.SubscriptionName, message.Schedule);

            result.Error.Should().Contain("EndAt cannot be a date in the past");
        }
示例#12
0
        public void Throw_Exception_If_RepeatInterval_Is_Less_Than_The_Minimum_Requirement()
        {
            var message = new ScheduleJobMessage
            {
                SubscriptionName = "foo",
                JobUid           = "unique id 1234",
                Schedule         = new JobSchedule
                {
                    RepeatInterval = TimeSpan.FromMilliseconds(5),
                    StartAt        = DateTime.Now.AddSeconds(5),
                }
            };

            var result = scheduledJobBuilder.BuildTrigger(message.JobUid, message.SubscriptionName, message.Schedule);

            result.Error.Should().Contain("Scheduling RepeatInterval time must be a greater then or equal to");
        }