List of usage examples for org.springframework.statemachine.test.support LatchStateMachineListener reset
public void reset(int stateChangedCount, int stateEnteredCount, int stateExitedCount, int eventNotAcceptedCount, int transitionCount, int transitionStartedCount, int transitionEndedCount, int stateMachineStartedCount, int stateMachineStoppedCount, int extendedStateChangedCount)
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())); } } } } }