public void SchedulerRefreshSchedules() { ScheduleRecord schedule = new ScheduleRecord() { ApplicationName = BlueCollarSection.Section.ApplicationName, Enabled = true, Id = 1, Name = "Test", QueueName = "*", RepeatType = ScheduleRepeatType.Days, RepeatValue = 1, StartOn = DateTime.UtcNow.FloorWithSeconds() }; ScheduledJobRecord scheduledJob = new ScheduledJobRecord() { Data = @"{""SleepDuration"":1000}", Id = 1, JobType = JobSerializer.GetTypeName(typeof(TestJob)), Schedule = schedule, ScheduleId = 1 }; schedule.ScheduledJobs.Add(scheduledJob); var transaction = new Mock <IDbTransaction>(); var repository = new Mock <IRepository>(); repository.Setup(r => r.BeginTransaction()).Returns(transaction.Object); repository.Setup(r => r.GetSchedules(BlueCollarSection.Section.ApplicationName, It.IsAny <IDbTransaction>())).Returns(new ScheduleRecord[] { schedule }); var factory = new Mock <IRepositoryFactory>(); factory.Setup(f => f.Create()).Returns(repository.Object); var logger = new Mock <ILogger>(); Scheduler scheduler = new Scheduler(1, BlueCollarSection.Section.ApplicationName, QueueNameFilters.Any(), 1, factory.Object, logger.Object); Assert.AreEqual(0, scheduler.Schedules.Count()); scheduler.RefreshSchedules(); Assert.AreEqual(1, scheduler.Schedules.Count()); }
/// <summary> /// Updates the given scheduled job. /// </summary> /// <param name="record">The scheduled job record to update.</param> /// <param name="transaction">The transaction to use, if applicable.</param> /// <returns>The updated record.</returns> public ScheduledJobRecord UpdateScheduledJob(ScheduledJobRecord record, IDbTransaction transaction) { throw new NotImplementedException(); }
public void SchedulerRefreshSchedules() { ScheduleRecord schedule = new ScheduleRecord() { ApplicationName = BlueCollarSection.Section.ApplicationName, Enabled = true, Id = 1, Name = "Test", QueueName = "*", RepeatType = ScheduleRepeatType.Days, RepeatValue = 1, StartOn = DateTime.UtcNow.FloorWithSeconds() }; ScheduledJobRecord scheduledJob = new ScheduledJobRecord() { Data = @"{""SleepDuration"":1000}", Id = 1, JobType = JobSerializer.GetTypeName(typeof(TestJob)), Schedule = schedule, ScheduleId = 1 }; schedule.ScheduledJobs.Add(scheduledJob); var transaction = new Mock<IDbTransaction>(); var repository = new Mock<IRepository>(); repository.Setup(r => r.BeginTransaction()).Returns(transaction.Object); repository.Setup(r => r.GetSchedules(BlueCollarSection.Section.ApplicationName, It.IsAny<IDbTransaction>())).Returns(new ScheduleRecord[] { schedule }); var factory = new Mock<IRepositoryFactory>(); factory.Setup(f => f.Create()).Returns(repository.Object); var logger = new Mock<ILogger>(); Scheduler scheduler = new Scheduler(1, BlueCollarSection.Section.ApplicationName, QueueNameFilters.Any(), 1, factory.Object, logger.Object); Assert.AreEqual(0, scheduler.Schedules.Count()); scheduler.RefreshSchedules(); Assert.AreEqual(1, scheduler.Schedules.Count()); }
/// <summary> /// Delete scheduled job tests. /// </summary> protected void DeleteScheduledJob() { if (this.Repository != null) { ScheduleRecord scheduleRecord = new ScheduleRecord() { ApplicationName = BlueCollarSection.Section.ApplicationName, Name = "Test", RepeatType = ScheduleRepeatType.Days, RepeatValue = 1, StartOn = DateTime.UtcNow.FloorWithSeconds() }; this.Repository.CreateSchedule(scheduleRecord, null); ScheduledJobRecord scheduledJobRecord = new ScheduledJobRecord() { ScheduleId = scheduleRecord.Id.Value, JobType = "BlueCollar.Test.TestJob, BlueCollar.Test", Data = "{}" }; this.Repository.CreateScheduledJob(scheduledJobRecord, null); this.Repository.DeleteScheduledJob(scheduledJobRecord.Id.Value, null); Assert.AreEqual(0, this.Repository.GetScheduledJobList(BlueCollarSection.Section.ApplicationName, scheduleRecord.Id.Value, null, 100, 0, null).TotalCount); } }
/// <summary> /// Delete all tests. /// </summary> protected void DeleteAll() { if (this.Repository != null) { IJob job = new TestJob() { Id = Guid.NewGuid() }; WorkerRecord workerRecord = new WorkerRecord() { ApplicationName = BlueCollarSection.Section.ApplicationName, MachineAddress = Machine.Address, MachineName = Machine.Name, Name = "Test Worker", QueueNames = "*", Signal = WorkerSignal.Stop, Status = WorkerStatus.Working, Startup = WorkerStartupType.Automatic, UpdatedOn = DateTime.UtcNow }; this.Repository.CreateWorker(workerRecord, null); QueueRecord queueRecord = new QueueRecord() { ApplicationName = workerRecord.ApplicationName, Data = JsonConvert.SerializeObject(job), JobName = job.Name, JobType = job.GetType().FullName + ", " + job.GetType().Assembly.GetName().Name, QueuedOn = DateTime.UtcNow, QueueName = "*", TryNumber = 1 }; this.Repository.CreateQueued(queueRecord, null); ScheduleRecord scheduleRecord = new ScheduleRecord() { ApplicationName = workerRecord.ApplicationName, Name = "Test", RepeatType = ScheduleRepeatType.Days, RepeatValue = 1, StartOn = DateTime.UtcNow }; this.Repository.CreateSchedule(scheduleRecord, null); ScheduledJobRecord scheduledJobRecord = new ScheduledJobRecord() { JobType = JobSerializer.GetTypeName(job.GetType()), ScheduleId = scheduleRecord.Id.Value }; this.Repository.CreateScheduledJob(scheduledJobRecord, null); WorkingRecord workingRecord = new WorkingRecord() { ApplicationName = workerRecord.ApplicationName, Data = JobSerializer.Serialize(job), JobName = job.Name, JobType = JobSerializer.GetTypeName(job.GetType()), QueuedOn = DateTime.UtcNow, QueueName = null, ScheduleId = scheduleRecord.Id, StartedOn = DateTime.UtcNow, TryNumber = 1, WorkerId = workerRecord.Id.Value }; this.Repository.CreateWorking(workingRecord, null); HistoryRecord historyRecord = new HistoryRecord() { ApplicationName = workerRecord.ApplicationName, Data = JobSerializer.Serialize(job), FinishedOn = DateTime.UtcNow, JobName = job.Name, JobType = JobSerializer.GetTypeName(job.GetType()), QueuedOn = DateTime.UtcNow, ScheduleId = scheduleRecord.Id, StartedOn = DateTime.UtcNow, Status = HistoryStatus.Succeeded, TryNumber = 1, WorkerId = workerRecord.Id.Value }; this.Repository.CreateHistory(historyRecord, null); this.Repository.DeleteAll(BlueCollarSection.Section.ApplicationName, null); Assert.AreEqual(0, this.Repository.GetHistoryList(workerRecord.ApplicationName, null, 100, 0, null).TotalCount); Assert.AreEqual(0, this.Repository.GetWorkingList(workerRecord.ApplicationName, null, 100, 0, null).TotalCount); Assert.AreEqual(0, this.Repository.GetWorkerList(workerRecord.ApplicationName, null, 100, 0, null).TotalCount); Assert.AreEqual(0, this.Repository.GetQueuedList(workerRecord.ApplicationName, null, 100, 0, null).TotalCount); Assert.AreEqual(0, this.Repository.GetScheduledJobList(workerRecord.ApplicationName, scheduleRecord.Id.Value, null, 0, 100, null).TotalCount); Assert.AreEqual(0, this.Repository.GetScheduleList(workerRecord.ApplicationName, null, 100, 0, null).TotalCount); } }
/// <summary> /// Create scheduled job tests. /// </summary> protected void CreateScheduledJob() { if (this.Repository != null) { ScheduleRecord scheduleRecord = new ScheduleRecord() { ApplicationName = BlueCollarSection.Section.ApplicationName, Name = "Test", QueueName = "*", RepeatType = ScheduleRepeatType.Days, RepeatValue = 1, StartOn = DateTime.UtcNow.FloorWithSeconds() }; this.Repository.CreateSchedule(scheduleRecord, null); ScheduledJobRecord scheduledJobRecord = new ScheduledJobRecord() { JobType = "BlueCollar.TestScheduledJob, BlueCollar", Data = "{}", ScheduleId = scheduleRecord.Id.Value }; this.Repository.CreateScheduledJob(scheduledJobRecord, null); Assert.IsNotNull(scheduledJobRecord.Id); } }
/// <summary> /// Update scheduled job order tests. /// </summary> protected void UpdateScheduledJobOrder() { if (this.Repository != null) { ScheduleRecord scheduleRecord = new ScheduleRecord() { ApplicationName = BlueCollarSection.Section.ApplicationName, Name = "Nightly", QueueName = "schedules", RepeatType = ScheduleRepeatType.Days, RepeatValue = 1, StartOn = DateTime.UtcNow.FloorWithSeconds() }; this.Repository.CreateSchedule(scheduleRecord, null); ScheduledJobRecord jobRecord1 = new ScheduledJobRecord() { ScheduleId = scheduleRecord.Id.Value, Number = 1, JobType = "BlueCollar.Test.TestJob, BlueCollar.Test", Data = "{}" }; this.Repository.CreateScheduledJob(jobRecord1, null); ScheduledJobRecord jobRecord2 = new ScheduledJobRecord() { ScheduleId = scheduleRecord.Id.Value, Number = 2, JobType = "BlueCollar.Test.TestJob, BlueCollar.Test", Data = "{}" }; this.Repository.CreateScheduledJob(jobRecord2, null); ScheduledJobRecord jobRecord3 = new ScheduledJobRecord() { ScheduleId = scheduleRecord.Id.Value, Number = 3, JobType = "BlueCollar.Test.TestJob, BlueCollar.Test", Data = "{}" }; this.Repository.CreateScheduledJob(jobRecord3, null); this.Repository.UpdateScheduledJobOrder(new ScheduledJobOrderRecord() { Id = jobRecord1.Id.Value, Number = 2, ScheduleId = scheduleRecord.Id.Value }, null); ScheduledJobRecordList jobList = this.Repository.GetScheduledJobList(scheduleRecord.ApplicationName, scheduleRecord.Id.Value, null, 100, 0, null); Assert.IsNotNull(jobList); Assert.AreEqual(3, jobList.Records.Count); Assert.AreEqual(2, jobList.Records.First(j => j.Id == jobRecord1.Id).Number); Assert.AreEqual(1, jobList.Records.First(j => j.Id == jobRecord2.Id).Number); Assert.AreEqual(3, jobList.Records.First(j => j.Id == jobRecord3.Id).Number); this.Repository.UpdateScheduledJobOrder(new ScheduledJobOrderRecord() { Id = jobRecord3.Id.Value, Number = 1, ScheduleId = scheduleRecord.Id.Value }, null); jobList = this.Repository.GetScheduledJobList(scheduleRecord.ApplicationName, scheduleRecord.Id.Value, null, 100, 0, null); Assert.IsNotNull(jobList); Assert.AreEqual(3, jobList.Records.Count); Assert.AreEqual(3, jobList.Records.First(j => j.Id == jobRecord1.Id).Number); Assert.AreEqual(2, jobList.Records.First(j => j.Id == jobRecord2.Id).Number); Assert.AreEqual(1, jobList.Records.First(j => j.Id == jobRecord3.Id).Number); } }
/// <summary> /// Update scheduled job tests. /// </summary> protected void UpdateScheduledJob() { if (this.Repository != null) { ScheduleRecord scheduleRecord = new ScheduleRecord() { ApplicationName = BlueCollarSection.Section.ApplicationName, Name = "Nightly", QueueName = "schedules", RepeatType = ScheduleRepeatType.Days, RepeatValue = 1, StartOn = DateTime.UtcNow.FloorWithSeconds() }; this.Repository.CreateSchedule(scheduleRecord, null); ScheduledJobRecord jobRecord = new ScheduledJobRecord() { ScheduleId = scheduleRecord.Id.Value, JobType = "BlueCollar.Test.TestJob, BlueCollar.Test", Data = "{}" }; this.Repository.CreateScheduledJob(jobRecord, null); jobRecord.JobType = "BlueCollar.Test.UpdatedJob, BlueCollar.Test"; jobRecord.Data = "{\"One\":null, \"Two\":\"Three\"}"; this.Repository.UpdateScheduledJob(jobRecord, null); ScheduledJobRecord updatedJob = this.Repository.GetScheduledJobList(BlueCollarSection.Section.ApplicationName, scheduleRecord.Id.Value, null, 100, 0, null).Records[0]; Assert.AreEqual(jobRecord.JobType, updatedJob.JobType); Assert.AreEqual(jobRecord.Data, updatedJob.Data); } }
/// <summary> /// Get schedules tests. /// </summary> protected void GetSchedules() { if (this.Repository != null) { ScheduleRecord scheduleRecord = new ScheduleRecord() { ApplicationName = BlueCollarSection.Section.ApplicationName, Name = "Nightly", QueueName = "schedules", RepeatType = ScheduleRepeatType.Days, RepeatValue = 1, StartOn = DateTime.UtcNow.FloorWithSeconds() }; this.Repository.CreateSchedule(scheduleRecord, null); ScheduledJobRecord scheduledJobRecord = new ScheduledJobRecord() { ScheduleId = scheduleRecord.Id.Value, JobType = "BlueCollar.TestScheduledJob, BlueCollar", Data = "{}" }; this.Repository.CreateScheduledJob(scheduledJobRecord, null); scheduleRecord.Id = null; scheduleRecord.Name = "Weekly"; scheduleRecord.RepeatType = ScheduleRepeatType.Weeks; this.Repository.CreateSchedule(scheduleRecord, null); scheduledJobRecord = new ScheduledJobRecord() { ScheduleId = scheduleRecord.Id.Value, JobType = "BlueCollar.TestScheduledJob2, BlueCollar", Data = "{}" }; this.Repository.CreateScheduledJob(scheduledJobRecord, null); scheduledJobRecord = new ScheduledJobRecord() { ScheduleId = scheduleRecord.Id.Value, JobType = "BlueCollar.TestScheduledJob3, BlueCollar", Data = "{}" }; this.Repository.CreateScheduledJob(scheduledJobRecord, null); var schedules = this.Repository.GetSchedules(scheduleRecord.ApplicationName, null); Assert.AreEqual(2, schedules.Count()); Assert.AreEqual(1, schedules.ElementAt(0).ScheduledJobs.Count); Assert.AreEqual(2, schedules.ElementAt(1).ScheduledJobs.Count); } }
/// <summary> /// Get schedule list tests. /// </summary> protected void GetScheduleList() { if (this.Repository != null) { ScheduleRecord scheduleRecord = new ScheduleRecord() { ApplicationName = BlueCollarSection.Section.ApplicationName, Name = "Nightly", QueueName = "schedules", RepeatType = ScheduleRepeatType.Days, RepeatValue = 1, StartOn = DateTime.UtcNow.FloorWithSeconds() }; this.Repository.CreateSchedule(scheduleRecord, null); ScheduledJobRecord scheduledJobRecord = new ScheduledJobRecord() { ScheduleId = scheduleRecord.Id.Value, JobType = "BlueCollar.TestScheduledJob, BlueCollar", Data = "{}" }; this.Repository.CreateScheduledJob(scheduledJobRecord, null); scheduleRecord.Id = null; scheduleRecord.Name = "Weekly"; scheduleRecord.RepeatType = ScheduleRepeatType.Weeks; this.Repository.CreateSchedule(scheduleRecord, null); scheduledJobRecord = new ScheduledJobRecord() { ScheduleId = scheduleRecord.Id.Value, JobType = "BlueCollar.TestScheduledJob2, BlueCollar", Data = "{}" }; this.Repository.CreateScheduledJob(scheduledJobRecord, null); scheduledJobRecord = new ScheduledJobRecord() { ScheduleId = scheduleRecord.Id.Value, JobType = "BlueCollar.TestScheduledJob3, BlueCollar", Data = "{}" }; this.Repository.CreateScheduledJob(scheduledJobRecord, null); RecordList<ScheduleListRecord> schedules = this.Repository.GetScheduleList(BlueCollarSection.Section.ApplicationName, null, 100, 0, null); Assert.IsNotNull(schedules); Assert.AreEqual(2, schedules.TotalCount); Assert.AreEqual(2, schedules.Records.Count); Assert.AreEqual("Nightly", schedules.Records[0].Name); Assert.AreEqual(1, schedules.Records[0].JobCount); Assert.AreEqual("Weekly", schedules.Records[1].Name); Assert.AreEqual(2, schedules.Records[1].JobCount); } }
/// <summary> /// Get schedule date exists for schedule tests. /// </summary> protected void GetScheduleDateExistsForSchedule() { if (this.Repository != null) { DateTime now = DateTime.UtcNow.FloorWithSeconds(); TestJob job = new TestJob(); ScheduleRecord scheduleRecord = new ScheduleRecord() { ApplicationName = BlueCollarSection.Section.ApplicationName, Name = "Test", RepeatType = ScheduleRepeatType.Days, RepeatValue = 1, StartOn = now.AddDays(-1) }; this.Repository.CreateSchedule(scheduleRecord, null); ScheduledJobRecord scheduledJobRecord = new ScheduledJobRecord() { JobType = JobSerializer.GetTypeName(job), ScheduleId = scheduleRecord.Id.Value }; this.Repository.CreateScheduledJob(scheduledJobRecord, null); Assert.IsFalse(this.Repository.GetScheduleDateExistsForSchedule(scheduleRecord.Id.Value, now, null)); QueueRecord queueRecord = new QueueRecord() { ApplicationName = scheduleRecord.ApplicationName, Data = JobSerializer.Serialize(job), JobName = job.Name, JobType = JobSerializer.GetTypeName(job), QueuedOn = now, ScheduleId = scheduleRecord.Id, TryNumber = 1 }; this.Repository.CreateQueued(queueRecord, null); Assert.IsTrue(this.Repository.GetScheduleDateExistsForSchedule(scheduleRecord.Id.Value, now, null)); } }