165888c01862049c0f7744cf4dfac371ce780fb24dhanjipackage com.google.inject.service; 265888c01862049c0f7744cf4dfac371ce780fb24dhanji 3b7a02b02d81c830d148355c90bc309bcd66fb592sberlin 4b7a02b02d81c830d148355c90bc309bcd66fb592sberlinimport junit.framework.TestCase; 5b7a02b02d81c830d148355c90bc309bcd66fb592sberlin 665888c01862049c0f7744cf4dfac371ce780fb24dhanjiimport java.util.concurrent.CountDownLatch; 765888c01862049c0f7744cf4dfac371ce780fb24dhanjiimport java.util.concurrent.ExecutionException; 865888c01862049c0f7744cf4dfac371ce780fb24dhanjiimport java.util.concurrent.ExecutorService; 965888c01862049c0f7744cf4dfac371ce780fb24dhanjiimport java.util.concurrent.Executors; 10b405e0417151915b98c3d2033adb9770336a7bbbguice.mirrorbot@gmail.comimport java.util.concurrent.Future; 1165888c01862049c0f7744cf4dfac371ce780fb24dhanjiimport java.util.concurrent.TimeUnit; 1265888c01862049c0f7744cf4dfac371ce780fb24dhanjiimport java.util.concurrent.TimeoutException; 1365888c01862049c0f7744cf4dfac371ce780fb24dhanjiimport java.util.concurrent.atomic.AtomicInteger; 1465888c01862049c0f7744cf4dfac371ce780fb24dhanji 1565888c01862049c0f7744cf4dfac371ce780fb24dhanji/** 1665888c01862049c0f7744cf4dfac371ce780fb24dhanji * Tests using Async Service. 1765888c01862049c0f7744cf4dfac371ce780fb24dhanji */ 18b7a02b02d81c830d148355c90bc309bcd66fb592sberlin 1965888c01862049c0f7744cf4dfac371ce780fb24dhanjipublic class SingleServiceIntegrationTest extends TestCase { 20b7a02b02d81c830d148355c90bc309bcd66fb592sberlin 21b405e0417151915b98c3d2033adb9770336a7bbbguice.mirrorbot@gmail.com public final void testAsyncServiceLifecycle() throws Exception { 2265888c01862049c0f7744cf4dfac371ce780fb24dhanji ExecutorService executor = Executors.newSingleThreadExecutor(); 2365888c01862049c0f7744cf4dfac371ce780fb24dhanji 242ee4f18ea8cd06d0adf45e0c7c771a7806c8195adhanji final CountDownLatch startLatch = new CountDownLatch(1); 252ee4f18ea8cd06d0adf45e0c7c771a7806c8195adhanji final CountDownLatch stopLatch = new CountDownLatch(1); 2665888c01862049c0f7744cf4dfac371ce780fb24dhanji AsyncService service = new AsyncService(executor) { 2765888c01862049c0f7744cf4dfac371ce780fb24dhanji @Override protected void onStart() { 282ee4f18ea8cd06d0adf45e0c7c771a7806c8195adhanji assertEquals(1, startLatch.getCount()); 292ee4f18ea8cd06d0adf45e0c7c771a7806c8195adhanji assertEquals(1, stopLatch.getCount()); 3065888c01862049c0f7744cf4dfac371ce780fb24dhanji 312ee4f18ea8cd06d0adf45e0c7c771a7806c8195adhanji startLatch.countDown(); 3265888c01862049c0f7744cf4dfac371ce780fb24dhanji } 3365888c01862049c0f7744cf4dfac371ce780fb24dhanji 3465888c01862049c0f7744cf4dfac371ce780fb24dhanji @Override protected void onStop() { 352ee4f18ea8cd06d0adf45e0c7c771a7806c8195adhanji assertEquals(0, startLatch.getCount()); 362ee4f18ea8cd06d0adf45e0c7c771a7806c8195adhanji assertEquals(1, stopLatch.getCount()); 3765888c01862049c0f7744cf4dfac371ce780fb24dhanji 382ee4f18ea8cd06d0adf45e0c7c771a7806c8195adhanji stopLatch.countDown(); 3965888c01862049c0f7744cf4dfac371ce780fb24dhanji } 4065888c01862049c0f7744cf4dfac371ce780fb24dhanji }; 4165888c01862049c0f7744cf4dfac371ce780fb24dhanji 42b405e0417151915b98c3d2033adb9770336a7bbbguice.mirrorbot@gmail.com Future<?> future = service.start(); 43b405e0417151915b98c3d2033adb9770336a7bbbguice.mirrorbot@gmail.com // This should not pass! TODO(sameb): Why? Looks like it should to me 442ee4f18ea8cd06d0adf45e0c7c771a7806c8195adhanji assertTrue(startLatch.await(2, TimeUnit.SECONDS)); 45b405e0417151915b98c3d2033adb9770336a7bbbguice.mirrorbot@gmail.com // onStart() is called before the state is set to STARTED, so we need 46b405e0417151915b98c3d2033adb9770336a7bbbguice.mirrorbot@gmail.com // to wait until the Future finishes to guarantee it really was started. 47b405e0417151915b98c3d2033adb9770336a7bbbguice.mirrorbot@gmail.com // This still manages to test what we want because the startLatch check 48b405e0417151915b98c3d2033adb9770336a7bbbguice.mirrorbot@gmail.com // is before this. 49b405e0417151915b98c3d2033adb9770336a7bbbguice.mirrorbot@gmail.com future.get(1, TimeUnit.SECONDS); 5065888c01862049c0f7744cf4dfac371ce780fb24dhanji 5165888c01862049c0f7744cf4dfac371ce780fb24dhanji service.stop(); 522ee4f18ea8cd06d0adf45e0c7c771a7806c8195adhanji assertTrue(stopLatch.await(2, TimeUnit.SECONDS)); 5365888c01862049c0f7744cf4dfac371ce780fb24dhanji 5465888c01862049c0f7744cf4dfac371ce780fb24dhanji executor.shutdown(); 552ee4f18ea8cd06d0adf45e0c7c771a7806c8195adhanji assertEquals(0, startLatch.getCount()); 562ee4f18ea8cd06d0adf45e0c7c771a7806c8195adhanji assertEquals(0, stopLatch.getCount()); 5765888c01862049c0f7744cf4dfac371ce780fb24dhanji } 5865888c01862049c0f7744cf4dfac371ce780fb24dhanji 5965888c01862049c0f7744cf4dfac371ce780fb24dhanji public final void testAsyncServiceBlockingLifecycle() 6065888c01862049c0f7744cf4dfac371ce780fb24dhanji throws InterruptedException, ExecutionException, TimeoutException { 6165888c01862049c0f7744cf4dfac371ce780fb24dhanji ExecutorService executor = Executors.newSingleThreadExecutor(); 6265888c01862049c0f7744cf4dfac371ce780fb24dhanji 6365888c01862049c0f7744cf4dfac371ce780fb24dhanji final AtomicInteger integer = new AtomicInteger(2); 6465888c01862049c0f7744cf4dfac371ce780fb24dhanji AsyncService service = new AsyncService(executor) { 6565888c01862049c0f7744cf4dfac371ce780fb24dhanji @Override protected void onStart() { 6665888c01862049c0f7744cf4dfac371ce780fb24dhanji assertEquals(2, integer.getAndDecrement()); 6765888c01862049c0f7744cf4dfac371ce780fb24dhanji } 6865888c01862049c0f7744cf4dfac371ce780fb24dhanji 6965888c01862049c0f7744cf4dfac371ce780fb24dhanji @Override protected void onStop() { 7065888c01862049c0f7744cf4dfac371ce780fb24dhanji assertEquals(1, integer.getAndDecrement()); 7165888c01862049c0f7744cf4dfac371ce780fb24dhanji } 7265888c01862049c0f7744cf4dfac371ce780fb24dhanji }; 7365888c01862049c0f7744cf4dfac371ce780fb24dhanji 7465888c01862049c0f7744cf4dfac371ce780fb24dhanji service.start().get(2, TimeUnit.SECONDS); 7565888c01862049c0f7744cf4dfac371ce780fb24dhanji service.stop().get(2, TimeUnit.SECONDS); 7665888c01862049c0f7744cf4dfac371ce780fb24dhanji 7765888c01862049c0f7744cf4dfac371ce780fb24dhanji executor.shutdown(); 7865888c01862049c0f7744cf4dfac371ce780fb24dhanji assertEquals(0, integer.get()); 7965888c01862049c0f7744cf4dfac371ce780fb24dhanji } 8065888c01862049c0f7744cf4dfac371ce780fb24dhanji} 81