Exemple #1
0
        public void HasTriggerWithJobId_QueryByMatchingJobId_ReturnsListWithSingle()
        {
            // Arrange
            var instantTrigger = new InstantTrigger {
                IsActive = true
            };
            var recurringTrigger = new RecurringTrigger()
            {
                IsActive = true
            };
            var scheduledTrigger = new ScheduledTrigger {
                IsActive = true
            };

            this.Services.JobStorageProvider.AddTrigger(100, instantTrigger);
            this.Services.JobStorageProvider.AddTrigger(200, recurringTrigger);
            this.Services.JobStorageProvider.AddTrigger(300, scheduledTrigger);

            // Act
            var triggers = this.QueryService.GetTriggersByJobId(200, 1, 50).Items;
            var assertingRecurringTrigger = triggers[0] as ComponentModel.Management.Model.RecurringTrigger;

            // Test
            Assert.IsNotNull(triggers);
            Assert.AreEqual(1, triggers.Count);
            Assert.AreEqual(recurringTrigger.Id, assertingRecurringTrigger.Id);
        }
Exemple #2
0
        public void HasOneMatchingJobRun_QueryJobByUserId_ReturnsListWithSingle()
        {
            const long jobId = 1;

            // Arrange
            var job = new Job {
                Id = jobId
            };
            var instantTrigger = new InstantTrigger {
                UserId = "45"
            };

            this.Services.JobStorageProvider.AddTrigger(jobId, instantTrigger);

            var jobRun = new JobRun {
                Trigger = instantTrigger, Job = job
            };

            this.Services.JobStorageProvider.AddJobRun(jobRun);

            // Act
            var runs = this.QueryService.GetJobRunsByUserId("45");

            Assert.IsNotNull(runs);
            Assert.AreEqual(1, runs.Items.Count);
            Assert.AreEqual(jobRun.Id, runs.Items[0].Id);
        }
        public void GivenInstantTrigger_WhenUpdating_TriggerIsUpdated()
        {
            GivenRavenDb();
            GivenStorageProvider();

            var job1 = new Job {
                UniqueName = "testjob1", Type = "Jobs.Test1"
            };

            this.StorageProvider.AddJob(job1);

            var trigger = new InstantTrigger();

            this.StorageProvider.AddTrigger(job1.Id, trigger);

            var trigger2 = (InstantTrigger)this.StorageProvider.GetTriggerById(job1.Id, trigger.Id);

            trigger2.Comment        = "bla";
            trigger2.IsActive       = true;
            trigger2.Parameters     = "test-parameters";
            trigger2.UserId         = "ozu";
            trigger2.DelayedMinutes = 5;

            this.StorageProvider.Update(job1.Id, trigger2);

            var trigger2Reloaded = (InstantTrigger)this.StorageProvider.GetTriggerById(job1.Id, trigger2.Id);

            Assert.AreEqual("bla", trigger2Reloaded.Comment);
            Assert.IsTrue(trigger2Reloaded.IsActive);
            Assert.AreEqual("test-parameters", trigger2Reloaded.Parameters);
            Assert.AreEqual("ozu", trigger2Reloaded.UserId);
            Assert.AreEqual(5, trigger2Reloaded.DelayedMinutes);
        }
        public void GivenJobRun_WhenUpdatingProgress_ProgressIsUpdated()
        {
            GivenRavenDb();
            GivenStorageProvider();

            var job1 = new Job {
                UniqueName = "testjob1", Type = "Jobs.Test1"
            };

            this.StorageProvider.AddJob(job1);

            var trigger1 = new InstantTrigger {
                IsActive = true
            };

            this.StorageProvider.AddTrigger(job1.Id, trigger1);

            var now = DateTime.UtcNow;

            var jobRun1 = new JobRun {
                JobId = job1.Id, TriggerId = trigger1.Id, PlannedStartDateTimeUtc = now, ActualStartDateTimeUtc = now, State = JobRunStates.Completed
            };

            this.StorageProvider.AddJobRun(jobRun1);

            this.StorageProvider.UpdateProgress(jobRun1.Id, 50);

            var jobRun2 = this.StorageProvider.GetJobRunById(jobRun1.Id);

            Assert.AreEqual(50, jobRun2.Progress);
        }
Exemple #5
0
        public void HasOneMatchingJobRun_QueryJobByInexistentUserName_ReturnsEmptyList()
        {
            const long jobId = 1;

            // Arrange
            var instantTrigger = new InstantTrigger {
                UserDisplayName = "hans"
            };
            var job = new Job {
                Id = jobId
            };

            this.Services.JobStorageProvider.AddTrigger(jobId, instantTrigger);

            var jobRun = new JobRun {
                Job = job, Trigger = instantTrigger
            };

            this.Services.JobStorageProvider.AddJobRun(jobRun);

            // Act
            var runs = this.QueryService.GetJobRunsByUserDisplayName("blablablabl");

            Assert.IsNotNull(runs);
            Assert.AreEqual(0, runs.Items.Count);
        }
        public void GivenJobRun_WhenQueryingById_IsReturned()
        {
            GivenRavenDb();
            GivenStorageProvider();

            var job1 = new Job {
                UniqueName = "testjob1", Type = "Jobs.Test1"
            };

            this.StorageProvider.AddJob(job1);

            var trigger1 = new InstantTrigger {
                IsActive = true
            };

            this.StorageProvider.AddTrigger(job1.Id, trigger1);

            var jobRun1 = new JobRun {
                JobId = job1.Id, TriggerId = trigger1.Id, PlannedStartDateTimeUtc = DateTime.UtcNow
            };

            this.StorageProvider.AddJobRun(jobRun1);

            WaitForIndexing(this.Store);

            var jobRun2 = this.StorageProvider.GetJobRunById(jobRun1.Id);

            Assert.AreEqual(jobRun1.Id, jobRun2.Id);
        }
        public void GivenSomeTriggers_WhenQueryingTriggersByJobId_OnlyTriggersOfThatJobAreReturned()
        {
            GivenRavenDb();
            GivenStorageProvider();

            var job1 = new Job {
                UniqueName = "testjob1", Type = "Jobs.Test1"
            };
            var job2 = new Job {
                UniqueName = "testjob2", Type = "Jobs.Test2"
            };

            this.StorageProvider.AddJob(job1);
            this.StorageProvider.AddJob(job2);

            var trigger1 = new InstantTrigger();
            var trigger2 = new InstantTrigger();
            var trigger3 = new InstantTrigger();

            this.StorageProvider.AddTrigger(job1.Id, trigger1);
            this.StorageProvider.AddTrigger(job1.Id, trigger2);
            this.StorageProvider.AddTrigger(job2.Id, trigger3);

            WaitForIndexing(this.Store);

            var triggersOfJob1 = this.StorageProvider.GetTriggersByJobId(job1.Id);
            var triggersOfJob2 = this.StorageProvider.GetTriggersByJobId(job2.Id);

            Assert.AreEqual(2, triggersOfJob1.Count);
            Assert.AreEqual(1, triggersOfJob2.Count);
        }
        public void GivenSomeTriggers_WhenQueryingForActiveTriggers_AllActiveTriggersAreReturned()
        {
            GivenRavenDb();
            GivenStorageProvider();

            var job1 = new Job {
                UniqueName = "testjob1", Type = "Jobs.Test1"
            };
            var job2 = new Job {
                UniqueName = "testjob2", Type = "Jobs.Test2"
            };

            this.StorageProvider.AddJob(job1);
            this.StorageProvider.AddJob(job2);

            var trigger1 = new InstantTrigger {
                IsActive = false
            };
            var trigger2 = new InstantTrigger {
                IsActive = true
            };
            var trigger3 = new InstantTrigger {
                IsActive = true
            };

            this.StorageProvider.AddTrigger(job1.Id, trigger1);
            this.StorageProvider.AddTrigger(job1.Id, trigger2);
            this.StorageProvider.AddTrigger(job2.Id, trigger3);

            WaitForIndexing(this.Store);

            var activeTriggers = this.StorageProvider.GetActiveTriggers();

            Assert.AreEqual(2, activeTriggers.Count);
        }
        internal static InstantTrigger ConvertToTrigger(InstantTriggerDto dto)
        {
            var trigger = new InstantTrigger {
                DelayedMinutes = dto.DelayedMinutes
            };

            return((InstantTrigger)MapCommonValues(dto, trigger));
        }
        internal static InstantTriggerDto ConvertToDto(InstantTrigger trigger)
        {
            var dto = new InstantTriggerDto {
                DelayedMinutes = trigger.DelayedMinutes
            };

            return((InstantTriggerDto)MapCommonValues(trigger, dto));
        }
Exemple #11
0
        public void AddTrigger(long jobId, InstantTrigger trigger)
        {
            var newTriggerId = this.localTriggers.Count + 1;

            trigger.Id    = newTriggerId;
            trigger.JobId = jobId;
            this.localTriggers.Add(trigger);
        }
        public void Update(long jobId, InstantTrigger trigger)
        {
            using (var connection = this.connectionFactory.Open())
            {
                var entity = trigger.ToEntity();

                connection.Update(entity);
            }
        }
        public void AddTrigger(long jobId, InstantTrigger trigger)
        {
            var model = this.mapper.Map <InstantTriggerModel>(trigger);

            this.triggerService.Add(jobId, model);

            trigger.Id    = model.Id;
            trigger.JobId = jobId;
        }
        public void NewInstantTrigger_IsAdded_WillBePlanned()
        {
            var scheduledTrigger = new InstantTrigger()
            {
                JobId = this.demoJob1Id, IsActive = true
            };

            this.AddAndSignalNewTrigger(this.demoJob1Id, scheduledTrigger);

            Assert.AreEqual(1, this.lastIssuedPlan.Count, "A instant trigger should cause one item in the plan");
        }
Exemple #15
0
        private void AddJobRun(DateTime plannedStartDateTimeUtc, JobRunStates state)
        {
            var scheduledTrigger = new InstantTrigger()
            {
                JobId = this.demoJob1Id, IsActive = true
            };
            var demoJob = this.repository.GetJob(this.demoJob1Id);

            var jobRun = this.repository.SaveNewJobRun(demoJob, scheduledTrigger, plannedStartDateTimeUtc);

            jobRun.State = state;
            this.repository.Update(jobRun);
        }
        private void InsertTrigger(InstantTrigger trigger)
        {
            var entity = trigger.ToEntity();

            if (entity.CreatedDateTimeUtc == default(DateTime))
            {
                entity.CreatedDateTimeUtc = DateTime.UtcNow;
            }

            using (var connection = this.connectionFactory.OpenDbConnection())
            {
                trigger.Id = connection.Insert(entity, true);
            }
        }
 public static ComponentModel.JobStorage.Model.InstantTrigger ToModel(this InstantTrigger src, long jobId)
 {
     return(new ComponentModel.JobStorage.Model.InstantTrigger
     {
         Id = src.Id,
         CreatedDateTimeUtc = src.CreatedDateTimeUtc,
         Parameters = src.Parameters,
         IsActive = src.IsActive,
         Comment = src.Comment,
         UserId = src.UserId,
         UserDisplayName = src.UserDisplayName,
         DelayedMinutes = src.DelayedMinutes,
         JobId = jobId
     });
 }
Exemple #18
0
        private JobRun GivenAJobRun()
        {
            var job1 = new Job();

            this.repo.AddJob(job1);

            var trigger = new InstantTrigger
            {
                JobId    = job1.Id,
                IsActive = true
            };

            var jobrun = this.repo.SaveNewJobRun(job1, trigger, DateTime.UtcNow);

            return(jobrun);
        }
        public void GivenJobRun_WhenUpdating_JobRunIsUpdated()
        {
            GivenRavenDb();
            GivenStorageProvider();

            var job1 = new Job {
                UniqueName = "testjob1", Type = "Jobs.Test1"
            };

            this.StorageProvider.AddJob(job1);

            var trigger = new InstantTrigger {
                IsActive = true
            };

            this.StorageProvider.AddTrigger(job1.Id, trigger);

            var jobRun = new JobRun {
                JobId = job1.Id, TriggerId = trigger.Id, PlannedStartDateTimeUtc = DateTime.UtcNow
            };

            this.StorageProvider.AddJobRun(jobRun);

            var newPlannedStartDate   = DateTime.UtcNow;
            var newActualStartDate    = newPlannedStartDate.AddSeconds(1);
            var newEstimatedStartDate = newPlannedStartDate.AddMilliseconds(1);
            var newActualEndDate      = newPlannedStartDate.AddMinutes(1);

            jobRun.JobParameters           = "test-jobparameters";
            jobRun.InstanceParameters      = "test-instanceparameters";
            jobRun.PlannedStartDateTimeUtc = newPlannedStartDate;
            jobRun.ActualStartDateTimeUtc  = newActualStartDate;
            jobRun.EstimatedEndDateTimeUtc = newEstimatedStartDate;
            jobRun.ActualEndDateTimeUtc    = newActualEndDate;

            this.StorageProvider.Update(jobRun);

            var job1Reloaded = this.StorageProvider.GetJobRunById(jobRun.Id);

            Assert.AreEqual("test-jobparameters", job1Reloaded.JobParameters);
            Assert.AreEqual("test-instanceparameters", job1Reloaded.InstanceParameters);
            Assert.AreEqual(newPlannedStartDate.ToString(CultureInfo.InvariantCulture), job1Reloaded.PlannedStartDateTimeUtc.ToString(CultureInfo.InvariantCulture));
            Assert.AreEqual(newActualStartDate.ToString(CultureInfo.InvariantCulture), job1Reloaded.ActualStartDateTimeUtc.GetValueOrDefault().ToString(CultureInfo.InvariantCulture));
            Assert.AreEqual(newEstimatedStartDate.ToString(CultureInfo.InvariantCulture), job1Reloaded.EstimatedEndDateTimeUtc.GetValueOrDefault().ToString(CultureInfo.InvariantCulture));
            Assert.AreEqual(newActualEndDate.ToString(CultureInfo.InvariantCulture), job1Reloaded.ActualEndDateTimeUtc.GetValueOrDefault().ToString(CultureInfo.InvariantCulture));
        }
Exemple #20
0
        public void Update(long jobId, InstantTrigger trigger)
        {
            using (var session = this._documentStore.OpenSession())
            {
                var job = session.Load <Model.Job>(jobId);

                var triggerFromDb = job.InstantTriggers.First(p => p.Id == trigger.Id);
                job.InstantTriggers.Remove(triggerFromDb);

                var entity = trigger.ToEntity();

                job.InstantTriggers.Add(entity);

                session.Store(job);
                session.SaveChanges();
            }
        }
 public static Entities.Trigger ToEntity(this InstantTrigger model)
 {
     return(new Entities.Trigger
     {
         Id = model.Id,
         UserId = model.UserId,
         UserDisplayName = model.UserDisplayName,
         JobId = model.JobId,
         IsActive = model.IsActive,
         Comment = model.Comment,
         Parameters = model.Parameters,
         CreatedDateTimeUtc = model.CreatedDateTimeUtc,
         Type = Entities.TriggerType.InstantTrigger,
         DelayedMinutes = model.DelayedMinutes,
         NoParallelExecution = false,
         Deleted = model.Deleted,
     });
 }
        public void GetInstantTrigger()
        {
            using (this.GivenRunningServerWithWebApi())
            {
                var client = new JobbrClient(this.BackendAddress);

                var job = new Job();
                this.JobStorage.AddJob(job);

                var trigger = new InstantTrigger();
                this.JobStorage.AddTrigger(job.Id, trigger);

                var triggerDto = client.GetTriggerById <InstantTriggerDto>(job.Id, trigger.Id);

                Assert.IsNotNull(triggerDto);
                Assert.AreEqual(trigger.Id, triggerDto.Id);
            }
        }
Exemple #23
0
        public void AddTrigger(long jobId, InstantTrigger trigger)
        {
            using (var session = this._documentStore.OpenSession())
            {
                var job    = session.Load <Model.Job>(jobId);
                var entity = trigger.ToEntity();
                entity.Id = ++job.LastTriggerId;
                entity.CreatedDateTimeUtc = DateTime.UtcNow;

                job.InstantTriggers.Add(entity);

                session.Store(job);
                session.SaveChanges();

                trigger.Id = entity.Id;
                trigger.CreatedDateTimeUtc = entity.CreatedDateTimeUtc;
            }
        }
Exemple #24
0
        internal PlanResult Plan(InstantTrigger trigger, bool isNew = false)
        {
            if (!trigger.IsActive)
            {
                return(PlanResult.FromAction(PlanAction.Obsolete));
            }

            var baseDateTimeUtc   = trigger.CreatedDateTimeUtc;
            var calculatedNextRun = baseDateTimeUtc.AddMinutes(trigger.DelayedMinutes);

            if (calculatedNextRun < this.dateTimeProvider.GetUtcNow() && !isNew)
            {
                return(PlanResult.FromAction(PlanAction.Obsolete));
            }

            return(new PlanResult {
                Action = PlanAction.Possible, ExpectedStartDateUtc = calculatedNextRun
            });
        }
        public void HasOneMatchingJobRun_QueryJobByInexistentUserId_ReturnsEmptyList()
        {
            const long jobId = 1;

            // Arrange
            var instantTrigger = new InstantTrigger {
                UserId = "45"
            };

            this.Services.JobStorageProvider.AddTrigger(jobId, instantTrigger);
            this.Services.JobStorageProvider.AddJobRun(new JobRun {
                TriggerId = instantTrigger.Id, JobId = jobId
            });

            // Act
            var runs = this.QueryService.GetJobRunsByUserIdOrderByIdDesc("88");

            Assert.IsNotNull(runs);
            Assert.AreEqual(0, runs.Count);
        }
        public void UpdateInstantTrigger()
        {
            using (this.GivenRunningServerWithWebApi())
            {
                var client = new JobbrClient(this.BackendAddress);

                var job = new Job();
                this.JobStorage.AddJob(job);

                var trigger = new InstantTrigger();
                this.JobStorage.AddTrigger(job.Id, trigger);

                var triggerDto = client.UpdateTrigger(job.Id, new InstantTriggerDto {
                    Id = trigger.Id, IsActive = true
                });

                Assert.IsNotNull(triggerDto);
                Assert.IsTrue(triggerDto.IsActive);
            }
        }
        public void GivenThreeJobRuns_WhenQueryingForSpecificStatePaged_ResultIsPaged()
        {
            GivenRavenDb();
            GivenStorageProvider();

            var job1 = new Job {
                UniqueName = "testjob1", Type = "Jobs.Test1"
            };

            this.StorageProvider.AddJob(job1);

            var trigger1 = new InstantTrigger {
                IsActive = true
            };

            this.StorageProvider.AddTrigger(job1.Id, trigger1);

            var jobRun1 = new JobRun {
                JobId = job1.Id, TriggerId = trigger1.Id, PlannedStartDateTimeUtc = DateTime.UtcNow, State = JobRunStates.Completed
            };
            var jobRun2 = new JobRun {
                JobId = job1.Id, TriggerId = trigger1.Id, PlannedStartDateTimeUtc = DateTime.UtcNow, State = JobRunStates.Completed
            };
            var jobRun3 = new JobRun {
                JobId = job1.Id, TriggerId = trigger1.Id, PlannedStartDateTimeUtc = DateTime.UtcNow, State = JobRunStates.Failed
            };

            this.StorageProvider.AddJobRun(jobRun1);
            this.StorageProvider.AddJobRun(jobRun2);
            this.StorageProvider.AddJobRun(jobRun3);

            WaitForIndexing(this.Store);

            var jobRuns = this.StorageProvider.GetJobRunsByState(JobRunStates.Completed, 0, 1);

            Assert.AreEqual(1, jobRuns.Count);

            jobRuns = this.StorageProvider.GetJobRunsByState(JobRunStates.Completed, 0, 2);

            Assert.AreEqual(2, jobRuns.Count);
        }
        public void HasOneMatchingJobRun_QueryJobByUserName_ReturnsListWithSingle()
        {
            const long jobId = 1;
            // Arrange
            var instantTrigger = new InstantTrigger {
                UserDisplayName = "hans"
            };

            this.Services.JobStorageProvider.AddTrigger(jobId, instantTrigger);

            this.Services.JobStorageProvider.AddJobRun(new JobRun {
                JobId = jobId, TriggerId = instantTrigger.Id
            });

            // Act
            var runs = this.QueryService.GetJobRunsByUserDisplayNameOrderByIdDesc("hans");

            Assert.IsNotNull(runs);
            Assert.AreEqual(1, runs.Count);
            Assert.AreEqual(instantTrigger.Id, runs[0].TriggerId);
        }
Exemple #29
0
        public void HasOneMatchingJobRun_QueryJobByUserId_ReturnsSortedListByIdDesc()
        {
            const long jobId = 1;

            // Arrange
            var job = new Job {
                Id = jobId
            };
            var instantTrigger1 = new InstantTrigger {
                UserId = "45"
            };

            this.Services.JobStorageProvider.AddTrigger(jobId, instantTrigger1);

            var instantTrigger2 = new InstantTrigger {
                UserId = "45"
            };

            this.Services.JobStorageProvider.AddTrigger(jobId, instantTrigger2);

            var jobRun1 = new JobRun {
                Job = job, Trigger = instantTrigger1
            };

            this.Services.JobStorageProvider.AddJobRun(jobRun1);

            var jobRun2 = new JobRun {
                Job = job, Trigger = instantTrigger2
            };

            this.Services.JobStorageProvider.AddJobRun(jobRun2);

            // Act
            var runs = this.QueryService.GetJobRunsByUserId("45");

            Assert.IsNotNull(runs);
            Assert.AreEqual(2, runs.Items.Count);
            Assert.AreEqual(jobRun2.Id, runs.Items[0].Id);
            Assert.AreEqual(jobRun1.Id, runs.Items[1].Id);
        }
Exemple #30
0
        public void HasDifferentTriggerTypes_QueryById_ReturnsCorrectType()
        {
            // Arrange
            const long jobId            = 1;
            var        instantTrigger   = new InstantTrigger();
            var        recurringTrigger = new RecurringTrigger();
            var        scheduledTrigger = new ScheduledTrigger();

            this.Services.JobStorageProvider.AddTrigger(jobId, instantTrigger);
            this.Services.JobStorageProvider.AddTrigger(jobId, recurringTrigger);
            this.Services.JobStorageProvider.AddTrigger(jobId, scheduledTrigger);

            // Act
            var instantTypeTrigger   = this.QueryService.GetTriggerById(jobId, instantTrigger.Id);
            var recurringTypeTrigger = this.QueryService.GetTriggerById(jobId, recurringTrigger.Id);
            var scheduledTypeTrigger = this.QueryService.GetTriggerById(jobId, scheduledTrigger.Id);

            // Test
            Assert.AreEqual(typeof(ComponentModel.Management.Model.InstantTrigger), instantTypeTrigger.GetType());
            Assert.AreEqual(typeof(ComponentModel.Management.Model.RecurringTrigger), recurringTypeTrigger.GetType());
            Assert.AreEqual(typeof(ComponentModel.Management.Model.ScheduledTrigger), scheduledTypeTrigger.GetType());
        }