package com.zendesk.maxwell.util; import org.junit.Test; import java.util.concurrent.TimeoutException; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.core.IsEqual.equalTo; public class StoppableTaskStateTest { @Test public void testStateTransition() { StoppableTaskState state = new StoppableTaskState("task"); assertThat(state.getState(), equalTo(RunState.RUNNING)); assertThat(state.isRunning(), equalTo(true)); state.requestStop(); assertThat(state.getState(), equalTo(RunState.REQUEST_STOP)); assertThat(state.isRunning(), equalTo(false)); state.stopped(); assertThat(state.getState(), equalTo(RunState.STOPPED)); assertThat(state.isRunning(), equalTo(false)); } @Test public void requestStopIsIgnoredIfAlreadyStopped() { StoppableTaskState state = new StoppableTaskState("task"); state.stopped(); state.requestStop(); assertThat(state.getState(), equalTo(RunState.STOPPED)); } @Test public void awaitSucceedsWhenAlreadyStopped() throws TimeoutException { StoppableTaskState state = new StoppableTaskState("task"); state.stopped(); state.awaitStop(null, 0L); } @Test public void awaitThrowsWhenNotStopped() { StoppableTaskState state = new StoppableTaskState("task"); TimeoutException e = null; try { state.awaitStop(null, 0L); } catch (TimeoutException _e) { e = _e; } assertThat(e, notNullValue()); assertThat(state.getState(), equalTo(RunState.RUNNING)); } }