Exemple #1
0
        public void ParallelStateWithRetriers()
        {
            StateMachine stateMachine = StepFunctionBuilder.StateMachine()
                                        .StartAt("InitialState")
                                        .State("InitialState", StepFunctionBuilder.ParallelState()
                                               .Transition(StepFunctionBuilder.End())
                                               .Branches(
                                                   StepFunctionBuilder.Branch()
                                                   .Comment("Branch one")
                                                   .StartAt("BranchOneInitial")
                                                   .State("BranchOneInitial", StepFunctionBuilder.SucceedState()),
                                                   StepFunctionBuilder.Branch()
                                                   .Comment("Branch two")
                                                   .StartAt("BranchTwoInitial")
                                                   .State("BranchTwoInitial", StepFunctionBuilder.SucceedState())
                                                   )
                                               .Retriers(StepFunctionBuilder.Retrier()
                                                         .ErrorEquals("Foo", "Bar")
                                                         .IntervalSeconds(10)
                                                         .BackoffRate(1.0)
                                                         .MaxAttempts(3),
                                                         StepFunctionBuilder.Retrier()
                                                         .RetryOnAllErrors()
                                                         .IntervalSeconds(10)
                                                         .BackoffRate(1.0)
                                                         .MaxAttempts(3)
                                                         ))
                                        .Build();

            AssertStateMachine(stateMachine, "ParallelStateWithRetriers.json");
        }
Exemple #2
0
        public void SimpleParallelState()
        {
            StateMachine stateMachine = StepFunctionBuilder.StateMachine()
                                        .StartAt("InitialState")
                                        .State("InitialState", StepFunctionBuilder.ParallelState()
                                               .Comment("My parallel state")
                                               .InputPath("$.input")
                                               .OutputPath("$.output")
                                               .ResultPath("$.result")
                                               .Transition(StepFunctionBuilder.Next("NextState"))
                                               .Branches(
                                                   StepFunctionBuilder.Branch()
                                                   .Comment("Branch one")
                                                   .StartAt("BranchOneInitial")
                                                   .State("BranchOneInitial", StepFunctionBuilder.SucceedState()),
                                                   StepFunctionBuilder.Branch()
                                                   .Comment("Branch two")
                                                   .StartAt("BranchTwoInitial")
                                                   .State("BranchTwoInitial", StepFunctionBuilder.SucceedState())
                                                   ))
                                        .State("NextState", StepFunctionBuilder.SucceedState())
                                        .Build();

            AssertStateMachine(stateMachine, "SimpleParallelState.json");
        }
Exemple #3
0
 [Fact]//
 public void ValidMinimalStateMachine_IsValid()
 {
     StepFunctionBuilder.StateMachine()
     .StartAt("Initial")
     .State("Initial", StepFunctionBuilder.SucceedState())
     .Build();
 }
Exemple #4
0
        public void ParallelStateWithCatchers()
        {
            StateMachine stateMachine = StepFunctionBuilder.StateMachine()
                                        .StartAt("InitialState")
                                        .State("InitialState", StepFunctionBuilder.ParallelState()
                                               .Transition(StepFunctionBuilder.End())
                                               .Branches(
                                                   StepFunctionBuilder.Branch()
                                                   .Comment("Branch one")
                                                   .StartAt("BranchOneInitial")
                                                   .State("BranchOneInitial", StepFunctionBuilder.SucceedState()),
                                                   StepFunctionBuilder.Branch()
                                                   .Comment("Branch two")
                                                   .StartAt("BranchTwoInitial")
                                                   .State("BranchTwoInitial", StepFunctionBuilder.SucceedState())
                                                   )
                                               .Catchers(StepFunctionBuilder.Catcher()
                                                         .ErrorEquals("Foo", "Bar")
                                                         .Transition(StepFunctionBuilder.Next("RecoveryState"))
                                                         .ResultPath("$.result"),
                                                         StepFunctionBuilder.Catcher()
                                                         .CatchAll()
                                                         .Transition(StepFunctionBuilder.Next("OtherRecoveryState"))
                                                         .ResultPath("$.result")
                                                         ))
                                        .State("RecoveryState", StepFunctionBuilder.SucceedState())
                                        .State("OtherRecoveryState", StepFunctionBuilder.SucceedState())
                                        .Build();

            AssertStateMachine(stateMachine, "ParallelStateWithCatchers.json");
        }
Exemple #5
0
 public void StartAtStateDoesNotExist_IsNotValid()
 {
     Assert.Throws <ValidationException>(() =>
                                         StepFunctionBuilder.StateMachine()
                                         .StartAt("Foo")
                                         .State("Initial", StepFunctionBuilder.SucceedState())
                                         .Build());
 }
Exemple #6
0
 [Fact]//
 public void ValidTransitionInPassState_IsValid()
 {
     StepFunctionBuilder.StateMachine()
     .StartAt("Initial")
     .State("Initial", StepFunctionBuilder.PassState()
            .Transition(StepFunctionBuilder.Next("Terminal")))
     .State("Terminal", StepFunctionBuilder.SucceedState())
     .Build();
 }
Exemple #7
0
 public void ChoiceStateWithNoChoices_IsNotValid()
 {
     Assert.Throws <ValidationException>(() =>
                                         StepFunctionBuilder.StateMachine()
                                         .StartAt("Initial")
                                         .State("Initial", StepFunctionBuilder.ChoiceState()
                                                .DefaultStateName("Terminal"))
                                         .State("Terminal", StepFunctionBuilder.SucceedState())
                                         .Build());
 }
Exemple #8
0
 [Fact]//
 public void CatcherInTaskState_ValidTransition_IsValid()
 {
     StepFunctionBuilder.StateMachine()
     .StartAt("Initial")
     .State("Initial", StepFunctionBuilder.TaskState()
            .Transition(StepFunctionBuilder.End())
            .Catcher(StepFunctionBuilder.Catcher()
                     .Transition(StepFunctionBuilder.Next("Terminal"))
                     .CatchAll())
            .Resource("arn"))
     .State("Terminal", StepFunctionBuilder.SucceedState())
     .Build();
 }
Exemple #9
0
 public void MissingExpectedValue_StringEqualsCondition_IsNotValid()
 {
     Assert.Throws <ValidationException>(() =>
                                         StepFunctionBuilder.StateMachine()
                                         .StartAt("Initial")
                                         .State("Initial", StepFunctionBuilder.ChoiceState()
                                                .Choice(StepFunctionBuilder.Choice()
                                                        .Condition(StepFunctionBuilder.Eq("$.Foo", null))
                                                        .Transition(StepFunctionBuilder.Next("Terminal")))
                                                .DefaultStateName("Terminal"))
                                         .State("Terminal", StepFunctionBuilder.SucceedState())
                                         .Build());
 }
Exemple #10
0
 public void NoConditionSetForNot_IsNotValid()
 {
     Assert.Throws <ValidationException>(() =>
                                         StepFunctionBuilder.StateMachine()
                                         .StartAt("Initial")
                                         .State("Initial", StepFunctionBuilder.ChoiceState()
                                                .Choice(StepFunctionBuilder.Choice()
                                                        .Condition(NotCondition.GetBuilder())
                                                        .Transition(StepFunctionBuilder.Next("Terminal")))
                                                .DefaultStateName("Terminal"))
                                         .State("Terminal", StepFunctionBuilder.SucceedState())
                                         .Build());
 }
Exemple #11
0
 public void ChoiceStateWithInvalidChoiceTransition_IsNotValid()
 {
     Assert.Throws <ValidationException>(() =>
                                         StepFunctionBuilder.StateMachine()
                                         .StartAt("Initial")
                                         .State("Initial", StepFunctionBuilder.ChoiceState()
                                                .Choice(StepFunctionBuilder.Choice()
                                                        .Condition(StepFunctionBuilder.Eq("$.Foo", "bar"))
                                                        .Transition(StepFunctionBuilder.Next("NoSuchState")))
                                                .DefaultStateName("Terminal"))
                                         .State("Terminal", StepFunctionBuilder.SucceedState())
                                         .Build());
 }
Exemple #12
0
 public void CatcherInTaskState_CatchAllHasOtherErrorCodes_IsNotValid()
 {
     Assert.Throws <ValidationException>(() =>
                                         StepFunctionBuilder.StateMachine()
                                         .StartAt("Initial")
                                         .State("Initial", StepFunctionBuilder.TaskState()
                                                .Transition(StepFunctionBuilder.End())
                                                .Catcher(StepFunctionBuilder.Catcher()
                                                         .Transition(StepFunctionBuilder.Next("Terminal"))
                                                         .ErrorEquals("Foo", "Bar", ErrorCodes.ALL))
                                                .Resource("arn"))
                                         .State("Terminal", StepFunctionBuilder.SucceedState())
                                         .Build());
 }
Exemple #13
0
        public void ChoiceStateWithNotCondition()
        {
            StateMachine stateMachine = StepFunctionBuilder.StateMachine()
                                        .StartAt("InitialState")
                                        .State("InitialState", StepFunctionBuilder.ChoiceState()
                                               .DefaultStateName("DefaultState")
                                               .Choice(StepFunctionBuilder.Choice().Transition(StepFunctionBuilder.Next("NextState"))
                                                       .Condition(StepFunctionBuilder.Not(StepFunctionBuilder.Gte("$.var", "value")))))
                                        .State("NextState", StepFunctionBuilder.SucceedState())
                                        .State("DefaultState", StepFunctionBuilder.SucceedState())
                                        .Build();

            AssertStateMachine(stateMachine, "ChoiceStateWithNotCondition.json");
        }
Exemple #14
0
        public void SingleSucceedState()
        {
            StateMachine stateMachine = StepFunctionBuilder.StateMachine()
                                        .StartAt("InitialState")
                                        .TimeoutSeconds(30)
                                        .Comment("My Simple State Machine")
                                        .State("InitialState", StepFunctionBuilder.SucceedState()
                                               .Comment("Initial State")
                                               .InputPath("$.input")
                                               .OutputPath("$.output"))
                                        .Build();

            AssertStateMachine(stateMachine, "SingleSucceedState.json");
        }
Exemple #15
0
        public void SingleWaitState_WaitForSeconds()
        {
            StateMachine stateMachine = StepFunctionBuilder.StateMachine()
                                        .StartAt("InitialState")
                                        .State("InitialState", StepFunctionBuilder.WaitState()
                                               .Comment("My wait state")
                                               .InputPath("$.input")
                                               .OutputPath("$.output")
                                               .WaitFor(StepFunctionBuilder.Seconds(10))
                                               .Transition(StepFunctionBuilder.Next("NextState")))
                                        .State("NextState", StepFunctionBuilder.SucceedState())
                                        .Build();

            AssertStateMachine(stateMachine, "SingleWaitStateWithSeconds.json");
        }
Exemple #16
0
        public void SinglePassStateWithJsonResult()
        {
            StateMachine stateMachine = StepFunctionBuilder.StateMachine()
                                        .StartAt("InitialState")
                                        .State("InitialState", StepFunctionBuilder.PassState()
                                               .Comment("Pass through state")
                                               .InputPath("$.input")
                                               .OutputPath("$.output")
                                               .ResultPath("$.result")
                                               .Transition(StepFunctionBuilder.Next("NextState"))
                                               .Result("{\"Foo\": \"Bar\"}"))
                                        .State("NextState", StepFunctionBuilder.SucceedState())
                                        .Build();

            AssertStateMachine(stateMachine, "SinglePassStateWithJsonResult.json");
        }
Exemple #17
0
 public void ParallelState_NoCycles()
 {
     AssertNoCycle(StepFunctionBuilder.StateMachine()
                   .StartAt("Initial")
                   .State("Initial", StepFunctionBuilder.ParallelState()
                          .Branch(StepFunctionBuilder.Branch()
                                  .StartAt("BranchOneStart")
                                  .State("BranchOneStart", StepFunctionBuilder.SucceedState()))
                          .Branch(StepFunctionBuilder.Branch()
                                  .StartAt("BranchTwoStart")
                                  .State("BranchTwoStart", StepFunctionBuilder.PassState()
                                         .Transition(StepFunctionBuilder
                                                     .Next("NextState")))
                                  .State("NextState", StepFunctionBuilder.SucceedState()))
                          .Transition(StepFunctionBuilder.End())));
 }
Exemple #18
0
        public void ChoiceStateWithoutDefaultState()
        {
            StateMachine stateMachine = StepFunctionBuilder.StateMachine()
                                        .StartAt("InitialState")
                                        .State("InitialState", StepFunctionBuilder.ChoiceState()
                                               .Choice(StepFunctionBuilder.Choice().Transition(StepFunctionBuilder.Next("NextState"))
                                                       .Condition(
                                                           StepFunctionBuilder.Or(StepFunctionBuilder.Gt("$.var", "value"),
                                                                                  StepFunctionBuilder.Lte("$.other-var", 10)
                                                                                  ))))
                                        .State("NextState", StepFunctionBuilder.SucceedState())
                                        .State("DefaultState", StepFunctionBuilder.SucceedState())
                                        .Build();

            AssertStateMachine(stateMachine, "ChoiceStateWithoutDefault.json");
        }
Exemple #19
0
        public void SimpleChoiceState()
        {
            StateMachine stateMachine = StepFunctionBuilder.StateMachine()
                                        .StartAt("InitialState")
                                        .State("InitialState", StepFunctionBuilder.ChoiceState()
                                               .Comment("My choice state")
                                               .DefaultStateName("DefaultState")
                                               .InputPath("$.input")
                                               .OutputPath("$.output")
                                               .Choice(StepFunctionBuilder.Choice().Transition(StepFunctionBuilder.Next("NextState"))
                                                       .Condition(StepFunctionBuilder.Eq("$.var", "value"))))
                                        .State("NextState", StepFunctionBuilder.SucceedState())
                                        .State("DefaultState", StepFunctionBuilder.SucceedState())
                                        .Build();

            AssertStateMachine(stateMachine, "SimpleChoiceState.json");
        }
Exemple #20
0
        public void ChoiceStateWithMultipleChoices()
        {
            StateMachine stateMachine = StepFunctionBuilder.StateMachine()
                                        .StartAt("InitialState")
                                        .State("InitialState", StepFunctionBuilder.ChoiceState()
                                               .DefaultStateName("DefaultState")
                                               .Choices(
                                                   StepFunctionBuilder.Choice().Transition(StepFunctionBuilder.Next("NextState"))
                                                   .Condition(StepFunctionBuilder.Eq("$.var", "value")),
                                                   StepFunctionBuilder.Choice().Transition(StepFunctionBuilder.Next("OtherNextState"))
                                                   .Condition(StepFunctionBuilder.Gt("$.number", 10))))
                                        .State("NextState", StepFunctionBuilder.SucceedState())
                                        .State("OtherNextState", StepFunctionBuilder.SucceedState())
                                        .State("DefaultState", StepFunctionBuilder.SucceedState())
                                        .Build();

            AssertStateMachine(stateMachine, "ChoiceStateWithMultipleChoices.json");
        }
Exemple #21
0
        public void SingleTaskState()
        {
            StateMachine stateMachine = StepFunctionBuilder.StateMachine()
                                        .StartAt("InitialState")
                                        .State("InitialState", StepFunctionBuilder.TaskState()
                                               .Comment("Initial State")
                                               .TimeoutSeconds(10)
                                               .HeartbeatSeconds(1)
                                               .Transition(StepFunctionBuilder.Next("NextState"))
                                               .Resource("resource-arn")
                                               .InputPath("$.input")
                                               .ResultPath("$.result")
                                               .OutputPath("$.output"))
                                        .State("NextState", StepFunctionBuilder.SucceedState())
                                        .Build();

            AssertStateMachine(stateMachine, "SimpleTaskState.json");
        }
Exemple #22
0
        public void CanSerializeStatesToJson()
        {
            StateMachine stateMachine = StepFunctionBuilder.StateMachine()
                                        .StartAt("InitialState")
                                        .TimeoutSeconds(30)
                                        .Comment("My Simple State Machine")
                                        .State("InitialState", StepFunctionBuilder.SucceedState()
                                               .Comment("Initial State")
                                               .InputPath("$.input")
                                               .OutputPath("$.output"))
                                        .Build();

            string value = stateMachine.States["InitialState"].ToJson();

            State s = State.FromJson(value);

            Assert.True(s.Type == StateType.Succeed);
        }
Exemple #23
0
        public void ChoiceStateWithComplexCondition()
        {
            StateMachine stateMachine = StepFunctionBuilder.StateMachine()
                                        .StartAt("InitialState")
                                        .State("InitialState", StepFunctionBuilder.ChoiceState()
                                               .DefaultStateName("DefaultState")
                                               .Choice(StepFunctionBuilder.Choice().Transition(StepFunctionBuilder.Next("NextState"))
                                                       .Condition(StepFunctionBuilder.And(
                                                                      StepFunctionBuilder.Gte("$.var", "value"),
                                                                      StepFunctionBuilder.Lte("$.other-var", "foo"),
                                                                      StepFunctionBuilder.Or(
                                                                          StepFunctionBuilder.Lt("$.numeric", 9000.1),
                                                                          StepFunctionBuilder.Not(StepFunctionBuilder.Gte("$.numeric", 42))
                                                                          )
                                                                      ))))
                                        .State("NextState", StepFunctionBuilder.SucceedState())
                                        .State("DefaultState", StepFunctionBuilder.SucceedState())
                                        .Build();

            AssertStateMachine(stateMachine, "ChoiceStateWithComplexCondition.json");
        }
Exemple #24
0
        public void SingleTaskStateWithCatchers()
        {
            StateMachine stateMachine = StepFunctionBuilder.StateMachine()
                                        .StartAt("InitialState")
                                        .State("InitialState", StepFunctionBuilder.TaskState()
                                               .Transition(StepFunctionBuilder.Next("NextState"))
                                               .Resource("resource-arn")
                                               .Catchers(StepFunctionBuilder.Catcher()
                                                         .ErrorEquals("Foo", "Bar")
                                                         .Transition(StepFunctionBuilder.Next("RecoveryState"))
                                                         .ResultPath("$.result-path"),
                                                         StepFunctionBuilder.Catcher()
                                                         .CatchAll()
                                                         .Transition(StepFunctionBuilder.Next("OtherRecoveryState"))))
                                        .State("NextState", StepFunctionBuilder.SucceedState())
                                        .State("RecoveryState", StepFunctionBuilder.SucceedState())
                                        .State("OtherRecoveryState", StepFunctionBuilder.SucceedState())
                                        .Build();

            AssertStateMachine(stateMachine, "SimpleTaskStateWithCatchers.json");
        }
Exemple #25
0
 public void ChoiceStateWithPathOut_IsValid()
 {
     AssertNoCycle(
         StepFunctionBuilder.StateMachine()
         .StartAt("Initial")
         .State("Initial", StepFunctionBuilder.PassState()
                .Transition(StepFunctionBuilder.Next("ChoiceOne")))
         .State("ChoiceOne", StepFunctionBuilder.ChoiceState()
                .DefaultStateName("DefaultOne")
                .Choice(StepFunctionBuilder.Choice()
                        .Transition(StepFunctionBuilder.Next("ChoiceTwo"))
                        .Condition(StepFunctionBuilder.Eq("$.foo", "bar"))))
         .State("DefaultOne", StepFunctionBuilder.SucceedState())
         .State("ChoiceTwo", StepFunctionBuilder.ChoiceState()
                .DefaultStateName("DefaultTwo")
                .Choice(StepFunctionBuilder.Choice()
                        .Transition(StepFunctionBuilder.Next("ChoiceOne"))
                        .Condition(StepFunctionBuilder.Eq("$.foo", "bar"))))
         .State("DefaultTwo",
                StepFunctionBuilder.PassState().Transition(StepFunctionBuilder.Next("ChoiceTwo"))));
 }
Exemple #26
0
        public void SingleTaskStateWithRetries()
        {
            StateMachine stateMachine = StepFunctionBuilder.StateMachine()
                                        .StartAt("InitialState")
                                        .State("InitialState", StepFunctionBuilder.TaskState()
                                               .Transition(StepFunctionBuilder.Next("NextState"))
                                               .Resource("resource-arn")
                                               .Retriers(StepFunctionBuilder.Retrier()
                                                         .ErrorEquals("Foo", "Bar")
                                                         .IntervalSeconds(20)
                                                         .MaxAttempts(3)
                                                         .BackoffRate(2.0),
                                                         StepFunctionBuilder.Retrier()
                                                         .RetryOnAllErrors()
                                                         .IntervalSeconds(30)
                                                         .MaxAttempts(10)
                                                         .BackoffRate(2.0)))
                                        .State("NextState", StepFunctionBuilder.SucceedState())
                                        .Build();

            AssertStateMachine(stateMachine, "SimpleTaskStateWithRetries.json");
        }
Exemple #27
0
        public void ChoiceStateWithAllPrimitiveConditions()
        {
            DateTime     date         = DateTime.Parse("2016-03-14T01:59:00.000Z").ToUniversalTime();
            StateMachine stateMachine = StepFunctionBuilder.StateMachine()
                                        .StartAt("InitialState")
                                        .State("InitialState", StepFunctionBuilder.ChoiceState()
                                               .DefaultStateName("DefaultState")
                                               .Choice(StepFunctionBuilder.Choice().Transition(StepFunctionBuilder.Next("NextState"))
                                                       .Condition(StepFunctionBuilder.And(
                                                                      StepFunctionBuilder.Eq("$.string", "value"),
                                                                      StepFunctionBuilder.Gt("$.string", "value"),
                                                                      StepFunctionBuilder.Gte("$.string", "value"),
                                                                      StepFunctionBuilder.Lt("$.string", "value"),
                                                                      StepFunctionBuilder.Lte("$.string", "value"),
                                                                      StepFunctionBuilder.Eq("$.integral", 42),
                                                                      StepFunctionBuilder.Gt("$.integral", 42),
                                                                      StepFunctionBuilder.Gte("$.integral", 42),
                                                                      StepFunctionBuilder.Lt("$.integral", 42),
                                                                      StepFunctionBuilder.Lte("$.integral", 42),
                                                                      StepFunctionBuilder.Eq("$.double", 9000.1),
                                                                      StepFunctionBuilder.Gt("$.double", 9000.1),
                                                                      StepFunctionBuilder.Gte("$.double", 9000.1),
                                                                      StepFunctionBuilder.Lt("$.double", 9000.1),
                                                                      StepFunctionBuilder.Lte("$.double", 9000.1),
                                                                      StepFunctionBuilder.Eq("$.timestamp", date),
                                                                      StepFunctionBuilder.Gt("$.timestamp", date),
                                                                      StepFunctionBuilder.Gte("$.timestamp", date),
                                                                      StepFunctionBuilder.Lt("$.timestamp", date),
                                                                      StepFunctionBuilder.Lte("$.timestamp", date),
                                                                      StepFunctionBuilder.Eq("$.boolean", true),
                                                                      StepFunctionBuilder.Eq("$.boolean", false)
                                                                      ))))
                                        .State("NextState", StepFunctionBuilder.SucceedState())
                                        .State("DefaultState", StepFunctionBuilder.SucceedState())
                                        .Build();

            AssertStateMachine(stateMachine, "ChoiceStateWithAllPrimitiveCondition.json");
        }
Exemple #28
0
 public void ParallelStateInvalidCatcher_IsNotValid()
 {
     Assert.Throws <ValidationException>(() =>
                                         StepFunctionBuilder.StateMachine()
                                         .StartAt("Initial")
                                         .State("Initial", StepFunctionBuilder.ParallelState()
                                                .Branch(StepFunctionBuilder.Branch()
                                                        .StartAt("InitialBranchState")
                                                        .State("InitialBranchState", StepFunctionBuilder.SucceedState()))
                                                .Transition(StepFunctionBuilder.End())
                                                .Catcher(StepFunctionBuilder.Catcher()
                                                         .Transition(StepFunctionBuilder.Next("NoSuchState"))))
                                         .Build());
 }
Exemple #29
0
 public void ParallelStateInvalidRetrier_IsNotValid()
 {
     Assert.Throws <ValidationException>(() =>
                                         StepFunctionBuilder.StateMachine()
                                         .StartAt("Initial")
                                         .State("Initial", StepFunctionBuilder.ParallelState()
                                                .Branch(StepFunctionBuilder.Branch()
                                                        .StartAt("InitialBranchState")
                                                        .State("InitialBranchState", StepFunctionBuilder.SucceedState()))
                                                .Transition(StepFunctionBuilder.End())
                                                .Retrier(StepFunctionBuilder.Retrier()
                                                         .IntervalSeconds(-1)))
                                         .Build());
 }
Exemple #30
0
 public void SingleTerminalState_HasNoCycle_IsValid()
 {
     AssertNoCycle(StepFunctionBuilder.StateMachine()
                   .StartAt("Initial")
                   .State("Initial", StepFunctionBuilder.SucceedState()));
 }