/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.component.workflow.execution.internal; import static org.junit.Assert.assertEquals; import org.easymock.EasyMock; import org.junit.Test; import de.rcenvironment.core.component.execution.api.ComponentState; import junit.framework.Assert; /** * Tests for {@link ComponentStatesChangedEntirelyVerifier}. * * @author Doreen Seider */ public class ComponentStatesChangedEntirelyVerifierTest { private static final String EXE_ID_2 = "exe-id-2"; private static final String EXE_ID_1 = "exe-id-1"; /** * Tests if {@link ComponentStatesChangedEntirelyListener#onComponentStatesChangedCompletelyToPrepared()} is called properly. */ @Test public void testPreparedComponentStateNotification() { int compCount = 2; ComponentStatesChangedEntirelyVerifier verifier = new ComponentStatesChangedEntirelyVerifier(compCount); ComponentStatesChangedEntirelyListener listener = EasyMock.createStrictMock(ComponentStatesChangedEntirelyListener.class); EasyMock.replay(listener); verifier.addListener(listener); verifier.announceComponentState(EXE_ID_1, ComponentState.PREPARING); verifier.announceComponentState(EXE_ID_2, ComponentState.PROCESSING_INPUTS); verifier.announceComponentState(EXE_ID_2, ComponentState.PREPARED); verifier.announceComponentState(EXE_ID_1, ComponentState.CANCELLING); verifier.announceComponentState(EXE_ID_2, ComponentState.CANCELED); verifier.announceComponentState(EXE_ID_2, ComponentState.FINISHED); EasyMock.reset(listener); listener.onComponentStatesChangedCompletelyToPrepared(); EasyMock.expectLastCall().times(1); EasyMock.replay(listener); verifier.announceComponentState(EXE_ID_1, ComponentState.PREPARED); EasyMock.verify(listener); } /** * Tests if {@link ComponentStatesChangedEntirelyListener#onComponentStatesChangedCompletelyToPaused()} is called properly. */ @Test public void testPausedComponentStateNotification() { int compCount = 2; ComponentStatesChangedEntirelyVerifier verifier = new ComponentStatesChangedEntirelyVerifier(compCount); ComponentStatesChangedEntirelyListener listener = EasyMock.createStrictMock(ComponentStatesChangedEntirelyListener.class); verifier.addListener(listener); for (int i = 0; i < 2; i++) { EasyMock.reset(listener); EasyMock.replay(listener); verifier.announceComponentState(EXE_ID_1, ComponentState.CANCELED); verifier.announceComponentState(EXE_ID_2, ComponentState.PAUSED); EasyMock.verify(listener); EasyMock.reset(listener); listener.onComponentStatesChangedCompletelyToPaused(); EasyMock.expectLastCall().times(1); EasyMock.replay(listener); verifier = new ComponentStatesChangedEntirelyVerifier(compCount); verifier.addListener(listener); verifier.enablePausedComponentStateVerification(); verifier.announceComponentState(EXE_ID_1, ComponentState.CANCELED); verifier.announceComponentState(EXE_ID_2, ComponentState.PAUSED); EasyMock.verify(listener); } } /** * Tests {@link ComponentStatesChangedEntirelyVerifier#getComponentsInFinalState()} and * {@link ComponentStatesChangedEntirelyVerifier#getDisposedComponents()}. */ @Test public void testGetComponentsInCertainState() { int compCount = 2; ComponentStatesChangedEntirelyVerifier verifier = new ComponentStatesChangedEntirelyVerifier(compCount); ComponentStatesChangedEntirelyListener listener = EasyMock.createNiceMock(ComponentStatesChangedEntirelyListener.class); EasyMock.replay(listener); verifier.addListener(listener); verifier.announceComponentState(EXE_ID_1, ComponentState.PREPARING); verifier.announceComponentState(EXE_ID_2, ComponentState.PAUSED); assertEquals(0, verifier.getComponentsInFinalState().size()); assertEquals(0, verifier.getDisposedComponents().size()); verifier.announceComponentState(EXE_ID_1, ComponentState.CANCELED); verifier.announceComponentState(EXE_ID_2, ComponentState.RESUMING); assertEquals(1, verifier.getComponentsInFinalState().size()); assertEquals(0, verifier.getDisposedComponents().size()); verifier.announceComponentState(EXE_ID_1, ComponentState.DISPOSED); verifier.announceComponentState(EXE_ID_2, ComponentState.FAILED); assertEquals(2, verifier.getComponentsInFinalState().size()); assertEquals(1, verifier.getDisposedComponents().size()); verifier.announceComponentState(EXE_ID_2, ComponentState.DISPOSED); assertEquals(2, verifier.getDisposedComponents().size()); } /** * Tests if {@link ComponentStatesChangedEntirelyListener#onComponentStatesChangedCompletelyToResumed()} is called properly. */ @Test public void testResumedComponentStateNotification() { int compCount = 2; ComponentStatesChangedEntirelyVerifier verifier = new ComponentStatesChangedEntirelyVerifier(compCount); ComponentStatesChangedEntirelyListener listener = EasyMock.createStrictMock(ComponentStatesChangedEntirelyListener.class); verifier.addListener(listener); for (int i = 0; i < 2; i++) { EasyMock.reset(listener); EasyMock.replay(listener); verifier.announceComponentState(EXE_ID_1, ComponentState.PROCESSING_INPUTS); verifier.announceComponentState(EXE_ID_2, ComponentState.FINISHED); EasyMock.verify(listener); EasyMock.reset(listener); listener.onComponentStatesChangedCompletelyToResumed(); EasyMock.expectLastCall().times(1); EasyMock.replay(listener); verifier = new ComponentStatesChangedEntirelyVerifier(compCount); verifier.addListener(listener); verifier.enableResumedComponentStateVerification(); verifier.announceComponentState(EXE_ID_1, ComponentState.PROCESSING_INPUTS); verifier.announceComponentState(EXE_ID_2, ComponentState.FINISHED); EasyMock.verify(listener); } } /** * Tests if {@link ComponentStatesChangedEntirelyListener#onComponentStatesChangedCompletelyToAnyFinalState()} is called properly. */ @Test public void testFinalComponentStatesNotification() { int compCount = 2; ComponentStatesChangedEntirelyVerifier verifier = new ComponentStatesChangedEntirelyVerifier(compCount); ComponentStatesChangedEntirelyListener listener = EasyMock.createStrictMock(ComponentStatesChangedEntirelyListener.class); listener.onComponentStatesChangedCompletelyToAnyFinalState(); EasyMock.expectLastCall().times(1); EasyMock.replay(listener); verifier.addListener(listener); verifier.announceComponentState(EXE_ID_1, ComponentState.PREPARING); verifier.announceComponentState(EXE_ID_2, ComponentState.PREPARED); verifier.announceComponentState(EXE_ID_1, ComponentState.PREPARING); verifier.announceComponentState(EXE_ID_2, ComponentState.PAUSED); verifier.announceComponentState(EXE_ID_1, ComponentState.PREPARING); verifier.announceComponentState(EXE_ID_2, ComponentState.PREPARED); verifier.announceComponentState(EXE_ID_1, ComponentState.FAILED); verifier.announceComponentState(EXE_ID_2, ComponentState.RESUMING); verifier.announceComponentState(EXE_ID_2, ComponentState.CANCELED); EasyMock.verify(listener); } /** * Tests if {@link ComponentStatesChangedEntirelyListener#onComponentStatesChangedCompletelyToFinished()} is called properly and if * {@link ComponentStatesChangedEntirelyVerifier#isComponentInFinalState(String)} returns valid results. */ @Test public void testFinishedComponentStatesHandling() { int compCount = 2; ComponentStatesChangedEntirelyVerifier verifier = new ComponentStatesChangedEntirelyVerifier(compCount); ComponentStatesChangedEntirelyListener listener = EasyMock.createStrictMock(ComponentStatesChangedEntirelyListener.class); listener.onComponentStatesChangedCompletelyToAnyFinalState(); EasyMock.expectLastCall().times(1); EasyMock.replay(listener); verifier.addListener(listener); Assert.assertFalse(verifier.isComponentInFinalState(EXE_ID_1)); Assert.assertFalse(verifier.isComponentInFinalState(EXE_ID_2)); verifier.announceComponentState(EXE_ID_1, ComponentState.CANCELED); Assert.assertTrue(verifier.isComponentInFinalState(EXE_ID_1)); Assert.assertFalse(verifier.isComponentInFinalState(EXE_ID_2)); verifier.announceComponentState(EXE_ID_1, ComponentState.FINISHED_WITHOUT_EXECUTION); verifier.announceComponentState(EXE_ID_2, ComponentState.FAILED); Assert.assertTrue(verifier.isComponentInFinalState(EXE_ID_1)); Assert.assertTrue(verifier.isComponentInFinalState(EXE_ID_2)); EasyMock.verify(listener); EasyMock.reset(listener); listener.onComponentStatesChangedCompletelyToFinished(); EasyMock.expectLastCall().times(1); listener.onComponentStatesChangedCompletelyToAnyFinalState(); EasyMock.expectLastCall().times(1); EasyMock.replay(listener); verifier.announceComponentState(EXE_ID_2, ComponentState.FINISHED); EasyMock.verify(listener); } /** * Tests if {@link ComponentStatesChangedEntirelyListener#onComponentStatesChangedCompletelyToDisposed()} is called properly and if * {@link ComponentStatesChangedEntirelyVerifier#isComponentDisposed(String)} returns valid results. */ @Test public void testDisposedComponentStatesHandling() { int compCount = 2; ComponentStatesChangedEntirelyVerifier verifier = new ComponentStatesChangedEntirelyVerifier(compCount); ComponentStatesChangedEntirelyListener listener = EasyMock.createStrictMock(ComponentStatesChangedEntirelyListener.class); EasyMock.replay(listener); verifier.addListener(listener); Assert.assertFalse(verifier.isComponentDisposed(EXE_ID_1)); Assert.assertFalse(verifier.isComponentDisposed(EXE_ID_2)); verifier.announceComponentState(EXE_ID_1, ComponentState.PREPARING); verifier.announceComponentState(EXE_ID_2, ComponentState.PROCESSING_INPUTS); verifier.announceComponentState(EXE_ID_2, ComponentState.PREPARED); verifier.announceComponentState(EXE_ID_1, ComponentState.CANCELLING); verifier.announceComponentState(EXE_ID_2, ComponentState.DISPOSED); Assert.assertFalse(verifier.isComponentDisposed(EXE_ID_1)); Assert.assertTrue(verifier.isComponentDisposed(EXE_ID_2)); verifier.announceComponentState(EXE_ID_2, ComponentState.CANCELED); verifier.announceComponentState(EXE_ID_2, ComponentState.FINISHED); EasyMock.reset(listener); listener.onComponentStatesChangedCompletelyToDisposed(); EasyMock.expectLastCall().times(1); EasyMock.replay(listener); verifier.announceComponentState(EXE_ID_1, ComponentState.DISPOSED); Assert.assertTrue(verifier.isComponentDisposed(EXE_ID_1)); Assert.assertTrue(verifier.isComponentDisposed(EXE_ID_2)); EasyMock.verify(listener); } /** * Tests if {@link ComponentStatesChangedEntirelyListener#onLastConsoleRowsReceived()} is called properly. */ @Test public void testLastConsoleRowNotification() { int compCount = 2; ComponentStatesChangedEntirelyVerifier verifier = new ComponentStatesChangedEntirelyVerifier(compCount); ComponentStatesChangedEntirelyListener listener = EasyMock.createStrictMock(ComponentStatesChangedEntirelyListener.class); listener.onLastConsoleRowsReceived(); EasyMock.expectLastCall().times(1); EasyMock.replay(listener); verifier.addListener(listener); verifier.announceLastConsoleRow(EXE_ID_1); verifier.accounceComponentInAnyFinalState(EXE_ID_2); verifier.announceComponentState(EXE_ID_1, ComponentState.DISPOSED); verifier.announceLastConsoleRow(EXE_ID_2); verifier.announceComponentState(EXE_ID_2, ComponentState.PROCESSING_INPUTS); EasyMock.verify(listener); } }