package org.jacorb.test.bugs.bugrtj634;
import static org.junit.Assert.assertEquals;
import java.util.Properties;
import org.jacorb.test.ComplexTimingServer;
import org.jacorb.test.ComplexTimingServerHelper;
import org.jacorb.test.harness.ClientServerSetup;
import org.jacorb.test.harness.ClientServerTestCase;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.omg.CORBA.ORB;
import org.omg.CORBA.Policy;
import org.omg.PortableServer.ImplicitActivationPolicyValue;
import org.omg.PortableServer.POA;
import org.omg.PortableServer.POAHelper;
public class RTJ634Test extends ClientServerTestCase
{
/**
* <code>server1</code> is the server1 reference.
*/
protected ComplexTimingServer server1;
protected static org.omg.CORBA.Object server2;
@Before
public void setUp() throws Exception
{
server1 = ComplexTimingServerHelper.narrow( setup.getServerObject() );
org.omg.CORBA.Object o = setup.getClientRootPOA().servant_to_reference (new TimingServerImpl (20));
server2 = ComplexTimingServerHelper.narrow (o);
}
@BeforeClass
public static void beforeClassSetUp() throws Exception
{
Properties client_props = new Properties();
Properties server_props = new Properties();
client_props.put("org.omg.PortableInterceptor.ORBInitializerClass.org.jacorb.test.bugs.bugrtj634.CInitializer",
"");
server_props.put("org.omg.PortableInterceptor.ORBInitializerClass.org.jacorb.test.bugs.bugrtj634.SInitializer",
"");
setup = new ClientServerSetup (RTJ634Test.class.getName(), "org.jacorb.test.bugs.bugrtj634.TimingServerImpl",
client_props,
server_props);
}
@Test
public void test634_1() throws Exception
{
try
{
int res = server1.operation(0, 0);
// first invocation should have been redirected to obj 2. SInterceptor
// counter will now be at 2.
assertEquals( 2 , res );
res = server1.operation(0, 0);
assertEquals( 1 , res ); // second invocation should have been redirected to obj 1;
// Try 2 - test we don't get BAD_OPERATION
res = server1.operation(0, 0);
// first invocation should have been redirected to obj 2. SInterceptor
// counter will now be at 4. CInterceptor Counter will now be 9
assertEquals( 2 , res ); // this invocation should have been redirected to obj 2;
res = server1.operation(0, 0);
assertEquals( 1 , res ); // this invocation should have been redirected to obj
// Try 3 - final call should redirect to local server2
res = server1.operation(0, 0);
assertEquals( 2 , res );
res = server1.operation(0, 0);
assertEquals (20, res);
// No forward request for this one...
res = server1.operation(0, 0);
assertEquals (20, res);
}
finally
{
server2._release ();
}
}
/**
* <code>main</code> is reimplemented here so that we can start
* the server with a child POA and use servant_to_id.
*
* @param args a <code>String[]</code> value
*/
public static void main (String[] args) throws Exception
{
//init ORB
ORB orb = ORB.init( args, null );
//init POA
POA rootPoa =
POAHelper.narrow( orb.resolve_initial_references( "RootPOA" ));
rootPoa.the_POAManager().activate();
// create POA
Policy policies[] = new Policy[2];
policies[0] = rootPoa.create_id_uniqueness_policy(
org.omg.PortableServer.IdUniquenessPolicyValue.MULTIPLE_ID);
policies[1] = rootPoa.create_implicit_activation_policy(
ImplicitActivationPolicyValue.IMPLICIT_ACTIVATION );
POA poa = rootPoa.create_POA
("childPOA1", rootPoa.the_POAManager(), policies);
poa.the_POAManager().activate();
TimingServerImpl servant = new TimingServerImpl (1);
// Get the id
byte []oid = poa.servant_to_id (servant);
byte[] obj_2_id = rootPoa.activate_object(new TimingServerImpl(2));
SInterceptor.OBJ_2 = rootPoa.id_to_reference(obj_2_id);
// create the object reference
org.omg.CORBA.Object obj = poa.id_to_reference (oid);
System.out.println ("SERVER IOR: " + orb.object_to_string(obj));
System.out.flush();
// wait for requests
orb.run();
}
}