Example usage for org.springframework.statemachine.test.support LatchStateMachineListener reset

List of usage examples for org.springframework.statemachine.test.support LatchStateMachineListener reset

Introduction

In this page you can find the example usage for org.springframework.statemachine.test.support LatchStateMachineListener reset.

Prototype

public void reset(int stateChangedCount, int stateEnteredCount, int stateExitedCount, int eventNotAcceptedCount,
            int transitionCount, int transitionStartedCount, int transitionEndedCount, int stateMachineStartedCount,
            int stateMachineStoppedCount, int extendedStateChangedCount) 

Source Link

Usage

From source file:org.springframework.statemachine.test.StateMachineTestPlan.java

/**
 * Run test plan.//from  ww w  .ja  v  a 2  s .  c  om
 *
 * @throws Exception the exception
 */
public void test() throws Exception {

    Map<StateMachine<S, E>, LatchStateMachineListener<S, E>> listeners = new HashMap<StateMachine<S, E>, LatchStateMachineListener<S, E>>();
    for (StateMachine<S, E> stateMachine : stateMachines.values()) {
        LatchStateMachineListener<S, E> listener = new LatchStateMachineListener<S, E>();
        listeners.put(stateMachine, listener);
        stateMachine.addStateListener(listener);
    }
    log.info("Running test plan for machines "
            + StringUtils.collectionToCommaDelimitedString(stateMachines.values()));

    int stepCounter = 0;
    for (StateMachineTestPlanStep<S, E> step : steps) {
        log.info("Running test plan step " + stepCounter++);
        for (LatchStateMachineListener<S, E> listener : listeners.values()) {
            listener.reset(step.expectStateChanged != null ? step.expectStateChanged : 0,
                    step.expectStateEntered != null ? step.expectStateEntered : 0,
                    step.expectStateExited != null ? step.expectStateExited : 0,
                    step.expectEventNotAccepted != null ? step.expectEventNotAccepted : 0,
                    step.expectTransition != null ? step.expectTransition : 0,
                    step.expectTransitionStarted != null ? step.expectTransitionStarted : 0,
                    step.expectTransitionEnded != null ? step.expectTransitionEnded : 0,
                    step.expectStateMachineStarted != null ? step.expectStateMachineStarted : 0,
                    step.expectStateMachineStopped != null ? step.expectStateMachineStopped : 0,
                    step.expectExtendedStateChanged != null ? step.expectExtendedStateChanged : 0);
        }

        // need to call start here, ok to call from all steps
        for (StateMachine<S, E> stateMachine : stateMachines.values()) {
            stateMachine.start();
        }

        if (step.expectStateMachineStarted != null) {
            for (Entry<StateMachine<S, E>, LatchStateMachineListener<S, E>> entry : listeners.entrySet()) {
                assertThat(
                        "StateMachineStarted Await not matched for machine " + entry.getKey(), entry.getValue()
                                .getStateMachineStartedLatch().await(defaultAwaitTime, TimeUnit.SECONDS),
                        is(true));
                assertThat("StateMachineStarted count not matched for machine " + entry.getKey(),
                        entry.getValue().getStateMachineStarted().size(), is(step.expectStateMachineStarted));
            }
        }

        if (!step.sendEvent.isEmpty()) {
            ArrayList<StateMachine<S, E>> sendVia = new ArrayList<StateMachine<S, E>>();
            if (step.sendEventMachineId != null) {
                sendVia.add(stateMachines.get(step.sendEventMachineId));
            } else if (step.sendEventToAll) {
                sendVia.addAll(stateMachines.values());
            } else {
                sendVia.add(stateMachines.values().iterator().next());
            }
            assertThat("Error finding machine to send via", sendVia, not(empty()));
            if (!step.sendEventParallel) {
                for (StateMachine<S, E> machine : sendVia) {
                    for (E event : step.sendEvent) {
                        log.info("Sending test event " + event + " via machine " + machine);
                        machine.sendEvent(event);
                    }
                }
            } else {
                for (E event : step.sendEvent) {
                    sendEventParallel(sendVia, event);
                }
            }
        } else if (!step.sendMessage.isEmpty()) {
            ArrayList<StateMachine<S, E>> sendVia = new ArrayList<StateMachine<S, E>>();
            if (step.sendEventMachineId != null) {
                sendVia.add(stateMachines.get(step.sendEventMachineId));
            } else if (step.sendEventToAll) {
                sendVia.addAll(stateMachines.values());
            } else {
                sendVia.add(stateMachines.values().iterator().next());
            }
            assertThat("Error finding machine to send via", sendVia, not(empty()));
            for (StateMachine<S, E> machine : sendVia) {
                for (Message<E> event : step.sendMessage) {
                    log.info("Sending test event " + event + " via machine " + machine);
                    machine.sendEvent(event);
                }
            }
        }

        if (step.expectStateChanged != null) {
            for (Entry<StateMachine<S, E>, LatchStateMachineListener<S, E>> entry : listeners.entrySet()) {
                assertThat("StateChanged Await not matched for machine " + entry.getKey(),
                        entry.getValue().getStateChangedLatch().await(defaultAwaitTime, TimeUnit.SECONDS),
                        is(true));
                assertThat("StateChanged count not matched for machine " + entry.getKey(),
                        entry.getValue().getStateChanged().size(), is(step.expectStateChanged));
            }
        }

        if (step.expectStateEntered != null) {
            for (LatchStateMachineListener<S, E> listener : listeners.values()) {
                assertThat(listener.getStateEnteredLatch().await(defaultAwaitTime, TimeUnit.SECONDS), is(true));
                assertThat(listener.getStateEntered().size(), is(step.expectStateEntered));
            }
        }

        if (step.expectStateExited != null) {
            for (LatchStateMachineListener<S, E> listener : listeners.values()) {
                assertThat(listener.getStateExitedLatch().await(defaultAwaitTime, TimeUnit.SECONDS), is(true));
                assertThat(listener.getStateExited().size(), is(step.expectStateExited));
            }
        }

        if (step.expectEventNotAccepted != null) {
            for (LatchStateMachineListener<S, E> listener : listeners.values()) {
                assertThat(listener.getEventNotAcceptedLatch().await(defaultAwaitTime, TimeUnit.SECONDS),
                        is(true));
                assertThat(listener.getEventNotAccepted().size(), is(step.expectEventNotAccepted));
            }
        }

        if (step.expectTransition != null) {
            for (LatchStateMachineListener<S, E> listener : listeners.values()) {
                assertThat(listener.getTransitionLatch().await(defaultAwaitTime, TimeUnit.SECONDS), is(true));
                assertThat(listener.getTransition().size(), is(step.expectTransition));
            }
        }

        if (step.expectTransitionStarted != null) {
            for (LatchStateMachineListener<S, E> listener : listeners.values()) {
                assertThat(listener.getTransitionStartedLatch().await(defaultAwaitTime, TimeUnit.SECONDS),
                        is(true));
                assertThat(listener.getTransitionStarted().size(), is(step.expectTransitionStarted));
            }
        }

        if (step.expectTransitionEnded != null) {
            for (LatchStateMachineListener<S, E> listener : listeners.values()) {
                assertThat(listener.getTransitionEndedLatch().await(defaultAwaitTime, TimeUnit.SECONDS),
                        is(true));
                assertThat(listener.getTransitionEnded().size(), is(step.expectTransitionEnded));
            }
        }

        if (step.expectStateMachineStopped != null) {
            for (LatchStateMachineListener<S, E> listener : listeners.values()) {
                assertThat(listener.getStateMachineStoppedLatch().await(defaultAwaitTime, TimeUnit.SECONDS),
                        is(true));
                assertThat(listener.getStateMachineStopped().size(), is(step.expectStateMachineStopped));
            }
        }

        if (!step.expectStates.isEmpty()) {
            for (StateMachine<S, E> stateMachine : stateMachines.values()) {
                assertThat(stateMachine.getState(), notNullValue());
                Collection<Matcher<? super S>> itemMatchers = new ArrayList<Matcher<? super S>>();
                for (S expectState : step.expectStates) {
                    itemMatchers.add(is(expectState));
                }
                assertThat(stateMachine.getState().getIds(), containsInAnyOrder(itemMatchers));
            }
        }

        if (!step.expectStatesEntrered.isEmpty()) {
            for (LatchStateMachineListener<S, E> listener : listeners.values()) {
                Collection<S> states = new ArrayList<S>();
                for (State<S, E> s : listener.getStateEntered()) {
                    states.add(s.getId());
                }
                assertThat(step.expectStatesEntrered, contains(states.toArray()));
            }
        }

        if (!step.expectStatesExited.isEmpty()) {
            for (LatchStateMachineListener<S, E> listener : listeners.values()) {
                Collection<S> states = new ArrayList<S>();
                for (State<S, E> s : listener.getStateExited()) {
                    states.add(s.getId());
                }
                assertThat(step.expectStatesExited, contains(states.toArray()));
            }
        }

        if (step.expectExtendedStateChanged != null) {
            for (LatchStateMachineListener<S, E> listener : listeners.values()) {
                assertThat(listener.getExtendedStateChangedLatch().await(defaultAwaitTime, TimeUnit.SECONDS),
                        is(true));
                assertThat(listener.getExtendedStateChanged().size(), is(step.expectExtendedStateChanged));
            }
        }

        if (!step.expectVariableKeys.isEmpty()) {
            for (StateMachine<S, E> stateMachine : stateMachines.values()) {
                Map<Object, Object> variables = stateMachine.getExtendedState().getVariables();
                for (Object key : step.expectVariableKeys) {
                    assertThat("Key " + key + " doesn't exist in extended state variables",
                            variables.containsKey(key), is(true));
                }
            }
        }

        if (!step.expectVariables.isEmpty()) {
            for (StateMachine<S, E> stateMachine : stateMachines.values()) {
                Map<Object, Object> variables = stateMachine.getExtendedState().getVariables();
                for (Entry<Object, Object> entry : step.expectVariables.entrySet()) {
                    assertThat("Key " + entry.getKey() + " doesn't exist in extended state variables",
                            variables.containsKey(entry.getKey()), is(true));
                    assertThat("Variable " + entry.getKey() + " doesn't match in extended state variables",
                            variables.get(entry.getKey()), is(entry.getValue()));
                }
            }
        }
    }
}