package org.jacorb.test.bugs.bugjac670;
import static org.junit.Assert.fail;
import java.util.Properties;
import org.jacorb.test.harness.ClientServerSetup;
import org.jacorb.test.harness.FixedPortClientServerTestCase;
import org.jacorb.test.harness.ServerSetup;
import org.jacorb.test.harness.TestUtils;
import org.junit.After;
import org.junit.Assume;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.omg.CORBA.Policy;
import org.omg.CORBA.PolicyError;
import org.omg.CORBA.SetOverrideType;
import org.omg.Messaging.RELATIVE_RT_TIMEOUT_POLICY_TYPE;
/**
* This tests the RealtiveRoundtripTimeoutPolicy where a
* ForwardRequest is thrown and the forward server subsequently
* fails with subsequent requests being directed back to the
* original server. One test has a long timeout and completes
* successfully, the other has a shorter timeout and the
* failover times out.
*/
public class BugJac670Test extends FixedPortClientServerTestCase
{
private static String port = Integer.toString(getNextAvailablePort());
private GreetingService server = null;
private ServerSetup serverSetUp;
@Before
public void setUp() throws Exception
{
server = GreetingServiceHelper.narrow
(setup.getClientOrb().resolve_initial_references ("greeting"));
Properties serverprops = new java.util.Properties();
serverprops.setProperty( "ORBInitRef.balancer", "corbaloc::localhost:" + port + "/GSLBService");
serverprops.setProperty ("jacorb.test.timeout.server", Long.toString(15000));
serverSetUp = new ServerSetup ("org.jacorb.test.bugs.bugjac670.GreetingServiceServer",
"GreetingServiceImpl",
serverprops);
serverSetUp.setUp();
}
@After
public void tearDown() throws Exception
{
server._release();
serverSetUp.tearDown();
}
@BeforeClass
public static void beforeClassSetUp() throws Exception
{
Assume.assumeFalse(TestUtils.isSSLEnabled);
Properties clientprops = new java.util.Properties();
clientprops.setProperty( "ORBInitRef.greeting",
"corbaloc::localhost:" + port + "/GSLBService");
Properties serverprops = new java.util.Properties();
serverprops.setProperty( "org.omg.PortableInterceptor.ORBInitializerClass."
+ org.jacorb.test.bugs.bugjac670.GSLoadBalancerInitializer.class.getName(), "" );
serverprops.setProperty("org.omg.CORBA.ORBClass", "org.jacorb.orb.ORB");
serverprops.setProperty("org.omg.CORBA.ORBSingletonClass", "org.jacorb.orb.ORBSingleton");
serverprops.setProperty ("jacorb.test.timeout.server", Long.toString(15000));
serverprops.setProperty( "OAPort", port );
setup = new ClientServerSetup
(
"org.jacorb.test.bugs.bugjac670.GSLoadBalancerServer",
"GSLoadBalancerImpl",
clientprops,
serverprops
);
}
/**
* Sets a RelativeRoundtripTimeout which will
* be met by the invocation.
*/
@Test
public void test_relative_roundtrip_sync_ok()
throws Exception
{
server = clearPolicies (server);
server = setRelativeRoundtripTimeout (server, TestUtils.isWindows () ? 30000 : 12000);
try
{
int i = 0;
while (i < 10)
{
server.greeting ("Hello");
try
{
Thread.sleep (3000);
}
catch (InterruptedException ie)
{
}
i++;
if (i == 5)
{
serverSetUp.tearDown ();
Thread.sleep (5000);
}
}
}
catch (org.omg.CORBA.TIMEOUT t)
{
fail ("Unexpected TIMEOUT");
}
}
@Test
public void test_relative_roundtrip_sync_expired()
throws Exception
{
server = clearPolicies (server);
server = setRelativeRoundtripTimeout (server, 2000);
try
{
int i = 0;
while (i < 10)
{
server.greeting ("Hello");
try
{
Thread.sleep (3000);
}
catch (InterruptedException ie)
{
}
i++;
if (i == 5)
{
serverSetUp.tearDown ();
}
}
fail ("TIMEOUT expected");
}
catch (org.omg.CORBA.TIMEOUT t)
{
// OK
}
}
private GreetingService clearPolicies (GreetingService server)
{
org.omg.CORBA.Object r = server._set_policy_override (new Policy[]{},
SetOverrideType.SET_OVERRIDE);
return GreetingServiceHelper.narrow (r);
}
private GreetingService setRelativeRoundtripTimeout (GreetingService server,
long millis)
{
org.omg.CORBA.ORB orb = setup.getClientOrb();
org.omg.CORBA.Any any = orb.create_any();
any.insert_ulonglong (millis * 10000);
try
{
Policy policy =
orb.create_policy (RELATIVE_RT_TIMEOUT_POLICY_TYPE.value, any);
org.omg.CORBA.Object r = server._set_policy_override (new Policy[]{ policy },
SetOverrideType.ADD_OVERRIDE);
return GreetingServiceHelper.narrow (r);
}
catch (PolicyError e)
{
throw new RuntimeException ("policy error: " + e);
}
}
}