/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.communication.rpc; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import java.io.IOException; import java.io.Serializable; import java.util.ArrayList; import org.easymock.EasyMock; import org.junit.Test; import de.rcenvironment.core.communication.common.InstanceNodeSessionId; import de.rcenvironment.core.communication.common.LogicalNodeSessionId; import de.rcenvironment.core.communication.common.NodeIdentifierTestUtils; import de.rcenvironment.core.communication.model.NetworkRequest; import de.rcenvironment.core.communication.model.NetworkResponse; import de.rcenvironment.core.communication.protocol.NetworkResponseFactory; /** * {@link ServiceCallResultFactory} test. * * @author Robert Mischke */ public class ServiceCallResultFactoryTest { private LogicalNodeSessionId targetNodeId; private LogicalNodeSessionId callerNodeId; /** * Test for * {@link de.rcenvironment.core.communication.rpc.ServiceCallResultFactory#representInternalErrorAtHandler(ServiceCallRequest, String)}. */ @Test public void testRepresentationOfInternalErrorAtHandler() { final ServiceCallRequest scRequest = createDummyRequest(); final String errorMessage = "test error message"; final String exceptionMessage = "test exception message"; final ServiceCallResult scResult = ServiceCallResultFactory.representInternalErrorAtHandler(scRequest, errorMessage, new IOException(exceptionMessage)); // test the client-readable error message assertTrue(scResult.getRemoteOperationExceptionMessage().contains("error performing this remote operation")); assertTrue(scResult.getRemoteOperationExceptionMessage().contains("E#")); // error marker prefix; TODO (p3) replace with constant // verify other fields assertNull(scResult.getMethodExceptionType()); assertNull(scResult.getMethodExceptionMessage()); assertNull(scResult.getReturnValue()); assertFalse(scResult.isSuccess()); } /** * Test for {@link de.rcenvironment.core.communication.rpc.ServiceCallResultFactory#representNetworkErrorAsRemoteOperationException()} * in combination with {@link de.rcenvironment.core.communication.protocol.NetworkResponseFactory#generateResponseForNoRouteAtSender()}. */ @Test public void testRepresentationOfNoRouteAtSender() { final ServiceCallRequest scRequest = createDummyRequest(); final NetworkRequest nwRequestMock = EasyMock.createMock(NetworkRequest.class); final InstanceNodeSessionId errorReporterNodeId = NodeIdentifierTestUtils.createTestInstanceNodeSessionId(); final NetworkResponse networkResponse = NetworkResponseFactory.generateResponseForNoRouteAtSender(nwRequestMock, errorReporterNodeId); final ServiceCallResult scResult = ServiceCallResultFactory.representNetworkErrorAsRemoteOperationException(scRequest, networkResponse); // test the client-readable error message assertTrue(scResult.getRemoteOperationExceptionMessage().contains(errorReporterNodeId.toString())); assertTrue(scResult.getRemoteOperationExceptionMessage().contains(errorReporterNodeId.getInstanceNodeSessionIdString())); assertFalse(scResult.getRemoteOperationExceptionMessage().contains("Failed to parse")); // Mantis #0014653 // verify other fields assertNull(scResult.getMethodExceptionType()); assertNull(scResult.getMethodExceptionMessage()); assertNull(scResult.getReturnValue()); assertFalse(scResult.isSuccess()); } private ServiceCallRequest createDummyRequest() { targetNodeId = NodeIdentifierTestUtils.createTestLogicalNodeSessionId(true); callerNodeId = NodeIdentifierTestUtils.createTestLogicalNodeSessionId(true); final ServiceCallRequest request = new ServiceCallRequest(targetNodeId, callerNodeId, "Service", "Method", new ArrayList<Serializable>()); return request; } }