package org.jacorb.test.orb.connection;
import static org.junit.Assert.assertEquals;
import java.util.Properties;
import org.jacorb.test.BiDirServer;
import org.jacorb.test.BiDirServerHelper;
import org.jacorb.test.ClientCallback;
import org.jacorb.test.ClientCallbackHelper;
import org.jacorb.test.ClientCallbackPOA;
import org.jacorb.test.harness.ClientServerTestCase;
import org.jacorb.test.harness.FixedPortClientServerTestCase;
import org.jacorb.test.harness.TestUtils;
import org.junit.Assume;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
/**
* @author Andre Spiegel
*/
public class BiDirTest extends FixedPortClientServerTestCase
{
private BiDirServer server = null;
private final Object callbackLock = new Object();
private boolean callbackReceived = false;
private String callbackMessage = null;
@Before
public void setUp() throws Exception
{
server = BiDirServerHelper.narrow (setup.getServerObject());
}
private class ClientCallbackImpl extends ClientCallbackPOA
{
@Override
public void hello (String message)
{
synchronized (callbackLock)
{
callbackReceived = true;
callbackMessage = message;
callbackLock.notifyAll();
}
}
}
private String waitForCallback (int timeout)
{
synchronized (callbackLock)
{
if (callbackReceived)
return callbackMessage;
else
{
try
{
callbackLock.wait (timeout);
}
catch (InterruptedException ex)
{
// ignore
}
if (callbackReceived)
return callbackMessage;
else
throw new org.omg.CORBA.TIMEOUT
("no callback received within timeout");
}
}
}
@BeforeClass
public static void beforeClassSetUp() throws Exception
{
// this tests counts transports which are disrupted by
// security initialisation.
Assume.assumeFalse(TestUtils.isSSLEnabled);
Properties properties = new Properties();
properties.setProperty
("org.omg.PortableInterceptor.ORBInitializerClass.bidir_init",
"org.jacorb.orb.giop.BiDirConnectionInitializer" );
setup = new BiDirSetup (properties, properties);
}
@Test
public void test_callback() throws Exception
{
ClientCallback c = ClientCallbackHelper.narrow (((BiDirSetup)setup).
getBiDirPOA().servant_to_reference(new ClientCallbackImpl()));
server.register_callback (c);
server.callback_hello ("This is a test");
String result = waitForCallback (10000);
int n = server.get_open_client_transports();
assertEquals ("This is a test", result);
// if this was bidirectional, then the server must not have
// any open client transports now
assertEquals ("Server has too many client transports", 0, n);
setup.tearDown();
Properties clientProperties = new Properties();
clientProperties.setProperty
("org.omg.PortableInterceptor.ORBInitializerClass.bidir_init",
"org.jacorb.orb.giop.BiDirConnectionInitializer" );
String prop = "127.0.0.1:" + getNextAvailablePort() + "," +
"127.0.0.1:" + getNextAvailablePort() + "," +
"127.0.0.1:" + getNextAvailablePort();
clientProperties.setProperty("jacorb.iiop.alternate_addresses", prop);
Properties serverProperties = new Properties();
serverProperties.setProperty
("org.omg.PortableInterceptor.ORBInitializerClass.bidir_init",
"org.jacorb.orb.giop.BiDirConnectionInitializer" );
setup = new BiDirSetup(clientProperties, serverProperties);
setUp();
c = ClientCallbackHelper.narrow (((BiDirSetup)setup).
getBiDirPOA().servant_to_reference(new ClientCallbackImpl()));
callbackReceived = false;
callbackMessage = "";
server.register_callback (c);
server.callback_hello ("This is multi-alternate test");
result = waitForCallback (10000);
n = server.get_open_client_transports();
assertEquals ("This is multi-alternate test", result);
// if this was bidirectional, then the server must not have
// any open client transports now
assertEquals ("Server has too many client transports (2)", 0, n);
}
}