package org.jacorb.test.orb.policies; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import org.jacorb.test.SyncScopeServer; import org.jacorb.test.SyncScopeServerHelper; import org.jacorb.test.harness.ClientServerSetup; import org.jacorb.test.harness.ClientServerTestCase; import org.jacorb.test.harness.IMRExcludedClientServerCategory; import org.junit.After; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.junit.experimental.categories.Category; import org.omg.CORBA.Policy; import org.omg.CORBA.PolicyError; import org.omg.CORBA.SetOverrideType; import org.omg.Messaging.SYNC_NONE; import org.omg.Messaging.SYNC_SCOPE_POLICY_TYPE; import org.omg.Messaging.SYNC_WITH_SERVER; import org.omg.Messaging.SYNC_WITH_TARGET; import org.omg.Messaging.SYNC_WITH_TRANSPORT; /** * Tests for SyncScopePolicy. * * @author Andre Spiegel <spiegel@gnu.org> */ @Category(IMRExcludedClientServerCategory.class) public class SyncScopeTest extends ClientServerTestCase { private static final int TIME = 300; private SyncScopeServer server; @BeforeClass public static void setUpBeforeClass() throws Exception { setup = new ClientServerSetup (SyncScopeServerImpl.class.getName()); } @Before public void setUp() throws Exception { server = SyncScopeServerHelper.narrow (setup.getClientOrb().string_to_object(setup.getServerIOR())); } @After public void tearDown() throws Exception { server._release(); server = null; } @Test public void test_warm_up() { server.operation (50); server.oneway_op (50); } @Test public void test_sync_none() throws Exception { server = setSyncScope (server, SYNC_NONE.value); int beforeCount = server.get_oneway_count(); long start = System.currentTimeMillis(); server.oneway_op (TIME); long time = System.currentTimeMillis() - start; assertTrue ("return too late", time < TIME); verifyOnewayWasReceived(beforeCount + 1); } @Test public void test_sync_with_transport() throws Exception { int beforeCount = server.get_oneway_count(); server = setSyncScope (server, SYNC_WITH_TRANSPORT.value); long start = System.currentTimeMillis(); server.oneway_op (TIME); long time = System.currentTimeMillis() - start; assertTrue ("return too late", time < TIME); verifyOnewayWasReceived(beforeCount + 1); } @Test public void test_sync_with_server() throws Exception { int beforeCount = server.get_oneway_count(); server = setSyncScope (server, SYNC_WITH_SERVER.value); long start = System.currentTimeMillis(); server.oneway_op (TIME); long time = System.currentTimeMillis() - start; assertTrue ("return too late", time < TIME); verifyOnewayWasReceived(beforeCount + 1); } @Test public void test_sync_with_target() throws Exception { int beforeCount = server.get_oneway_count(); server = setSyncScope (server, SYNC_WITH_TARGET.value); long start = System.currentTimeMillis(); server.oneway_op (TIME); long time = System.currentTimeMillis() - start; assertTrue ("return too early", time >= TIME); verifyOnewayWasReceived(beforeCount + 1); } private SyncScopeServer setSyncScope (SyncScopeServer server, short syncScope) { org.omg.CORBA.Any a = setup.getClientOrb().create_any(); a.insert_short (syncScope); try { Policy policy = setup.getClientOrb().create_policy(SYNC_SCOPE_POLICY_TYPE.value, a); org.omg.CORBA.Object r = server._set_policy_override (new Policy[]{ policy }, SetOverrideType.ADD_OVERRIDE); return SyncScopeServerHelper.narrow (r); } catch (PolicyError e) { throw new RuntimeException ("policy error: " + e); } } private void verifyOnewayWasReceived(int expected) throws Exception { final long waitUntil = System.currentTimeMillis() + 10000; while( (server.get_oneway_count() != expected) && (System.currentTimeMillis() < waitUntil) ) { Thread.sleep(1000); } assertEquals(expected, server.get_oneway_count()); } }