/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.component.execution.internal; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import org.easymock.Capture; import org.easymock.EasyMock; import org.junit.Test; import de.rcenvironment.core.component.execution.api.BatchingConsoleRowsForwarder; import de.rcenvironment.core.component.execution.api.ComponentState; import de.rcenvironment.core.component.execution.api.ConsoleRow; import de.rcenvironment.core.component.execution.api.ConsoleRow.WorkflowLifecyleEventType; import de.rcenvironment.core.component.testutils.ComponentExecutionContextDefaultStub; import de.rcenvironment.core.utils.common.StringUtils; /** * Test cases for {@link ConsoleRowsSender}. * * @author Doreen Seider */ public class ConsoleRowsSenderTest { private static final Long DM_ID = Long.valueOf(7); private static final int CONSOLE_ROW_SEQ_NUMBER = 8; private static final int EXE_COUNT = 9; private BatchingConsoleRowsForwarder batchingConsoleRowForwarderMock; /** * Tests if the trigger for writing log files to the data management is done properly. That includes that certain flags are set properly * afterwards. */ @Test public void testSendLogFileWriteTriggerAsConsoleRow() { Capture<ConsoleRow> consoleRowCapture = new Capture<>(); ComponentExecutionRelatedInstances compExeRelatedInstances = createComponentExecutionRelatedInstances(consoleRowCapture); ConsoleRowsSender consoleRowsSender = new ConsoleRowsSender(compExeRelatedInstances); consoleRowsSender.sendLogFileWriteTriggerAsConsoleRow(); ConsoleRow capturedConsoleRow = verifyAfterConsoleRowSent(consoleRowCapture, ConsoleRow.Type.LIFE_CYCLE_EVENT); String[] payload = StringUtils.splitAndUnescape(capturedConsoleRow.getPayload()); assertEquals(ConsoleRow.WorkflowLifecyleEventType.COMPONENT_LOG_FINISHED.name(), payload[0]); assertEquals(String.valueOf(DM_ID), payload[1]); assertEquals(String.valueOf(EXE_COUNT), payload[2]); assertEquals(0, compExeRelatedInstances.compExeRelatedStates.consoleRowSequenceNumber.get()); assertFalse(compExeRelatedInstances.compExeRelatedStates.compHasSentConsoleRowLogMessages.get()); } /** * Tests if a log message is sent as expected. */ @Test public void testSendLogMessageAsConsoleRow() { Capture<ConsoleRow> consoleRowCapture = new Capture<>(); ComponentExecutionRelatedInstances compExeRelatedInstances = createComponentExecutionRelatedInstances(consoleRowCapture); ConsoleRowsSender consoleRowsSender = new ConsoleRowsSender(compExeRelatedInstances); String payload = "some message"; int compRun = 5; consoleRowsSender.sendLogMessageAsConsoleRow(ConsoleRow.Type.TOOL_ERROR, payload, compRun); ConsoleRow capturedConsoleRow = verifyAfterConsoleRowSent(consoleRowCapture, ConsoleRow.Type.TOOL_ERROR); assertEquals(payload, capturedConsoleRow.getPayload()); assertEquals(compRun, capturedConsoleRow.getComponentRun()); } /** * Tests if a log message is sent as expected. */ @Test public void testSendTimelineEventAsConsoleRow() { Capture<ConsoleRow> consoleRowCapture = new Capture<>(); ComponentExecutionRelatedInstances compExeRelatedInstances = createComponentExecutionRelatedInstances(consoleRowCapture); ConsoleRowsSender consoleRowsSender = new ConsoleRowsSender(compExeRelatedInstances); consoleRowsSender.sendTimelineEventAsConsoleRow(ConsoleRow.Type.LIFE_CYCLE_EVENT, WorkflowLifecyleEventType.TOOL_STARTING.name()); ConsoleRow capturedConsoleRow = verifyAfterConsoleRowSent(consoleRowCapture, ConsoleRow.Type.LIFE_CYCLE_EVENT); String[] payload = StringUtils.splitAndUnescape(capturedConsoleRow.getPayload()); assertEquals(payload[0], WorkflowLifecyleEventType.TOOL_STARTING.name()); assertEquals(payload[1], String.valueOf(DM_ID)); } /** * Tests if a {@link ComponentState} is sent as expected. */ @Test public void testSendStateAsConsoleRow() { Capture<ConsoleRow> consoleRowCapture = new Capture<>(); ComponentExecutionRelatedInstances compExeRelatedInstances = createComponentExecutionRelatedInstances(consoleRowCapture); ConsoleRowsSender consoleRowsSender = new ConsoleRowsSender(compExeRelatedInstances); consoleRowsSender.sendStateAsConsoleRow(ConsoleRow.WorkflowLifecyleEventType.COMPONENT_TERMINATED); ConsoleRow capturedConsoleRow = verifyAfterConsoleRowSent(consoleRowCapture, ConsoleRow.Type.LIFE_CYCLE_EVENT); assertEquals(ConsoleRow.WorkflowLifecyleEventType.COMPONENT_TERMINATED.name(), capturedConsoleRow.getPayload()); } private ConsoleRow verifyAfterConsoleRowSent(Capture<ConsoleRow> consoleRowCapture, ConsoleRow.Type expectedType) { EasyMock.verify(batchingConsoleRowForwarderMock); assertTrue(consoleRowCapture.hasCaptured()); assertEquals(1, consoleRowCapture.getValues().size()); ConsoleRow capturedConsoleRow = consoleRowCapture.getValue(); assertEquals(ComponentExecutionContextDefaultStub.COMP_EXE_ID, capturedConsoleRow.getComponentIdentifier()); assertEquals(ComponentExecutionContextDefaultStub.WF_EXE_ID, capturedConsoleRow.getWorkflowIdentifier()); assertEquals(ComponentExecutionContextDefaultStub.COMP_INSTANCE_NAME, capturedConsoleRow.getComponentName()); assertEquals(ComponentExecutionContextDefaultStub.WF_INSTANCE_NAME, capturedConsoleRow.getWorkflowName()); assertEquals(expectedType, capturedConsoleRow.getType()); return capturedConsoleRow; } private ComponentExecutionRelatedInstances createComponentExecutionRelatedInstances(Capture<ConsoleRow> consoleRowCapture) { ComponentExecutionStorageBridge compExeStorageBridgeMock = EasyMock.createStrictMock(ComponentExecutionStorageBridge.class); EasyMock.expect(compExeStorageBridgeMock.getComponentExecutionDataManagementId()).andStubReturn(DM_ID); EasyMock.replay(compExeStorageBridgeMock); ComponentExecutionRelatedStates compExeRelatedStates = new ComponentExecutionRelatedStates(); compExeRelatedStates.executionCount.set(EXE_COUNT); compExeRelatedStates.consoleRowSequenceNumber.set(CONSOLE_ROW_SEQ_NUMBER); compExeRelatedStates.compHasSentConsoleRowLogMessages.set(true); batchingConsoleRowForwarderMock = EasyMock.createStrictMock(BatchingConsoleRowsForwarder.class); batchingConsoleRowForwarderMock.onConsoleRow(EasyMock.capture(consoleRowCapture)); EasyMock.replay(batchingConsoleRowForwarderMock); ComponentExecutionRelatedInstances compExeRelatedInstances = new ComponentExecutionRelatedInstances(); compExeRelatedInstances.compExeStorageBridge = compExeStorageBridgeMock; compExeRelatedInstances.compExeCtx = new ComponentExecutionContextDefaultStub(); compExeRelatedInstances.compExeRelatedStates = compExeRelatedStates; compExeRelatedInstances.batchingConsoleRowsForwarder = batchingConsoleRowForwarderMock; return compExeRelatedInstances; } }