Example #1
0
        public void AndTest()
        {
            TriggerStub  triggerA = new TriggerStub("A");
            TriggerStub  triggerB = new TriggerStub("B");
            TriggerInput combined = triggerA.And(triggerB);

            Assert.That(combined.ToString(), Is.EqualTo("A+B"));
            ValueSpy <bool> spy = new ValueSpy <bool>(combined);

            triggerA.Update(true);
            spy.WaitFrame();
            spy.AssertNothingHappened();

            triggerA.Update(false);
            triggerB.Update(true);
            spy.WaitFrame();
            spy.AssertNothingHappened();

            triggerA.Update(true);
            spy.WaitFrame();
            spy.AssertWasUpdatedTo(true);

            triggerA.Update(false);
            spy.WaitFrame();
            spy.AssertWasUpdatedTo(false);

            triggerB.Update(false);
            spy.WaitFrame();
            spy.AssertNothingHappened();
        }
        public void StopCleansUpTriggers()
        {
            var cleaned = false;
            var trigger = new TriggerStub
            {
                OnCleanUp     = () => cleaned = true,
                OnCheckAction = () => null
            };
            var project = new ProjectStub("Test")
            {
                OnLoadState = () => { }
            };

            project.Triggers.Add(trigger);
            project.Start();

            // Give the project time to start
            Thread.Sleep(100);
            project.Stop();

            // Give the project time to stop
            Thread.Sleep(1000);
            Assert.IsTrue(cleaned);
            Assert.IsNull(project.MainThreadException);
        }
        public void TriggerFiresIfOutsidePeriod()
        {
            var clockMock = new Mock <IClock>();
            var time      = DateTime.Now;

            clockMock.Setup(c => c.Now).Returns(() =>
            {
                time = time.AddMinutes(10);
                return(time);
            });
            var inner = new TriggerStub
            {
                OnCheckAction = () => new IntegrationRequest("Test")
            };
            var trigger = new RollUp(TimeSpan.FromMinutes(5))
            {
                InnerTrigger = inner,
                Clock        = clockMock.Object
            };

            trigger.Reset();
            var request = trigger.Check();

            Assert.IsNotNull(request);
        }
        public void Execute_JobClassProvided_ShouldScheduleNewJob()
        {
            const string groupName = "Group";
            const string jobName   = "Job";

            var stub = new SchedulerHostStub(new[] { typeof(System.Object) });

            var command = new AddTriggerCommand(() => stub.Value, new RegisteredInputType[0]);

            AddTriggerOutput result = (AddTriggerOutput)command.Execute(new AddTriggerInput
            {
                Group       = groupName,
                Job         = jobName,
                JobClass    = typeof(System.Object).ToString(),
                Name        = "Trigger",
                TriggerType = "Simple"
            });

            result.AssertSuccessfull();

            GroupStub   group   = stub.GetSingleGroup();
            JobStub     job     = group.GetSingleJob();
            TriggerStub trigger = job.GetSingleTrigger();

            Assert.That(group.Name, Is.EqualTo(groupName));
            Assert.That(job.Name, Is.EqualTo(jobName));
            Assert.That(job.JobType, Is.EqualTo(typeof(System.Object)));
            Assert.That(trigger.Name, Is.EqualTo("Trigger"));
        }
Example #5
0
        public void JobWasExecuted_ListenToJobs_ShouldEmitEvent()
        {
            const string fireInstanceId = "fire-42";
            const string triggerKey     = "fire-42";

            var emitted = ExecuteAndGetEvent(
                new Quartz3SchedulerEventSource(true),
                eventSource =>
            {
                var trigger = new TriggerStub(triggerKey);
                eventSource.JobWasExecuted(
                    new JobExecutionContextStub
                {
                    Trigger        = trigger,
                    FireInstanceId = fireInstanceId
                },
                    null);
            });

            Assert.That(emitted, Is.Not.Null);
            Assert.That(emitted.Error, Is.Null);
            Assert.That(emitted.EventType, Is.EqualTo(SchedulerEventType.Complete));
            Assert.That(emitted.FireInstanceId, Is.EqualTo(fireInstanceId));
            Assert.That(emitted.ItemKey, Is.EqualTo("DEFAULT." + triggerKey));
            Assert.That(emitted.Scope, Is.EqualTo(SchedulerEventScope.Trigger));
        }
Example #6
0
            public void TestInputTrigger()
            {
                // Prepare datas
                Trigger   input_Trigger            = new TriggerStub();
                State     state_stub               = new StateStub();
                State     expected_CurrentState    = state_stub;
                FieldInfo current_state_field_info = StateMachineInstance.GetType().GetField("CurrentState",
                                                                                             BindingFlags.GetField | BindingFlags.NonPublic | BindingFlags.Instance);
                State before_CurrentState = (State)current_state_field_info.GetValue(StateMachineInstance);

                // Prepare mocks
                var transition_mock = new TransitionExecuteReturnParticularStateMock(state_stub);

                transition_mock.HasCalledExecute = false;
                var transition_matrix_mock = new TransitionMatrixSearchTransitionReturnParticularTransitionMock(transition_mock);

                transition_matrix_mock.HasCalledSearchTransition = false;
                FieldInfo transition_matrix_data_field_info = StateMachineInstance.GetType().GetField("TransitionMatrixData",
                                                                                                      BindingFlags.SetField | BindingFlags.NonPublic | BindingFlags.Instance);

                transition_matrix_data_field_info.SetValue(StateMachineInstance, transition_matrix_mock);

                // Execute
                StateMachineInstance.InputTrigger(input_Trigger);

                // Get results
                State actual_CurrentState = (State)current_state_field_info.GetValue(StateMachineInstance);

                // Validate
                Assert.True(transition_matrix_mock.HasCalledSearchTransition);
                Assert.True(transition_mock.HasCalledExecute);
                Assert.NotSame(before_CurrentState, actual_CurrentState);
                Assert.Same(expected_CurrentState, actual_CurrentState);
            }
        public void TriggerComplete_ListenToTriggers_ShouldEmitEvent()
        {
            const string fireInstanceId = "fire-42";
            const string triggerKey     = "fire-42";

            var emitted = ExecuteAndGetEvent(
                new Quartz2SchedulerEventSource(false),
                eventSource =>
            {
                var trigger = new TriggerStub(triggerKey);
                eventSource.TriggerComplete(
                    trigger,
                    new JobExecutionContextStub
                {
                    FireInstanceId = fireInstanceId,
                    Trigger        = trigger
                },
                    SchedulerInstruction.SetTriggerComplete);
            });

            Assert.That(emitted, Is.Not.Null);
            Assert.That(emitted.Error, Is.Null);
            Assert.That(emitted.EventType, Is.EqualTo(SchedulerEventType.Complete));
            Assert.That(emitted.FireInstanceId, Is.EqualTo(fireInstanceId));
            Assert.That(emitted.ItemKey, Is.EqualTo("DEFAULT." + triggerKey));
            Assert.That(emitted.Scope, Is.EqualTo(SchedulerEventScope.Trigger));
        }
        public void Execute_NoJobClass_ShouldAddTriggerToExistingJob()
        {
            const string groupName = "Group";
            const string jobName   = "Job";

            var stub = new SchedulerHostStub();

            var command = new AddTriggerCommand(() => stub.Value, new RegisteredInputType[0]);

            AddTriggerOutput result = (AddTriggerOutput)command.Execute(new AddTriggerInput
            {
                Group       = groupName,
                Job         = jobName,
                Name        = "Trigger",
                TriggerType = "Simple"
            });

            result.AssertSuccessfull();

            GroupStub   group   = stub.GetSingleGroup();
            JobStub     job     = group.GetSingleJob();
            TriggerStub trigger = job.GetSingleTrigger();

            Assert.That(group.Name, Is.EqualTo(groupName));
            Assert.That(job.Name, Is.EqualTo(jobName));
            Assert.That(job.JobType, Is.Null);
            Assert.That(trigger.Name, Is.EqualTo("Trigger"));
        }
        public async Task CreateWeakDelegate_WrapsTargetMethod()
        {
            var triggerStub        = new TriggerStub <object>();
            var triggerContextStub = new TriggerContextStub <object>();
            var weakDelegate       = TriggerTypeDescriptorHelpers.GetWeakDelegate(typeof(IBeforeSaveTrigger <object>), typeof(object), typeof(IBeforeSaveTrigger <object>).GetMethod("BeforeSave"));

            await weakDelegate(triggerStub, triggerContextStub, default);

            Assert.NotEmpty(triggerStub.BeforeSaveInvocations);
        }
        public async Task Execute_ForwardsCall()
        {
            var entityType  = typeof(string);
            var triggerStub = new TriggerStub <string>();
            var subject     = new BeforeRollbackTriggerDescriptor(entityType);

            await subject.Invoke(triggerStub, new TriggerContextStub <string>(), null, default);

            Assert.Single(triggerStub.BeforeRollbackInvocations);
        }
Example #11
0
        public void SettingProjectSetsChildrenProjects()
        {
            var project = new Core.Project();
            var child   = new TriggerStub();

            new Multiple(child)
            {
                Project = project
            };
            Assert.AreSame(project, child.Project);
        }
        public async Task Execute_ForwardsCall()
        {
            var entityType  = typeof(string);
            var exception   = new Exception();
            var triggerStub = new TriggerStub <string>();
            var subject     = new AfterSaveFailedTriggerDescriptor(entityType, exception);

            await subject.Invoke(triggerStub, new TriggerContextStub <string>(), exception, default);

            Assert.Single(triggerStub.AfterSaveFailedInvocations);
            Assert.Equal(exception, triggerStub.AfterSaveFailedInvocations.First().exception);
        }
Example #13
0
        public void ResetResetsChildren()
        {
            var reset = false;
            var child = new TriggerStub
            {
                OnResetAction = () => reset = true
            };
            var trigger = new Multiple(child);

            trigger.Reset();
            Assert.IsTrue(reset);
        }
Example #14
0
        public void CleanUpCleansChildren()
        {
            var cleaned = false;
            var child   = new TriggerStub
            {
                OnCleanUp = () => cleaned = true
            };
            var trigger = new Multiple(child);

            trigger.CleanUp();
            Assert.IsTrue(cleaned);
        }
Example #15
0
        public void InitialiseInitialisesChildren()
        {
            var initialised = false;
            var child       = new TriggerStub
            {
                OnInitialise = () => initialised = true
            };
            var trigger = new Multiple(child);

            trigger.Initialise();
            Assert.IsTrue(initialised);
        }
Example #16
0
        public void ValidateValidatesChildren()
        {
            var validated = false;
            var child     = new TriggerStub
            {
                OnValidate = vl => validated = true
            };
            var trigger        = new Multiple(child);
            var validationMock = new Mock <IValidationLog>();

            trigger.Validate(validationMock.Object);
            Assert.IsTrue(validated);
        }
Example #17
0
        public void CheckReturnsNullIfAllChildrenNullWithOr()
        {
            var child1 = new TriggerStub {
                OnCheckAction = () => null
            };
            var child2 = new TriggerStub {
                OnCheckAction = () => null
            };
            var trigger = new Multiple(child1, child2);
            var actual  = trigger.Check();

            Assert.IsNull(actual);
        }
Example #18
0
        public void NextTimeReturnsLowestValidTime()
        {
            var child1 = new TriggerStub();
            var child2 = new TriggerStub {
                NextTimeValue = DateTime.Now
            };
            var child3 = new TriggerStub {
                NextTimeValue = DateTime.Now.AddHours(1)
            };
            var trigger = new Multiple(child1, child2, child3);
            var actual  = trigger.NextTime;

            Assert.AreEqual(child2.NextTimeValue, actual);
        }
Example #19
0
        public void CheckReturnsRequestIfAnyChildSetWithOr()
        {
            var child1 = new TriggerStub {
                OnCheckAction = () => null
            };
            var child2 = new TriggerStub {
                OnCheckAction = () => new IntegrationRequest("Dummy")
            };
            var trigger = new Multiple(child1, child2);
            var actual  = trigger.Check();

            Assert.IsNotNull(actual);
            Assert.AreEqual("Multiple", actual.SourceTrigger);
        }
        public void ValidateValidatesTriggers()
        {
            var validateCalled = false;
            var trigger        = new TriggerStub
            {
                OnValidate = vl => validateCalled = true
            };
            var project = new Project("Test");

            project.Triggers.Add(trigger);
            var validationMock = new Mock <IValidationLog>();

            project.Validate(validationMock.Object);
            Assert.IsTrue(validateCalled);
        }
        private AddTriggerOutput AssertTriggerType(AddTriggerInput input, Action <TriggerType> assertAction)
        {
            var stub = new SchedulerHostStub();

            var command = new AddTriggerCommand(() => stub.Value, new RegisteredInputType[0]);

            AddTriggerOutput result = (AddTriggerOutput)command.Execute(input);

            result.AssertSuccessfull();

            TriggerStub trigger = stub.GetSingleGroup().GetSingleJob().GetSingleTrigger();

            assertAction(trigger.Trigger);

            return(result);
        }
Example #22
0
        public void CheckReturnsNullIfAnyChildNullWithAnd()
        {
            var child1 = new TriggerStub {
                OnCheckAction = () => null
            };
            var child2 = new TriggerStub {
                OnCheckAction = () => new IntegrationRequest("Dummy")
            };
            var trigger = new Multiple(child1, child2)
            {
                Condition = CombinationOperator.And
            };
            var actual = trigger.Check();

            Assert.IsNull(actual);
        }
        public void JobWasExecuted_ListenToTriggers_ShouldNotEmitEvent()
        {
            var emitted = ExecuteAndGetEvent(
                new Quartz2SchedulerEventSource(false),
                eventSource =>
            {
                var trigger = new TriggerStub("any");
                eventSource.JobWasExecuted(
                    new JobExecutionContextStub
                {
                    Trigger = trigger
                },
                    null);
            });

            Assert.That(emitted, Is.Null);
        }
Example #24
0
        public void CheckReturnsRequestIfAllChildrenSetWithAnd()
        {
            var child1 = new TriggerStub {
                OnCheckAction = () => new IntegrationRequest("Dummy")
            };
            var child2 = new TriggerStub {
                OnCheckAction = () => new IntegrationRequest("Dummy")
            };
            var trigger = new Multiple(child1, child2)
            {
                Condition = CombinationOperator.And
            };
            var actual = trigger.Check();

            Assert.IsNotNull(actual);
            Assert.AreEqual("Multiple", actual.SourceTrigger);
        }
        public void TriggerComplete_ListenToJobs_ShouldNotEmitEvent()
        {
            var emitted = ExecuteAndGetEvent(
                new Quartz2SchedulerEventSource(true),
                eventSource =>
            {
                var trigger = new TriggerStub("any");
                eventSource.TriggerComplete(
                    trigger,
                    new JobExecutionContextStub
                {
                    Trigger = trigger
                },
                    SchedulerInstruction.SetTriggerComplete);
            });

            Assert.That(emitted, Is.Null);
        }
Example #26
0
            public void TestSearchTransitionFailedSearchTransitionArgumentOutOfRange()
            {
                // Prepare datas
                var transition_matrix_mock = new TransitionMatrixSearchTransitionThrowArgumentOutOfRangeExceptionMock();

                transition_matrix_mock.HasCalledSearchTransition = false;
                State   setting_InitialState = new StateStub();
                Trigger input_Trigger        = new TriggerStub();

                // Prepare mocks
                FieldInfo field_info = StateMachineInstance.GetType().GetField("TransitionMatrixData",
                                                                               BindingFlags.SetField | BindingFlags.NonPublic | BindingFlags.Instance);

                field_info.SetValue(StateMachineInstance, transition_matrix_mock);

                // Execute & Validate
                Assert.Throws <InvalidOperationException>(() => StateMachineInstance.InputTrigger(input_Trigger));
            }
        public void DiscoverChangeHandlerInvocations_SortTriggersByBaseTypeThenDerivedType()
        {
            var objectTrigger   = new TriggerStub <object>();
            var concreteTrigger = new TriggerStub <string>();

            var serviceProvider = new ServiceCollection()
                                  .AddSingleton <IBeforeSaveTrigger <string> >(concreteTrigger)
                                  .AddSingleton <IBeforeSaveTrigger <object> >(objectTrigger)
                                  .BuildServiceProvider();

            var subject = new TriggerDiscoveryService(new TriggerServiceProviderAccessor(serviceProvider), new TriggerTypeRegistryService());

            var result = subject.DiscoverTriggers(typeof(IBeforeSaveTrigger <>), typeof(string), type => new BeforeSaveTriggerDescriptor(type));

            Assert.Equal(2, result.Count());
            Assert.Equal(objectTrigger, result.First().Trigger);
            Assert.Equal(concreteTrigger, result.Last().Trigger);
        }
        public void DiscoverChangeHandlerInvocations_SortTriggersByInterfaceThenType()
        {
            var interfaceTrigger = new TriggerStub <IComparable>();
            var typeTrigger      = new TriggerStub <string>();

            var serviceProvider = new ServiceCollection()
                                  .AddSingleton <IBeforeSaveTrigger <string> >(typeTrigger)
                                  .AddSingleton <IBeforeSaveTrigger <IComparable> >(interfaceTrigger)
                                  .BuildServiceProvider();

            var subject = new TriggerDiscoveryService(new TriggerServiceProviderAccessor(serviceProvider), new TriggerTypeRegistryService());

            var result = subject.DiscoverTriggers(typeof(IBeforeSaveTrigger <>), typeof(string), type => new BeforeSaveTriggerDescriptor(type));

            Assert.Equal(2, result.Count());
            Assert.Equal(interfaceTrigger, result.First().Trigger);
            Assert.Equal(typeTrigger, result.Last().Trigger);
        }
        public void JobWasExecuted_ListenToJobs_ShouldUnwrapJobExecutionExceptionAndSchedulerException()
        {
            var emitted = ExecuteAndGetEvent(
                new Quartz2SchedulerEventSource(true),
                eventSource =>
            {
                var trigger = new TriggerStub("any");
                eventSource.JobWasExecuted(
                    new JobExecutionContextStub
                {
                    Trigger = trigger
                },
                    new JobExecutionException("Error", new SchedulerException("Error", new Exception("Inner Exception Error"))));
            });

            Assert.That(emitted, Is.Not.Null);
            Assert.That(emitted.Error, Is.Not.Null);
            Assert.That(emitted.Error.Message, Is.EqualTo("Inner Exception Error"));
        }
        public void StartInitialisesTriggers()
        {
            var initialised = false;
            var trigger     = new TriggerStub
            {
                OnInitialise = () => initialised = true
            };
            var project = new ProjectStub("Test")
            {
                OnLoadState = () => { }
            };

            project.Triggers.Add(trigger);
            project.Start();

            // Give the project time to start
            Thread.Sleep(100);
            Assert.IsTrue(initialised);
        }