package org.jacorb.test.poa; import static org.junit.Assert.fail; import java.util.Properties; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import org.jacorb.test.harness.ClientServerSetup; import org.jacorb.test.harness.ClientServerTestCase; import org.jacorb.test.harness.TestUtils; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; public class POAThreadingTest extends ClientServerTestCase { private MyServer server; @Before public void setUp() throws Exception { server = MyServerHelper.narrow(setup.getServerObject()); } @Test public void testRequestThreading() throws Exception { Thread thread1 = new Thread("Block1") { public void run() { try { server.block(); } catch (Exception e) { } } }; Thread thread2 = new Thread("Block2") { public void run() { try { server.block(); } catch (Exception e) { } } }; thread1.start(); thread2.start(); Thread.sleep(1000); Callable<Boolean> myTestCaller = new TestCaller (server); FutureTask<Boolean> task = new FutureTask<Boolean>(myTestCaller); Thread t3 = new Thread (task); t3.start(); try { task.get(10000, TimeUnit.MILLISECONDS); fail ("Expected a timeout"); } catch (TimeoutException e) { fail ("Did not get a result from the testcall in the expected time."); } catch (ExecutionException e) { if (e.getCause() instanceof org.omg.CORBA.TIMEOUT) { TestUtils.getLogger().debug ("Got a timeout (" + e.getCause() + ")"); // pass } else { fail ("Unexpected exception " + e.getCause()); } } thread1.join(); thread2.join(); } @BeforeClass public static void beforeClassSetUp() throws Exception { Properties serverProps = new Properties(); serverProps.setProperty("jacorb.poa.thread_pool_min", "1"); serverProps.setProperty("jacorb.poa.thread_pool_max", "2"); serverProps.setProperty("jacorb.poa.threadtimeout", "5000"); setup = new ClientServerSetup( ServerImpl.class.getName(), null, serverProps); } public class TestCaller implements Callable<Boolean> { private MyServer server; TestCaller (MyServer server) { this.server = server; } public Boolean call() throws Exception { return server.testCall(); } } }