SingleServiceIntegrationTest.java revision b7a02b02d81c830d148355c90bc309bcd66fb592
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; 1065888c01862049c0f7744cf4dfac371ce780fb24dhanjiimport java.util.concurrent.TimeUnit; 1165888c01862049c0f7744cf4dfac371ce780fb24dhanjiimport java.util.concurrent.TimeoutException; 1265888c01862049c0f7744cf4dfac371ce780fb24dhanjiimport java.util.concurrent.atomic.AtomicInteger; 1365888c01862049c0f7744cf4dfac371ce780fb24dhanji 1465888c01862049c0f7744cf4dfac371ce780fb24dhanji/** 1565888c01862049c0f7744cf4dfac371ce780fb24dhanji * Tests using Async Service. 1665888c01862049c0f7744cf4dfac371ce780fb24dhanji */ 17b7a02b02d81c830d148355c90bc309bcd66fb592sberlin 1865888c01862049c0f7744cf4dfac371ce780fb24dhanjipublic class SingleServiceIntegrationTest extends TestCase { 19b7a02b02d81c830d148355c90bc309bcd66fb592sberlin 2065888c01862049c0f7744cf4dfac371ce780fb24dhanji public final void testAsyncServiceLifecycle() throws InterruptedException { 2165888c01862049c0f7744cf4dfac371ce780fb24dhanji ExecutorService executor = Executors.newSingleThreadExecutor(); 2265888c01862049c0f7744cf4dfac371ce780fb24dhanji 232ee4f18ea8cd06d0adf45e0c7c771a7806c8195adhanji final CountDownLatch startLatch = new CountDownLatch(1); 242ee4f18ea8cd06d0adf45e0c7c771a7806c8195adhanji final CountDownLatch stopLatch = new CountDownLatch(1); 2565888c01862049c0f7744cf4dfac371ce780fb24dhanji AsyncService service = new AsyncService(executor) { 2665888c01862049c0f7744cf4dfac371ce780fb24dhanji @Override protected void onStart() { 272ee4f18ea8cd06d0adf45e0c7c771a7806c8195adhanji assertEquals(1, startLatch.getCount()); 282ee4f18ea8cd06d0adf45e0c7c771a7806c8195adhanji assertEquals(1, stopLatch.getCount()); 2965888c01862049c0f7744cf4dfac371ce780fb24dhanji 302ee4f18ea8cd06d0adf45e0c7c771a7806c8195adhanji startLatch.countDown(); 3165888c01862049c0f7744cf4dfac371ce780fb24dhanji } 3265888c01862049c0f7744cf4dfac371ce780fb24dhanji 3365888c01862049c0f7744cf4dfac371ce780fb24dhanji @Override protected void onStop() { 342ee4f18ea8cd06d0adf45e0c7c771a7806c8195adhanji assertEquals(0, startLatch.getCount()); 352ee4f18ea8cd06d0adf45e0c7c771a7806c8195adhanji assertEquals(1, stopLatch.getCount()); 3665888c01862049c0f7744cf4dfac371ce780fb24dhanji 372ee4f18ea8cd06d0adf45e0c7c771a7806c8195adhanji stopLatch.countDown(); 3865888c01862049c0f7744cf4dfac371ce780fb24dhanji } 3965888c01862049c0f7744cf4dfac371ce780fb24dhanji }; 4065888c01862049c0f7744cf4dfac371ce780fb24dhanji 4165888c01862049c0f7744cf4dfac371ce780fb24dhanji service.start(); 422ee4f18ea8cd06d0adf45e0c7c771a7806c8195adhanji // This should not pass! 432ee4f18ea8cd06d0adf45e0c7c771a7806c8195adhanji assertTrue(startLatch.await(2, TimeUnit.SECONDS)); 4465888c01862049c0f7744cf4dfac371ce780fb24dhanji 4565888c01862049c0f7744cf4dfac371ce780fb24dhanji service.stop(); 462ee4f18ea8cd06d0adf45e0c7c771a7806c8195adhanji assertTrue(stopLatch.await(2, TimeUnit.SECONDS)); 4765888c01862049c0f7744cf4dfac371ce780fb24dhanji 4865888c01862049c0f7744cf4dfac371ce780fb24dhanji executor.shutdown(); 492ee4f18ea8cd06d0adf45e0c7c771a7806c8195adhanji assertEquals(0, startLatch.getCount()); 502ee4f18ea8cd06d0adf45e0c7c771a7806c8195adhanji assertEquals(0, stopLatch.getCount()); 5165888c01862049c0f7744cf4dfac371ce780fb24dhanji } 5265888c01862049c0f7744cf4dfac371ce780fb24dhanji 5365888c01862049c0f7744cf4dfac371ce780fb24dhanji public final void testAsyncServiceBlockingLifecycle() 5465888c01862049c0f7744cf4dfac371ce780fb24dhanji throws InterruptedException, ExecutionException, TimeoutException { 5565888c01862049c0f7744cf4dfac371ce780fb24dhanji ExecutorService executor = Executors.newSingleThreadExecutor(); 5665888c01862049c0f7744cf4dfac371ce780fb24dhanji 5765888c01862049c0f7744cf4dfac371ce780fb24dhanji final AtomicInteger integer = new AtomicInteger(2); 5865888c01862049c0f7744cf4dfac371ce780fb24dhanji AsyncService service = new AsyncService(executor) { 5965888c01862049c0f7744cf4dfac371ce780fb24dhanji @Override protected void onStart() { 6065888c01862049c0f7744cf4dfac371ce780fb24dhanji assertEquals(2, integer.getAndDecrement()); 6165888c01862049c0f7744cf4dfac371ce780fb24dhanji } 6265888c01862049c0f7744cf4dfac371ce780fb24dhanji 6365888c01862049c0f7744cf4dfac371ce780fb24dhanji @Override protected void onStop() { 6465888c01862049c0f7744cf4dfac371ce780fb24dhanji assertEquals(1, integer.getAndDecrement()); 6565888c01862049c0f7744cf4dfac371ce780fb24dhanji } 6665888c01862049c0f7744cf4dfac371ce780fb24dhanji }; 6765888c01862049c0f7744cf4dfac371ce780fb24dhanji 6865888c01862049c0f7744cf4dfac371ce780fb24dhanji service.start().get(2, TimeUnit.SECONDS); 6965888c01862049c0f7744cf4dfac371ce780fb24dhanji service.stop().get(2, TimeUnit.SECONDS); 7065888c01862049c0f7744cf4dfac371ce780fb24dhanji 7165888c01862049c0f7744cf4dfac371ce780fb24dhanji executor.shutdown(); 7265888c01862049c0f7744cf4dfac371ce780fb24dhanji assertEquals(0, integer.get()); 7365888c01862049c0f7744cf4dfac371ce780fb24dhanji } 7465888c01862049c0f7744cf4dfac371ce780fb24dhanji} 75