/* * 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 static org.junit.Assert.assertTrue; import java.util.Set; import org.easymock.Capture; import org.easymock.EasyMock; import org.junit.Test; import de.rcenvironment.core.component.workflow.execution.api.WorkflowExecutionContext; /** * Test cases for {@link ComponentLostWatcher}. * * @author Doreen Seider */ public class ComponentLostWatcherTest { private static final String COMP_EXE_ID_1 = "comp-exe-id-1"; private static final String COMP_EXE_ID_2 = "comp-exe-id-2"; private static final String COMP_EXE_ID_3 = "comp-exe-id-3"; private static final String COMP_EXE_ID_4 = "comp-exe-id-4"; /** * Tests if heartbeat losses are recognized properly. * * @throws InterruptedException on unexpected error */ @Test public void testHeartbeatLossRecognition() throws InterruptedException { final int testMaxHeartbeatIntervallMsec = 100; ComponentLostWatcher.maxHeartbeatIntervalMsec = testMaxHeartbeatIntervallMsec; ComponentStatesChangedEntirelyVerifier compStatesChangedVerifierMock = EasyMock.createStrictMock(ComponentStatesChangedEntirelyVerifier.class); Capture<Set<String>> compExeIdsCapture = new Capture<>(); EasyMock.expect(compStatesChangedVerifierMock.isComponentInFinalState(COMP_EXE_ID_1)).andStubReturn(false); EasyMock.expect(compStatesChangedVerifierMock.isComponentInFinalState(COMP_EXE_ID_2)).andStubReturn(true); EasyMock.expect(compStatesChangedVerifierMock.isComponentInFinalState(COMP_EXE_ID_3)).andStubReturn(false); EasyMock.expect(compStatesChangedVerifierMock.isComponentInFinalState(COMP_EXE_ID_4)).andStubReturn(false); compStatesChangedVerifierMock.announceLostComponents(EasyMock.capture(compExeIdsCapture)); EasyMock.replay(compStatesChangedVerifierMock); WorkflowExecutionContext wfExeCtxMock = EasyMock.createStrictMock(WorkflowExecutionContext.class); EasyMock.expect(wfExeCtxMock.getInstanceName()).andReturn("wf instance name"); EasyMock.expect(wfExeCtxMock.getExecutionIdentifier()).andReturn("wf-exe-id"); EasyMock.replay(wfExeCtxMock); ComponentLostWatcher componentLostWatcher = new ComponentLostWatcher(compStatesChangedVerifierMock, wfExeCtxMock); componentLostWatcher.run(); componentLostWatcher.announceComponentHeartbeat(COMP_EXE_ID_1); componentLostWatcher.announceComponentHeartbeat(COMP_EXE_ID_2); componentLostWatcher.announceComponentHeartbeat(COMP_EXE_ID_3); componentLostWatcher.announceComponentHeartbeat(COMP_EXE_ID_4); final int testMaxHeartbeatIntervallWaitOffsetMsec = 50; Thread.sleep(ComponentLostWatcher.maxHeartbeatIntervalMsec + testMaxHeartbeatIntervallWaitOffsetMsec); componentLostWatcher.announceComponentHeartbeat(COMP_EXE_ID_1); componentLostWatcher.run(); assertTrue(compExeIdsCapture.hasCaptured()); assertEquals(1, compExeIdsCapture.getValues().size()); Set<String> compExeIdsCaptured = compExeIdsCapture.getValues().get(0); assertEquals(2, compExeIdsCaptured.size()); assertTrue(compExeIdsCaptured.contains(COMP_EXE_ID_3)); assertTrue(compExeIdsCaptured.contains(COMP_EXE_ID_4)); } }