package org.jacorb.test.bugs.bugjac660; import java.util.Properties; import org.jacorb.test.harness.ORBTestCase; import org.junit.Test; import org.omg.CORBA.Any; import org.omg.CORBA.INTERNAL; import org.omg.CORBA.ORB; import org.slf4j.Logger; public class BugJac660Test extends ORBTestCase { @Override protected void patchORBProperties(Properties props) throws Exception { props.setProperty("org.omg.PortableInterceptor.ORBInitializerClass.a", "org.jacorb.test.bugs.bugjac660.Initializer" ); } @Test public void testSlotsAndCurrent() throws Exception { ServerThread th = new ServerThread (orb); th.start(); Thread.sleep(1000); // create the object reference org.omg.CORBA.Object obj = rootPOA.servant_to_reference (new TestObjectImpl(orb)); TestObject to = TestObjectHelper.narrow (obj); org.omg.PortableInterceptor.Current current = (org.omg.PortableInterceptor.Current) orb.resolve_initial_references ("PICurrent"); Logger logger = ((org.jacorb.orb.ORB)orb).getConfiguration ().getLogger("org.jacorb.test"); Any any = orb.create_any(); any.insert_string ("This is a test AAA" ); current.set_slot (Initializer.slot_id, any); logger.debug ("[" + Thread.currentThread() + "] Client added any to PICurrent : " + any); to.foo(); logger.debug ("[" + Thread.currentThread() + "] Client end"); } } class ServerThread extends Thread { private ORB orb = null; public ServerThread(ORB orb) { this.orb = orb; } @Override public void run () { try { // wait for requests orb.run(); } catch (Exception e) { throw new INTERNAL (e.getMessage()); } } } class TestObjectImpl extends TestObjectPOA { public ORB orb; public Logger logger; public TestObjectImpl(ORB orb) { this.orb = orb; logger = ((org.jacorb.orb.ORB)orb).getConfiguration ().getLogger("org.jacorb.test"); } @Override public void foo() { try { org.omg.PortableInterceptor.Current current = (org.omg.PortableInterceptor.Current) orb.resolve_initial_references( "PICurrent" ); Any any = current.get_slot (Initializer.slot_id); String result = any.extract_string(); if (! result.equals ("This is a test AAA")) { throw new Exception ("Did not receive correct message : got <" + result + "> and expected <This is a test AAA>"); } logger.debug ("[" + Thread.currentThread() + "] Server extracted from PICurrent: >>" + result + "<<"); } catch( Exception e ) { throw new INTERNAL (e.getMessage()); } } }