/*
* 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.assertTrue;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import de.rcenvironment.core.communication.common.InstanceNodeSessionId;
import de.rcenvironment.core.communication.common.NodeIdentifierTestUtils;
import de.rcenvironment.core.communication.rpc.api.CallbackProxyService;
import de.rcenvironment.core.communication.rpc.api.CallbackService;
import de.rcenvironment.core.communication.spi.CallbackMethod;
import de.rcenvironment.core.communication.spi.CallbackObject;
import de.rcenvironment.core.utils.common.rpc.RemoteOperationException;
/**
* Test cases for {@link CallbackUtils}.
*
* @author Doreen Seider
* @author Robert Mischke (8.0.0 id adaptations)
*/
public class CallbackUtilsTest {
private final InstanceNodeSessionId instanceIdLocal = NodeIdentifierTestUtils.createTestInstanceNodeSessionIdWithDisplayName("local");
private final InstanceNodeSessionId instanceIdRemote = NodeIdentifierTestUtils.createTestInstanceNodeSessionIdWithDisplayName("remote");
private final DummyCallbackService callbackService = new DummyCallbackService();
private final DummyCallbackProxyService callbackProxyService = new DummyCallbackProxyService();
private final String id1 = "id1";
private final String id2 = "id2";
private final String id3 = "id3";
private final DummyObject object1 = new DummyObject();
private final DummyObject object2 = new DummyObject();
private final Object proxy11 = new DummyProxy(id1);
private final Object proxy12 = new DummyProxy(id1);
private final Object proxy2 = new DummyProxy(id2);
private final Object proxy3 = new DummyProxy(id3);
/** Test. */
@SuppressWarnings({ "rawtypes", "unchecked" })
@Test
public void testHandlingCallbackObjects() {
Object o = new Object();
assertEquals(o, CallbackUtils.handleCallbackObject(o, instanceIdRemote, callbackService));
assertEquals(proxy11, CallbackUtils.handleCallbackObject(object1, instanceIdRemote, callbackService));
assertEquals(proxy2, CallbackUtils.handleCallbackObject(object2, instanceIdRemote, callbackService));
List objects = new ArrayList<Serializable>();
List object = new ArrayList<Serializable>();
object.add(o);
object.add(object1);
object.add(object2);
objects.add(object);
List newObjects = (List) CallbackUtils.handleCallbackObject(objects, instanceIdRemote, callbackService);
assertEquals(1, newObjects.size());
List newObject = (List) newObjects.get(0);
assertEquals(3, newObject.size());
assertTrue(newObject.contains(o));
assertTrue(newObject.contains(proxy11));
assertTrue(newObject.contains(proxy2));
}
/** Test. */
@SuppressWarnings({ "rawtypes", "unchecked" })
@Test
public void testHandlingCallbackProxyObjects() {
Object o = new Object();
assertEquals(o, CallbackUtils.handleCallbackProxy(o, callbackService, callbackProxyService));
assertEquals(proxy12, CallbackUtils.handleCallbackProxy(proxy11, callbackService, callbackProxyService));
assertEquals(object2, CallbackUtils.handleCallbackProxy(proxy2, callbackService, callbackProxyService));
assertEquals(proxy3, CallbackUtils.handleCallbackProxy(proxy3, callbackService, callbackProxyService));
List proxies = new ArrayList<Serializable>();
List proxy = new ArrayList<Serializable>();
proxy.add(o);
proxy.add(proxy11);
proxy.add(proxy2);
proxy.add(proxy3);
proxies.add(proxy);
List newProxies = (List) CallbackUtils.handleCallbackProxy(proxies, callbackService, callbackProxyService);
assertEquals(1, newProxies.size());
List newProxy = (List) newProxies.get(0);
assertEquals(4, newProxy.size());
assertTrue(newProxy.contains(o));
assertTrue(newProxy.contains(object2));
assertTrue(newProxy.contains(proxy12));
assertTrue(newProxy.contains(proxy3));
}
/**
* Test {@link CallbackService} implementation.
*
* @author Doreen Seider
*/
private class DummyCallbackService implements CallbackService {
@Override
public String addCallbackObject(Object callBackObject, InstanceNodeSessionId nodeId) {
if (callBackObject == object1 && nodeId.equals(instanceIdRemote)) {
return id1;
}
return null;
}
@Override
public Object callback(String objectIdentifier, String methodName, List<? extends Serializable> parameters)
throws RemoteOperationException {
return null;
}
@Override
public Object createCallbackProxy(CallbackObject callbackObject, String objectIdentifier, InstanceNodeSessionId proxyHome) {
if (callbackObject == object1 && objectIdentifier == id1 && proxyHome.equals(instanceIdRemote)) {
return proxy11;
} else if (callbackObject == object2 && objectIdentifier == id2 && proxyHome.equals(instanceIdRemote)) {
return proxy2;
}
return null;
}
@Override
public Object getCallbackObject(String objectIdentifier) {
if (objectIdentifier == id2) {
return object2;
}
return null;
}
@Override
public void setTTL(String objectIdentifier, Long ttl) {
}
@Override
public String getCallbackObjectIdentifier(Object callbackObject) {
if (callbackObject == object2) {
return id2;
}
return null;
}
}
/**
* Test {@link CallbackProxyService} implementation.
*
* @author Doreen Seider
*/
private class DummyCallbackProxyService implements CallbackProxyService {
@Override
public void addCallbackProxy(CallbackProxy callBackProxy) {
}
@Override
public Object getCallbackProxy(String objectIdentifier) {
if (objectIdentifier == id1) {
return proxy12;
}
return null;
}
@Override
public void setTTL(String objectIdentifier, Long ttl) {
}
}
/**
* Test callback object.
*
* @author Doreen Seider
*/
private class DummyObject implements DummyInterface {
private static final long serialVersionUID = 1L;
@Override
public String method() {
return "method called";
}
@CallbackMethod
@Override
public void callbackMethod() {
throw new RuntimeException("callbackMethod called");
}
@Override
public Class<? extends Serializable> getInterface() {
return DummyInterface.class;
}
}
/**
* Test callback object.
*
* @author Doreen Seider
*/
private class DummyProxy implements DummyInterface, CallbackProxy {
private static final long serialVersionUID = 1L;
private String id;
DummyProxy(String id) {
this.id = id;
}
@Override
public String method() {
return "method called";
}
@CallbackMethod
@Override
public void callbackMethod() {
throw new RuntimeException("callbackMethod called");
}
@Override
public InstanceNodeSessionId getHomePlatform() {
return instanceIdLocal;
}
@Override
public String getObjectIdentifier() {
return id;
}
@Override
public Class<? extends Serializable> getInterface() {
return DummyInterface.class;
}
}
/**
* Test interface used for test callback object.
*
* @author Doreen Seider
*/
private interface DummyInterface extends CallbackObject {
String method();
void callbackMethod();
}
}