/* * 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 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.internal.InternalTDImpl.InternalTDType; import de.rcenvironment.core.component.model.endpoint.api.EndpointDatum; import de.rcenvironment.core.datamodel.api.DataType; import de.rcenvironment.core.datamodel.api.TypedDatum; import de.rcenvironment.core.datamodel.api.TypedDatumSerializer; import de.rcenvironment.core.datamodel.api.TypedDatumService; import de.rcenvironment.core.utils.common.StringUtils; /** * Tests for {@link EndpointDatumSerializerImpl}. * * @author Doreen Seider * @author Robert Mischke (8.0.0 id adaptations) * * TODO (p2) 8.1.0: looks good, but was wondering why InstanceNodeSessionId is created first to get a LogicalNodeId. Would expect * that NodeIdentifierTestUtils.createTestDefaultLogicalNodeIdWithDisplayName(displayName) is used instead. - seid_do (with regards * to former "(p1) 8.0.0: needs semantic review after migration is complete - misc_ro") */ public class EndpointDatumSerializerImplTest { private static final String COLON = ":"; private final InstanceNodeSessionId targetCompNodeInstanceSessionId = NodeIdentifierTestUtils .createTestInstanceNodeSessionIdWithDisplayName("comp-node_t"); private final LogicalNodeId targetCompNodeLogicalNodeId = targetCompNodeInstanceSessionId.convertToDefaultLogicalNodeId(); private final String targetCompNodeSerializedForm = StringUtils.escapeSeparator(targetCompNodeLogicalNodeId.getLogicalNodeIdString()); private final InstanceNodeSessionId sourceCompNodeInstanceSessionId = NodeIdentifierTestUtils .createTestInstanceNodeSessionIdWithDisplayName("comp-node_s"); private final LogicalNodeId sourceCompNodeLogicalNodeId = sourceCompNodeInstanceSessionId.convertToDefaultLogicalNodeId(); private final String sourceCompNodeSerializedForm = StringUtils.escapeSeparator(sourceCompNodeLogicalNodeId.getLogicalNodeIdString()); private final InstanceNodeSessionId wfCtrlNodeId = NodeIdentifierTestUtils.createTestInstanceNodeSessionIdWithDisplayName("wf-ctrl-node"); private final LogicalNodeId wfCtrlNodeLogicalNodeId = wfCtrlNodeId.convertToDefaultLogicalNodeId(); private final String wfCtrlNodeSerializedForm = StringUtils.escapeSeparator(wfCtrlNodeLogicalNodeId.getLogicalNodeIdString()); /** * Test the serialization of {@link EndpointDatum}s with an internal {@link TypedDatum} as value. */ @Test public void testSerializationOfEndDatumWithInternalTypedDatum() { EndpointDatumSerializerImpl endpointDatumSerializer = new EndpointDatumSerializerImpl(); InternalTDImpl internalTypedDatumMock = EasyMock.createNiceMock(InternalTDImpl.class); EasyMock.expect(internalTypedDatumMock.getDataType()).andReturn(DataType.Internal).anyTimes(); EasyMock.expect(internalTypedDatumMock.serialize()).andReturn("{\"t\":\"WorkflowFinish\",\"i\"" + ":\"6b5d89c8-3a12-48aa-9440-c078646e7172\"}").anyTimes(); EasyMock.replay(internalTypedDatumMock); EndpointDatum internalEndpointDatumMock = EasyMock.createNiceMock(EndpointDatum.class); EasyMock.expect(internalEndpointDatumMock.getInputName()).andReturn("int-input-name").anyTimes(); EasyMock.expect(internalEndpointDatumMock.getValue()).andReturn(internalTypedDatumMock).anyTimes(); EasyMock.expect(internalEndpointDatumMock.getInputsComponentExecutionIdentifier()).andReturn("comp-exe-id-1").anyTimes(); EasyMock.expect(internalEndpointDatumMock.getInputsComponentInstanceName()).andReturn("comp name 1").anyTimes(); EasyMock.expect(internalEndpointDatumMock.getInputsNodeId()).andReturn(targetCompNodeLogicalNodeId).anyTimes(); EasyMock.expect(internalEndpointDatumMock.getWorkflowNodeId()).andReturn(wfCtrlNodeLogicalNodeId).anyTimes(); EasyMock.expect(internalEndpointDatumMock.getOutputsComponentExecutionIdentifier()).andReturn("comp-exe-id-4").anyTimes(); EasyMock.expect(internalEndpointDatumMock.getOutputsNodeId()).andReturn(sourceCompNodeLogicalNodeId).anyTimes(); EasyMock.expect(internalEndpointDatumMock.getWorkflowExecutionIdentifier()).andReturn("wf-exe-id-1").anyTimes(); EasyMock.expect(internalEndpointDatumMock.getDataManagementId()).andReturn(null).anyTimes(); EasyMock.replay(internalEndpointDatumMock); String expectedSerializedEndpointDatum = "int-input-name:{\"t\"\\:\"WorkflowFinish\",\"i\"\\:\"6b5d89c8-" + "3a12-48aa-9440-c078646e7172\"}:comp-exe-id-1:comp name 1:" + targetCompNodeSerializedForm + ":comp-exe-id-4:" + sourceCompNodeSerializedForm + ":wf-exe-id-1:" + wfCtrlNodeSerializedForm + COLON; String serializedEndpointDatum = endpointDatumSerializer.serializeEndpointDatum(internalEndpointDatumMock); assertEquals(expectedSerializedEndpointDatum, serializedEndpointDatum); } /** * Test the serialization of {@link EndpointDatum}s with an non-internal {@link TypedDatum} as value. */ @Test public void testSerializationOfEndDatumWithNonInternalTypedDatumWithoutDataManagementId() { testSerializationOfEndDatumWithNonInternalTypedDatum(null); } /** * Test the serialization of {@link EndpointDatum}s with an non-internal {@link TypedDatum} as value and with a data management id. */ @Test public void testSerializationOfEndDatumWithNonInternalTypedDatumWithDataManagementId() { testSerializationOfEndDatumWithNonInternalTypedDatum(Long.valueOf(1)); } private void testSerializationOfEndDatumWithNonInternalTypedDatum(Long dmId) { EndpointDatumSerializerImpl endpointDatumSerializer = new EndpointDatumSerializerImpl(); TypedDatum typedDatumMock = EasyMock.createNiceMock(TypedDatum.class); EasyMock.expect(typedDatumMock.getDataType()).andReturn(DataType.Float).anyTimes(); EasyMock.replay(typedDatumMock); TypedDatumSerializer typedDatumSerializerMock = EasyMock.createStrictMock(TypedDatumSerializer.class); EasyMock.expect(typedDatumSerializerMock.serialize(typedDatumMock)).andReturn("serial-float-td"); EasyMock.replay(typedDatumSerializerMock); TypedDatumService typedDatumServiceMock = EasyMock.createStrictMock(TypedDatumService.class); EasyMock.expect(typedDatumServiceMock.getSerializer()).andReturn(typedDatumSerializerMock); EasyMock.replay(typedDatumServiceMock); endpointDatumSerializer.bindTypedDatumService(typedDatumServiceMock); EndpointDatum internalEndpointDatumMock = EasyMock.createNiceMock(EndpointDatum.class); EasyMock.expect(internalEndpointDatumMock.getInputName()).andReturn("input-name").anyTimes(); EasyMock.expect(internalEndpointDatumMock.getValue()).andReturn(typedDatumMock).anyTimes(); EasyMock.expect(internalEndpointDatumMock.getInputsComponentExecutionIdentifier()).andReturn("comp-exe-id-2").anyTimes(); EasyMock.expect(internalEndpointDatumMock.getInputsComponentInstanceName()).andReturn("comp name 2").anyTimes(); EasyMock.expect(internalEndpointDatumMock.getInputsNodeId()).andReturn(targetCompNodeLogicalNodeId).anyTimes(); EasyMock.expect(internalEndpointDatumMock.getWorkflowNodeId()).andReturn(wfCtrlNodeLogicalNodeId).anyTimes(); EasyMock.expect(internalEndpointDatumMock.getWorkflowExecutionIdentifier()).andReturn("wf-exe-id-2").anyTimes(); EasyMock.expect(internalEndpointDatumMock.getOutputsComponentExecutionIdentifier()).andReturn("comp-exe-id-5").anyTimes(); EasyMock.expect(internalEndpointDatumMock.getOutputsNodeId()).andReturn(sourceCompNodeLogicalNodeId).anyTimes(); EasyMock.expect(internalEndpointDatumMock.getDataManagementId()).andReturn(dmId).anyTimes(); EasyMock.replay(internalEndpointDatumMock); String expectedSerializedEndpointDatum = "input-name:serial-float-td:comp-exe-id-2:comp name 2" + COLON + targetCompNodeSerializedForm + ":comp-exe-id-5:" + sourceCompNodeSerializedForm + ":wf-exe-id-2:" + wfCtrlNodeSerializedForm + COLON; if (dmId != null) { expectedSerializedEndpointDatum += dmId; } String serializedEndpointDatum = endpointDatumSerializer.serializeEndpointDatum(internalEndpointDatumMock); assertEquals(expectedSerializedEndpointDatum, serializedEndpointDatum); } /** * Test the deserialization of {@link EndpointDatum}s with an internal {@link TypedDatum} as value. */ @Test public void testDeserializationOfEndDatumWithInternalTypedDatum() { EndpointDatumSerializerImpl endpointDatumSerializer = new EndpointDatumSerializerImpl(); EndpointDatum deserializeEndpointDatum = endpointDatumSerializer .deserializeEndpointDatum( "int-input-name:{\"t\"\\:\"WorkflowFinish\",\"i\"\\:\"6b5d89c8-3a12-48aa-9440-c078646e7172\"}:" + "comp-exe-id-1:comp name 1:" + targetCompNodeSerializedForm + ":comp-exe-id-3:" + sourceCompNodeSerializedForm + ":wf-exe-id-1:" + wfCtrlNodeSerializedForm + COLON); assertEquals("int-input-name", deserializeEndpointDatum.getInputName()); assertNull(deserializeEndpointDatum.getDataManagementId()); assertEquals("comp-exe-id-1", deserializeEndpointDatum.getInputsComponentExecutionIdentifier()); assertEquals("comp name 1", deserializeEndpointDatum.getInputsComponentInstanceName()); assertEquals(targetCompNodeLogicalNodeId, deserializeEndpointDatum.getInputsNodeId()); assertEquals("wf-exe-id-1", deserializeEndpointDatum.getWorkflowExecutionIdentifier()); assertEquals("comp-exe-id-3", deserializeEndpointDatum.getOutputsComponentExecutionIdentifier()); assertEquals(sourceCompNodeLogicalNodeId, deserializeEndpointDatum.getOutputsNodeId()); assertEquals(wfCtrlNodeLogicalNodeId, deserializeEndpointDatum.getWorkflowNodeId()); assertEquals("6b5d89c8-3a12-48aa-9440-c078646e7172", ((InternalTDImpl) deserializeEndpointDatum.getValue()).getIdentifier()); assertEquals(InternalTDType.WorkflowFinish, ((InternalTDImpl) deserializeEndpointDatum.getValue()).getType()); } /** * Test the deserialization of {@link EndpointDatum}s with an non-internal {@link TypedDatum} as value. */ @Test public void testDeserializationOfEndDatumWithNonInternalTypedDatumWithoutDataManagementId() { testDeserializationOfEndDatumWithNonInternalTypedDatum(null); } /** * Test the deserialization of {@link EndpointDatum}s with an non-internal {@link TypedDatum} as value and with a data management id. */ @Test public void testDeserializationOfEndDatumWithNonInternalTypedDatumWithDataManagementId() { testDeserializationOfEndDatumWithNonInternalTypedDatum(Long.valueOf(1)); } private void testDeserializationOfEndDatumWithNonInternalTypedDatum(Long dmId) { EndpointDatumSerializerImpl endpointDatumSerializer = new EndpointDatumSerializerImpl(); TypedDatum typedDatumMock = EasyMock.createNiceMock(TypedDatum.class); EasyMock.expect(typedDatumMock.getDataType()).andReturn(DataType.Float).anyTimes(); EasyMock.replay(typedDatumMock); TypedDatumSerializer typedDatumSerializerMock = EasyMock.createStrictMock(TypedDatumSerializer.class); EasyMock.expect(typedDatumSerializerMock.deserialize("serial-float-td")).andReturn(typedDatumMock); EasyMock.replay(typedDatumSerializerMock); TypedDatumService typedDatumServiceMock = EasyMock.createStrictMock(TypedDatumService.class); EasyMock.expect(typedDatumServiceMock.getSerializer()).andReturn(typedDatumSerializerMock); EasyMock.replay(typedDatumServiceMock); endpointDatumSerializer.bindTypedDatumService(typedDatumServiceMock); String serializedEndpointDatum = "input-name:serial-float-td:comp-exe-id-2:comp name 2" + COLON + targetCompNodeSerializedForm + ":comp-exe-id-5:" + sourceCompNodeSerializedForm + ":wf-exe-id-2:" + wfCtrlNodeSerializedForm + COLON; if (dmId != null) { serializedEndpointDatum += dmId + COLON; } EndpointDatum deserializedEndpointDatum = endpointDatumSerializer.deserializeEndpointDatum(serializedEndpointDatum); assertEquals("input-name", deserializedEndpointDatum.getInputName()); assertEquals(dmId, deserializedEndpointDatum.getDataManagementId()); assertEquals("comp-exe-id-2", deserializedEndpointDatum.getInputsComponentExecutionIdentifier()); assertEquals("comp name 2", deserializedEndpointDatum.getInputsComponentInstanceName()); assertEquals(targetCompNodeLogicalNodeId, deserializedEndpointDatum.getInputsNodeId()); assertEquals("wf-exe-id-2", deserializedEndpointDatum.getWorkflowExecutionIdentifier()); assertEquals("comp-exe-id-5", deserializedEndpointDatum.getOutputsComponentExecutionIdentifier()); assertEquals(sourceCompNodeLogicalNodeId, deserializedEndpointDatum.getOutputsNodeId()); assertEquals(wfCtrlNodeLogicalNodeId, deserializedEndpointDatum.getWorkflowNodeId()); assertEquals(typedDatumMock, deserializedEndpointDatum.getValue()); } }