public void testListenerDoesntDeadlockOnStopAndWaitFromTerminated() throws Exception { final NoOpThreadedService service = new NoOpThreadedService(); service.addListener( new Listener() { @Override public void starting() {} @Override public void running() {} @Override public void stopping(State from) {} @Override public void terminated(State from) { service.stopAndWait(); } @Override public void failed(State from, Throwable failure) {} }, MoreExecutors.sameThreadExecutor()); service.startAndWait(); Thread thread = new Thread() { @Override public void run() { service.stopAndWait(); } }; thread.start(); thread.join(100); assertFalse(thread + " is deadlocked", thread.isAlive()); }
public void testListenerDoesntDeadlockOnStartAndWaitFromRunning() throws Exception { final NoOpThreadedService service = new NoOpThreadedService(); service.addListener( new Listener() { @Override public void starting() {} @Override public void running() { service.startAndWait(); } @Override public void stopping(State from) {} @Override public void terminated(State from) {} @Override public void failed(State from, Throwable failure) {} }, MoreExecutors.sameThreadExecutor()); service.start().get(10, TimeUnit.MILLISECONDS); service.stop(); }