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