/* * 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.assertNull; import static org.junit.Assert.assertTrue; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.easymock.Capture; import org.easymock.EasyMock; import org.junit.Test; import de.rcenvironment.core.communication.common.InstanceNodeSessionId; import de.rcenvironment.core.communication.common.LogicalNodeId; import de.rcenvironment.core.communication.common.NodeIdentifierTestUtils; import de.rcenvironment.core.component.execution.api.ComponentExecutionContext; import de.rcenvironment.core.component.model.endpoint.api.EndpointDatum; import de.rcenvironment.core.component.model.endpoint.api.EndpointDatumRecipient; import de.rcenvironment.core.datamodel.api.TypedDatum; /** * Test cases for {@link TypedDatumToOutputWriter}. * * @author Doreen Seider * @author Robert Mischke (8.0.0 id adaptations) */ public class TypedDatumToOutputWriterTest { private static final String INP_NAME_1 = "inp-name-1"; private static final String INP_COMP_EXE_ID_1 = "inp-comp-exe-id-1"; private static final String INP_NAME_2 = "inp-name-2"; private static final String INP_COMP_EXE_ID_2 = "inp-comp-exe-id-2"; private static final String OUTPUT_CONNECTED = "output-connected"; private static final String OUTPUT_NOT_CONNECTED = "output-non-connected"; private static final String OUTP_COMP_EXE_ID = "outp-comp-exe-id"; private static final InstanceNodeSessionId OUTP_COMP_INSTANCE_SESSION_ID = NodeIdentifierTestUtils.createTestInstanceNodeSessionIdWithDisplayName("outp-comp-node-id"); private static final LogicalNodeId OUTP_COMP_LOGICAL_NODE_ID = OUTP_COMP_INSTANCE_SESSION_ID.convertToDefaultLogicalNodeId(); private static final String WF_CTRL_EXE_ID = "wf-ctrl-exe-id"; private static final InstanceNodeSessionId WF_CTRL_INSTANCE_SESSION_ID = NodeIdentifierTestUtils.createTestInstanceNodeSessionIdWithDisplayName("wf-ctrl-node-id"); private static final LogicalNodeId WF_CTRL_LOGICAL_NODE_ID = WF_CTRL_INSTANCE_SESSION_ID.convertToDefaultLogicalNodeId(); private EndpointDatumRecipient epRecipientMock1; private EndpointDatumRecipient epRecipientMock2; /** * Tests writing {@link TypedDatum} to an output that is not connected at all by considering all target inputs. */ @Test public void testWritingTypedDatumToNotConnectedOutput() { EndpointDatumDispatcher epDispatcherMock = EasyMock.createStrictMock(EndpointDatumDispatcher.class); EasyMock.replay(epDispatcherMock); TypedDatumToOutputWriter outputWriter = createTypedDatumToOutputWriterTestInstance(epDispatcherMock); TypedDatum typedDatumMock = EasyMock.createStrictMock(TypedDatum.class); outputWriter.writeTypedDatumToOutput(OUTPUT_NOT_CONNECTED, typedDatumMock); EasyMock.verify(epDispatcherMock); } /** * Tests writing {@link TypedDatum} to an output that is connected by considering all target inputs. */ @Test public void testWritingTypedDatumToConnectedOutput() { testWritingTypedDatumToOutput(null); testWritingTypedDatumToOutput(new Long(4)); } private void testWritingTypedDatumToOutput(Long dmId) { EndpointDatumDispatcher epDispatcherMock = EasyMock.createStrictMock(EndpointDatumDispatcher.class); Capture<EndpointDatum> epCapture1 = new Capture<>(); epDispatcherMock.dispatchEndpointDatum(EasyMock.capture(epCapture1)); Capture<EndpointDatum> epCapture2 = new Capture<>(); epDispatcherMock.dispatchEndpointDatum(EasyMock.capture(epCapture2)); EasyMock.replay(epDispatcherMock); TypedDatumToOutputWriter outputWriter = createTypedDatumToOutputWriterTestInstance(epDispatcherMock); TypedDatum typedDatumMock = EasyMock.createStrictMock(TypedDatum.class); if (dmId != null) { outputWriter.writeTypedDatumToOutput(OUTPUT_CONNECTED, typedDatumMock, dmId); } else { outputWriter.writeTypedDatumToOutput(OUTPUT_CONNECTED, typedDatumMock); } EasyMock.verify(epDispatcherMock); assertTrue(epCapture1.hasCaptured()); assertEquals(typedDatumMock, epCapture1.getValue().getValue()); assertTrue(epCapture2.hasCaptured()); assertEquals(typedDatumMock, epCapture2.getValue().getValue()); assertEquals(epRecipientMock1, epCapture1.getValue().getEndpointDatumRecipient()); assertEquals(OUTP_COMP_EXE_ID, epCapture1.getValue().getOutputsComponentExecutionIdentifier()); assertEquals(OUTP_COMP_LOGICAL_NODE_ID, epCapture1.getValue().getOutputsNodeId()); assertEquals(WF_CTRL_EXE_ID, epCapture1.getValue().getWorkflowExecutionIdentifier()); assertEquals(WF_CTRL_LOGICAL_NODE_ID, epCapture1.getValue().getWorkflowNodeId()); assertEquals(dmId, epCapture1.getValue().getDataManagementId()); } /** * Tests writing {@link TypedDatum} to an output that is not connected at all or not connected to the input given by its name and * execution identifier of its component by considering only certain target inputs. */ @Test public void testWritingTypedDatumToNotConnectedOutputConsideringTargetInput() { EndpointDatumDispatcher epDispatcherMock = EasyMock.createStrictMock(EndpointDatumDispatcher.class); EasyMock.replay(epDispatcherMock); TypedDatumToOutputWriter outputWriter = createTypedDatumToOutputWriterTestInstance(epDispatcherMock); TypedDatum typedDatumMock = EasyMock.createStrictMock(TypedDatum.class); outputWriter.writeTypedDatumToOutputConsideringOnlyCertainInputs(OUTPUT_NOT_CONNECTED, typedDatumMock, INP_COMP_EXE_ID_1, INP_NAME_1); EasyMock.verify(epDispatcherMock); outputWriter.writeTypedDatumToOutputConsideringOnlyCertainInputs(OUTPUT_CONNECTED, typedDatumMock, INP_COMP_EXE_ID_1, INP_NAME_2); EasyMock.verify(epDispatcherMock); } /** * Tests writing {@link TypedDatum} to an output that is connected by considering only certain target input. */ @Test public void testWritingTypedDatumToConnectedOutputConsideringTargetInput() { EndpointDatumDispatcher epDispatcherMock = EasyMock.createStrictMock(EndpointDatumDispatcher.class); Capture<EndpointDatum> epCapture = new Capture<>(); epDispatcherMock.dispatchEndpointDatum(EasyMock.capture(epCapture)); EasyMock.replay(epDispatcherMock); TypedDatumToOutputWriter outputWriter = createTypedDatumToOutputWriterTestInstance(epDispatcherMock); TypedDatum typedDatumMock = EasyMock.createStrictMock(TypedDatum.class); outputWriter.writeTypedDatumToOutputConsideringOnlyCertainInputs(OUTPUT_CONNECTED, typedDatumMock, INP_COMP_EXE_ID_1, INP_NAME_1); EasyMock.verify(epDispatcherMock); assertTrue(epCapture.hasCaptured()); assertEquals(typedDatumMock, epCapture.getValue().getValue()); assertEquals(epRecipientMock1, epCapture.getValue().getEndpointDatumRecipient()); assertEquals(OUTP_COMP_EXE_ID, epCapture.getValue().getOutputsComponentExecutionIdentifier()); assertEquals(OUTP_COMP_LOGICAL_NODE_ID, epCapture.getValue().getOutputsNodeId()); assertEquals(WF_CTRL_EXE_ID, epCapture.getValue().getWorkflowExecutionIdentifier()); assertEquals(WF_CTRL_LOGICAL_NODE_ID, epCapture.getValue().getWorkflowNodeId()); assertNull(epCapture.getValue().getDataManagementId()); } private TypedDatumToOutputWriter createTypedDatumToOutputWriterTestInstance(EndpointDatumDispatcher epDispatcherMock) { ComponentExecutionRelatedInstances compExeRelatedInstances = new ComponentExecutionRelatedInstances(); compExeRelatedInstances.compExeCtx = createComponentExecutionContextMock(); TypedDatumToOutputWriter outputWriter = new TypedDatumToOutputWriter(compExeRelatedInstances); outputWriter.bindEndpointDatumDispatcher(epDispatcherMock); return outputWriter; } private ComponentExecutionContext createComponentExecutionContextMock() { ComponentExecutionContext compExeCtxMock = EasyMock.createStrictMock(ComponentExecutionContext.class); EasyMock.expect(compExeCtxMock.getEndpointDatumRecipients()).andStubReturn(createEndpointDatumRecipientMocks()); EasyMock.expect(compExeCtxMock.getExecutionIdentifier()).andStubReturn(OUTP_COMP_EXE_ID); EasyMock.expect(compExeCtxMock.getNodeId()).andStubReturn(OUTP_COMP_LOGICAL_NODE_ID); EasyMock.expect(compExeCtxMock.getWorkflowExecutionIdentifier()).andStubReturn(WF_CTRL_EXE_ID); EasyMock.expect(compExeCtxMock.getWorkflowNodeId()).andStubReturn(WF_CTRL_LOGICAL_NODE_ID); EasyMock.replay(compExeCtxMock); return compExeCtxMock; } private Map<String, List<EndpointDatumRecipient>> createEndpointDatumRecipientMocks() { epRecipientMock1 = EasyMock.createStrictMock(EndpointDatumRecipient.class); EasyMock.expect(epRecipientMock1.getInputsComponentExecutionIdentifier()).andStubReturn(INP_COMP_EXE_ID_1); EasyMock.expect(epRecipientMock1.getInputName()).andStubReturn(INP_NAME_1); EasyMock.replay(epRecipientMock1); epRecipientMock2 = EasyMock.createStrictMock(EndpointDatumRecipient.class); EasyMock.expect(epRecipientMock2.getInputsComponentExecutionIdentifier()).andStubReturn(INP_COMP_EXE_ID_2); EasyMock.expect(epRecipientMock2.getInputName()).andStubReturn(INP_NAME_2); EasyMock.replay(epRecipientMock2); List<EndpointDatumRecipient> epRecipientsForConnectedOutput = new ArrayList<>(); epRecipientsForConnectedOutput.add(epRecipientMock1); epRecipientsForConnectedOutput.add(epRecipientMock2); Map<String, List<EndpointDatumRecipient>> allEpRecipients = new HashMap<>(); allEpRecipients.put(OUTPUT_CONNECTED, epRecipientsForConnectedOutput); return allEpRecipients; } }