Ejemplo n.º 1
0
        public virtual void TestWaitStateScope()
        {
            IPvmProcessDefinition processDefinition =
                new ProcessDefinitionBuilder().CreateActivity("start")
                .Initial()
                .Behavior(new Automatic())
                .Transition("scopedWait")
                .EndActivity()
                .CreateActivity("scopedWait")
                .Scope()
                .Behavior(new WaitState())
                .Transition("end")
                .EndActivity()
                .CreateActivity("end")
                .Behavior(new End())
                .EndActivity()
                .BuildProcessDefinition();

            IPvmProcessInstance processInstance = processDefinition.CreateProcessInstance();

            processInstance.Start();

            IPvmExecution execution = processInstance.FindExecution("scopedWait");

            Assert.NotNull(execution);

            execution.Signal(null, null);

            Assert.AreEqual(new List <string>(), processInstance.FindActiveActivityIds());
            Assert.True(processInstance.IsEnded);
        }
Ejemplo n.º 2
0
        public void TestPvmWaitState()
        {
            IPvmProcessDefinition processDefinition = new ProcessDefinitionBuilder()
                                                      .CreateActivity("a")
                                                      .Initial()
                                                      .Behavior(new WaitState())
                                                      .Transition("b")
                                                      .EndActivity()
                                                      .CreateActivity("b")
                                                      .Behavior(new WaitState())
                                                      .Transition("c")
                                                      .EndActivity()
                                                      .CreateActivity("c")
                                                      .Behavior(new WaitState())
                                                      .EndActivity()
                                                      .BuildProcessDefinition();

            IPvmProcessInstance processInstance = processDefinition.CreateProcessInstance();

            processInstance.Start();

            IPvmExecution activityInstance = processInstance.FindExecution("a");

            Assert.NotNull(activityInstance);

            activityInstance.Signal(null, null);

            activityInstance = processInstance.FindExecution("b");
            Assert.NotNull(activityInstance);

            activityInstance.Signal(null, null);

            activityInstance = processInstance.FindExecution("c");
            Assert.NotNull(activityInstance);
        }
Ejemplo n.º 3
0
        public virtual void TestTransitionDestroysEventScope()
        {
            IPvmProcessDefinition processDefinition =
                new ProcessDefinitionBuilder().CreateActivity("start")
                .Initial()
                .Behavior(new Automatic())
                .Transition("embeddedsubprocess")
                .EndActivity()
                .CreateActivity("embeddedsubprocess")
                .Scope()
                .Behavior(new EmbeddedSubProcess())
                .CreateActivity("startInside")
                .Behavior(new Automatic())
                .Transition("nestedSubProcess")
                .EndActivity()
                .CreateActivity("nestedSubProcess")
                .Scope()
                .Behavior(new EventScopeCreatingSubprocess())
                .CreateActivity("startNestedInside")
                .Behavior(new Automatic())
                .EndActivity()
                .Transition("Wait")
                .EndActivity()
                .CreateActivity("Wait")
                .Behavior(new WaitState())
                .Transition("endInside")
                .EndActivity()
                .CreateActivity("endInside")
                .Behavior(new Automatic())
                .EndActivity()
                .Transition("end")
                .EndActivity()
                .CreateActivity("end")
                .Behavior(new Automatic())
                .EndActivity()
                .BuildProcessDefinition();

            var processInstance = processDefinition.CreateProcessInstance();

            processInstance.Start();

            IList <string> expectedActiveActivityIds = new List <string>();

            expectedActiveActivityIds.Add("Wait");
            Assert.AreEqual(expectedActiveActivityIds, processInstance.FindActiveActivityIds());


            IPvmExecution execution = processInstance.FindExecution("Wait");

            execution.Signal(null, null);

            Assert.True(processInstance.IsEnded);
        }
Ejemplo n.º 4
0
        public virtual void TestSimpleWaitStateConcurrency()
        {
            var processDefinition =
                new ProcessDefinitionBuilder().CreateActivity("start")
                .Initial()
                .Behavior(new Automatic())
                .Transition("fork")
                .EndActivity()
                .CreateActivity("fork")
                .Behavior(new ParallelGateway())
                .Transition("c1")
                .Transition("c2")
                .EndActivity()
                .CreateActivity("c1")
                .Behavior(new WaitState())
                .Transition("join")
                .EndActivity()
                .CreateActivity("c2")
                .Behavior(new WaitState())
                .Transition("join")
                .EndActivity()
                .CreateActivity("join")
                .Behavior(new ParallelGateway())
                .Transition("end")
                .EndActivity()
                .CreateActivity("end")
                .Behavior(new WaitState())
                .EndActivity()
                .BuildProcessDefinition();

            var processInstance = processDefinition.CreateProcessInstance();

            processInstance.Start();

            IPvmExecution activityInstanceC1 = processInstance.FindExecution("c1");

            Assert.NotNull(activityInstanceC1);

            IPvmExecution activityInstanceC2 = processInstance.FindExecution("c2");

            Assert.NotNull(activityInstanceC2);

            activityInstanceC1.Signal(null, null);
            activityInstanceC2.Signal(null, null);

            IList <string> activityNames         = processInstance.FindActiveActivityIds();
            IList <string> expectedActivityNames = new List <string>();

            expectedActivityNames.Add("end");

            Assert.AreEqual(expectedActivityNames, activityNames);
        }
Ejemplo n.º 5
0
        public virtual void TestMultipleConcurrentEndsInsideEmbeddedSubProcessWithWaitState()
        {
            IPvmProcessDefinition processDefinition =
                new ProcessDefinitionBuilder().CreateActivity("start")
                .Initial()
                .Behavior(new Automatic())
                .Transition("embeddedsubprocess")
                .EndActivity()
                .CreateActivity("embeddedsubprocess")
                .Scope()
                .Behavior(new EmbeddedSubProcess())
                .CreateActivity("startInside")
                .Behavior(new Automatic())
                .Transition("fork")
                .EndActivity()
                .CreateActivity("fork")
                .Behavior(new ParallelGateway())
                .Transition("endInside1")
                .Transition("Wait")
                .Transition("endInside3")
                .EndActivity()
                .CreateActivity("endInside1")
                .Behavior(new End())
                .EndActivity()
                .CreateActivity("Wait")
                .Behavior(new WaitState())
                .Transition("endInside2")
                .EndActivity()
                .CreateActivity("endInside2")
                .Behavior(new End())
                .EndActivity()
                .CreateActivity("endInside3")
                .Behavior(new End())
                .EndActivity()
                .Transition("end")
                .EndActivity()
                .CreateActivity("end")
                .Behavior(new End())
                .EndActivity()
                .BuildProcessDefinition();

            var processInstance = processDefinition.CreateProcessInstance();

            processInstance.Start();

            Assert.IsFalse(processInstance.IsEnded);
            IPvmExecution execution = processInstance.FindExecution("Wait");

            execution.Signal(null, null);

            Assert.True(processInstance.IsEnded);
        }
Ejemplo n.º 6
0
        public virtual void TestScopeActivity()
        {
            var verifier = new ActivityInstanceVerification();

            IPvmProcessDefinition processDefinition =
                new ProcessDefinitionBuilder().CreateActivity("one")
                .Initial()
                .Behavior(new Automatic())
                .ExecutionListener(ExecutionListenerFields.EventNameStart, verifier)
                .ExecutionListener(ExecutionListenerFields.EventNameEnd, verifier)
                .Transition("two")
                .EndActivity()
                .CreateActivity("two")
                .Scope()
                .Behavior(new WaitState())
                .ExecutionListener(ExecutionListenerFields.EventNameStart, verifier)
                .ExecutionListener(ExecutionListenerFields.EventNameEnd, verifier)
                .Transition("three")
                .EndActivity()
                .CreateActivity("three")
                .Behavior(new End())
                .ExecutionListener(ExecutionListenerFields.EventNameStart, verifier)
                .ExecutionListener(ExecutionListenerFields.EventNameEnd, verifier)
                .EndActivity()
                .BuildProcessDefinition();

            IPvmProcessInstance processInstance = processDefinition.CreateProcessInstance();

            processInstance.Start();

            IPvmExecution childExecution           = processInstance.FindExecution("two");
            var           parentActivityInstanceId = ((ExecutionImpl)childExecution).ParentActivityInstanceId;

            Assert.AreEqual(((ExecutionImpl)processInstance).Id, parentActivityInstanceId);

            childExecution.Signal(null, null);

            verifier.AssertStartInstanceCount(1, "one");
            verifier.AssertStartInstanceCount(1, "two");
            verifier.AssertProcessInstanceParent("two", processInstance);
            verifier.AssertStartInstanceCount(1, "three");
        }
Ejemplo n.º 7
0
        public virtual void TestMultipleConcurrentEndsInsideEmbeddedSubProcessWithWaitState()
        {
            var verifier = new ActivityInstanceVerification();

            IPvmProcessDefinition processDefinition =
                new ProcessDefinitionBuilder().CreateActivity("start")
                .Initial()
                .Behavior(new Automatic())
                .ExecutionListener(ExecutionListenerFields.EventNameStart, verifier)
                .ExecutionListener(ExecutionListenerFields.EventNameEnd, verifier)
                .Transition("embeddedsubprocess")
                .EndActivity()
                .CreateActivity("embeddedsubprocess")
                .Scope()
                .Behavior(new EmbeddedSubProcess())
                .ExecutionListener(ExecutionListenerFields.EventNameStart, verifier)
                .ExecutionListener(ExecutionListenerFields.EventNameEnd, verifier)
                .CreateActivity("startInside")
                .Behavior(new Automatic())
                .ExecutionListener(ExecutionListenerFields.EventNameStart, verifier)
                .ExecutionListener(ExecutionListenerFields.EventNameEnd, verifier)
                .Transition("fork")
                .EndActivity()
                .CreateActivity("fork")
                .Behavior(new ParallelGateway())
                .ExecutionListener(ExecutionListenerFields.EventNameStart, verifier)
                .ExecutionListener(ExecutionListenerFields.EventNameEnd, verifier)
                .Transition("endInside1")
                .Transition("Wait")
                .Transition("endInside3")
                .EndActivity()
                .CreateActivity("endInside1")
                .Behavior(new End())
                .ExecutionListener(ExecutionListenerFields.EventNameStart, verifier)
                .ExecutionListener(ExecutionListenerFields.EventNameEnd, verifier)
                .EndActivity()
                .CreateActivity("Wait")
                .Behavior(new WaitState())
                .ExecutionListener(ExecutionListenerFields.EventNameStart, verifier)
                .ExecutionListener(ExecutionListenerFields.EventNameEnd, verifier)
                .Transition("endInside2")
                .EndActivity()
                .CreateActivity("endInside2")
                .Behavior(new End())
                .ExecutionListener(ExecutionListenerFields.EventNameStart, verifier)
                .ExecutionListener(ExecutionListenerFields.EventNameEnd, verifier)
                .EndActivity()
                .CreateActivity("endInside3")
                .Behavior(new End())
                .ExecutionListener(ExecutionListenerFields.EventNameStart, verifier)
                .ExecutionListener(ExecutionListenerFields.EventNameEnd, verifier)
                .EndActivity()
                .Transition("end")
                .EndActivity()
                .CreateActivity("end")
                .Behavior(new End())
                .ExecutionListener(ExecutionListenerFields.EventNameStart, verifier)
                .ExecutionListener(ExecutionListenerFields.EventNameEnd, verifier)
                .EndActivity()
                .BuildProcessDefinition();

            IPvmProcessInstance processInstance = processDefinition.CreateProcessInstance();

            processInstance.Start();

            Assert.IsFalse(processInstance.IsEnded);
            IPvmExecution execution = processInstance.FindExecution("Wait");

            execution.Signal(null, null);

            Assert.True(processInstance.IsEnded);

            verifier.AssertStartInstanceCount(1, "start");
            verifier.AssertProcessInstanceParent("start", processInstance);

            verifier.AssertStartInstanceCount(1, "embeddedsubprocess");
            verifier.AssertProcessInstanceParent("embeddedsubprocess", processInstance);

            verifier.AssertStartInstanceCount(1, "startInside");
            verifier.AssertParent("startInside", "embeddedsubprocess");

            verifier.AssertStartInstanceCount(1, "fork");
            verifier.AssertParent("fork", "embeddedsubprocess");

            verifier.AssertStartInstanceCount(1, "Wait");
            verifier.AssertParent("Wait", "embeddedsubprocess");

            verifier.AssertStartInstanceCount(1, "endInside1");
            verifier.AssertParent("endInside1", "embeddedsubprocess");

            verifier.AssertStartInstanceCount(1, "endInside2");
            verifier.AssertParent("endInside2", "embeddedsubprocess");

            verifier.AssertStartInstanceCount(1, "endInside3");
            verifier.AssertParent("endInside3", "embeddedsubprocess");

            verifier.AssertStartInstanceCount(1, "end");
            verifier.AssertProcessInstanceParent("end", processInstance);
        }