/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.communication.rpc.internal; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.io.Serializable; import java.util.ArrayList; import java.util.UUID; import org.easymock.EasyMock; import org.junit.Before; import org.junit.Test; import org.osgi.framework.BundleContext; import de.rcenvironment.core.communication.api.PlatformService; import de.rcenvironment.core.communication.common.InstanceNodeSessionId; import de.rcenvironment.core.communication.common.NodeIdentifierTestUtils; import de.rcenvironment.core.communication.testutils.PlatformServiceDefaultStub; import de.rcenvironment.core.utils.common.StringUtils; import de.rcenvironment.core.utils.common.rpc.RemoteOperationException; /** * Test cases for {@link CallbackServiceImpl}. * * @author Doreen Seider * @author Robert Mischke */ public class CallbackServiceImplTest { private CallbackServiceImpl service; private DummyObject callbackObject = new DummyObject(); private final InstanceNodeSessionId instanceIdLocal = NodeIdentifierTestUtils.createTestInstanceNodeSessionIdWithDisplayName("local"); private final InstanceNodeSessionId instanceIdRemote = NodeIdentifierTestUtils.createTestInstanceNodeSessionIdWithDisplayName("remote"); /** Set up. */ @Before public void setUp() { service = new CallbackServiceImpl(); } /** * Test. * * @throws RemoteOperationException if an error occurs. **/ @Test public void testRemainingMethods() throws RemoteOperationException { String id = service.addCallbackObject(callbackObject, instanceIdRemote); assertNotNull(id); assertEquals(id, service.addCallbackObject(callbackObject, instanceIdRemote)); assertTrue(id != service.addCallbackObject(new String(), instanceIdRemote)); assertEquals(id, service.getCallbackObjectIdentifier(callbackObject)); assertNull(service.getCallbackObjectIdentifier(new Object())); assertEquals(callbackObject, service.getCallbackObject(id)); assertNull(service.getCallbackObject("unknown")); service.setTTL(id, new Long(5)); service.setTTL("unknown2", new Long(2)); assertEquals("some callback method called", service.callback(id, "someCallbackMethod", new ArrayList<Serializable>())); try { service.callback(id, "unknownMethod", new ArrayList<Serializable>()); fail(StringUtils.format("Method 'unknownMethod' is not defined for %s", DummyObject.class.getSimpleName())); } catch (RemoteOperationException e) { assertTrue(true); } try { service.callback(id, "someMethod", new ArrayList<Serializable>()); fail(StringUtils .format("Method 'someMethod' of %s is not allowed to be called from remote.", DummyObject.class.getSimpleName())); } catch (RemoteOperationException e) { assertTrue(true); } callbackObject = null; System.gc(); assertNull(service.getCallbackObject(id)); service.activate(EasyMock.createNiceMock(BundleContext.class)); service.deactivate(EasyMock.createNiceMock(BundleContext.class)); } /** * Test. * * @throws RemoteOperationException (expected) **/ @Test(expected = RemoteOperationException.class) public void testForFailure() throws RemoteOperationException { service.callback("id", "toString", new ArrayList<Serializable>()); } /** Test. */ @Test public void testCreateProxy() { service.bindPlatformService(new DummyPlatformService()); String id = UUID.randomUUID().toString(); Object proxy = service.createCallbackProxy(new DummyObject(), id, instanceIdRemote); assertTrue(proxy != null); assertTrue(proxy instanceof DummyInterface); assertTrue(proxy instanceof CallbackProxy); assertEquals(instanceIdLocal, ((CallbackProxy) proxy).getHomePlatform()); assertEquals(id, ((CallbackProxy) proxy).getObjectIdentifier()); assertEquals("some method called", ((DummyInterface) proxy).someMethod()); } /** Test. */ @Test public void testCreateProxyForClassWithCustomSuperclass() { service.bindPlatformService(new DummyPlatformService()); String id = UUID.randomUUID().toString(); Object proxy = service.createCallbackProxy(new DummyLevel2Object(), id, instanceIdRemote); assertTrue(proxy != null); assertTrue(proxy instanceof DummyInterface); assertTrue(proxy instanceof CallbackProxy); assertEquals(instanceIdLocal, ((CallbackProxy) proxy).getHomePlatform()); assertEquals(id, ((CallbackProxy) proxy).getObjectIdentifier()); assertEquals("some method called", ((DummyInterface) proxy).someMethod()); } /** * Test implementation of the {@link PlatformService}. * * @author Doreen Seider */ private class DummyPlatformService extends PlatformServiceDefaultStub { @Override public InstanceNodeSessionId getLocalInstanceNodeSessionId() { return instanceIdLocal; } } }