Polish tests and executor

- Remove extra logging
- Polish tests, remove thread sleeps
- Relates #466
This commit is contained in:
jvalkeal
2018-02-13 12:30:39 +02:00
parent 371b594f15
commit c5ebca0b08
3 changed files with 50 additions and 14 deletions

View File

@@ -234,7 +234,6 @@ public class DefaultStateMachineExecutor<S, E> extends LifecycleObjectSupport im
continue;
}
else if (!StateMachineUtils.isSubstate(source, completion)) {
log.info("TTTTTT6 " + source.getId() + " " + completion.getId());
continue;
}
@@ -449,10 +448,10 @@ public class DefaultStateMachineExecutor<S, E> extends LifecycleObjectSupport im
handleTriggerTrans(trans, queuedMessage);
}
List<Transition<S, E>> ttt = new ArrayList<>();
for (Transition<S, E> tt : triggerlessTransitions) {
if (((AbstractTransition<S, E>)tt).getGuard() != null) {
ttt.add(tt);
List<Transition<S, E>> transWithGuards = new ArrayList<>();
for (Transition<S, E> t : triggerlessTransitions) {
if (((AbstractTransition<S, E>)t).getGuard() != null) {
transWithGuards.add(t);
}
}
@@ -461,7 +460,7 @@ public class DefaultStateMachineExecutor<S, E> extends LifecycleObjectSupport im
// all "chained" transitions will get queue message
boolean transit = false;
do {
transit = handleTriggerTrans(ttt, queuedMessage);
transit = handleTriggerTrans(transWithGuards, queuedMessage);
} while (transit);
}

View File

@@ -278,4 +278,25 @@ public abstract class AbstractStateMachineTests {
}
public static class TestStateMachineListener4 extends StateMachineListenerAdapter<TestStates4, TestEvents> {
public volatile CountDownLatch stateChangedLatch = new CountDownLatch(6);
public volatile CountDownLatch stateMachineStartedLatch = new CountDownLatch(1);
@Override
public void stateChanged(State<TestStates4, TestEvents> from, State<TestStates4, TestEvents> to) {
stateChangedLatch.countDown();
}
@Override
public void stateMachineStarted(StateMachine<TestStates4, TestEvents> stateMachine) {
stateMachineStartedLatch.countDown();
}
public void reset(int c1, int c2) {
stateChangedLatch = new CountDownLatch(c1);
stateMachineStartedLatch = new CountDownLatch(c2);
}
}
}

View File

@@ -23,6 +23,7 @@ import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import java.util.EnumSet;
import java.util.concurrent.TimeUnit;
import org.junit.Test;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
@@ -174,10 +175,12 @@ public class EndStateTests extends AbstractStateMachineTests {
@SuppressWarnings("unchecked")
ObjectStateMachine<TestStates4,TestEvents> machine =
context.getBean(StateMachineSystemConstants.DEFAULT_ID_STATEMACHINE, ObjectStateMachine.class);
TestStateMachineListener4 listener = new TestStateMachineListener4();
machine.addStateListener(listener);
machine.start();
Thread.sleep(1000);
assertThat(listener.stateMachineStartedLatch.await(2, TimeUnit.SECONDS), is(true));
machine.sendEvent(TestEvents.E1);
Thread.sleep(1000);
assertThat(listener.stateChangedLatch.await(2, TimeUnit.SECONDS), is(true));
assertThat(machine.getState().getIds(), contains(TestStates4.DONE));
}
@@ -189,10 +192,12 @@ public class EndStateTests extends AbstractStateMachineTests {
@SuppressWarnings("unchecked")
ObjectStateMachine<TestStates4,TestEvents> machine =
context.getBean(StateMachineSystemConstants.DEFAULT_ID_STATEMACHINE, ObjectStateMachine.class);
TestStateMachineListener4 listener = new TestStateMachineListener4();
machine.addStateListener(listener);
machine.start();
Thread.sleep(1000);
assertThat(listener.stateMachineStartedLatch.await(2, TimeUnit.SECONDS), is(true));
machine.sendEvent(TestEvents.E1);
Thread.sleep(1000);
assertThat(listener.stateChangedLatch.await(2, TimeUnit.SECONDS), is(true));
assertThat(machine.getState().getIds(), contains(TestStates4.DONE));
}
@@ -204,17 +209,28 @@ public class EndStateTests extends AbstractStateMachineTests {
@SuppressWarnings("unchecked")
ObjectStateMachine<TestStates4,TestEvents> machine =
context.getBean(StateMachineSystemConstants.DEFAULT_ID_STATEMACHINE, ObjectStateMachine.class);
TestStateMachineListener4 listener = new TestStateMachineListener4();
machine.addStateListener(listener);
listener.reset(1, 1);
machine.start();
Thread.sleep(1000);
assertThat(listener.stateMachineStartedLatch.await(2, TimeUnit.SECONDS), is(true));
assertThat(listener.stateChangedLatch.await(2, TimeUnit.SECONDS), is(true));
assertThat(machine.getState().getIds(), contains(TestStates4.READY));
listener.reset(3, 0);
machine.sendEvent(TestEvents.E1);
Thread.sleep(1000);
assertThat(listener.stateChangedLatch.await(2, TimeUnit.SECONDS), is(true));
assertThat(machine.getState().getIds(), containsInAnyOrder(TestStates4.TASKS, TestStates4.T1, TestStates4.T2));
listener.reset(1, 0);
machine.sendEvent(TestEvents.E2);
Thread.sleep(1000);
assertThat(listener.stateChangedLatch.await(2, TimeUnit.SECONDS), is(true));
assertThat(machine.getState().getIds(), containsInAnyOrder(TestStates4.TASKS, TestStates4.T1E, TestStates4.T2));
listener.reset(2, 0);
machine.sendEvent(TestEvents.E3);
Thread.sleep(1000);
assertThat(listener.stateChangedLatch.await(2, TimeUnit.SECONDS), is(true));
assertThat(machine.getState().getIds(), contains(TestStates4.DONE));
}