package org.mockserver.maven; import org.apache.maven.plugin.MojoExecutionException; import org.junit.Before; import org.junit.Test; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockserver.mockserver.MockServer; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.*; import static org.mockito.MockitoAnnotations.initMocks; /** * @author jamesdbloom */ public class MockServerRunAndWaitMojoTest { @Mock private SettableFuture<Object> objectSettableFuture; @Mock private InstanceHolder mockEmbeddedJettyHolder; @Mock private MockServer mockServerRunner; @InjectMocks private MockServerRunAndWaitMojo mockServerRunAndWaitMojo = new MockServerRunAndWaitMojo(); @Before public void setupMocks() { initMocks(this); MockServerAbstractMojo.embeddedJettyHolder = mockEmbeddedJettyHolder; } @Test public void shouldRunMockServerAndWaitIndefinitely() throws MojoExecutionException, ExecutionException, InterruptedException { // given mockServerRunAndWaitMojo.serverPort = 1; mockServerRunAndWaitMojo.proxyPort = 3; mockServerRunAndWaitMojo.timeout = 0; mockServerRunAndWaitMojo.initializationClass = "org.mockserver.maven.ExampleInitializationClass"; // when mockServerRunAndWaitMojo.execute(); // then verify(mockEmbeddedJettyHolder).start(eq(1), eq(3), any(ExampleInitializationClass.class)); verify(objectSettableFuture).get(); } @Test public void shouldRunMockServerAndWaitIndefinitelyAndHandleInterruptedException() throws MojoExecutionException, ExecutionException, InterruptedException { // given mockServerRunAndWaitMojo.serverPort = 1; mockServerRunAndWaitMojo.proxyPort = 3; mockServerRunAndWaitMojo.timeout = 0; doThrow(new InterruptedException("TEST EXCEPTION")).when(objectSettableFuture).get(); // when mockServerRunAndWaitMojo.execute(); } @Test public void shouldRunMockServerAndWaitForFixedPeriod() throws MojoExecutionException, ExecutionException, InterruptedException, TimeoutException { // given mockServerRunAndWaitMojo.serverPort = 1; mockServerRunAndWaitMojo.proxyPort = 3; mockServerRunAndWaitMojo.timeout = 2; mockServerRunAndWaitMojo.initializationClass = "org.mockserver.maven.ExampleInitializationClass"; // when mockServerRunAndWaitMojo.execute(); // then verify(mockEmbeddedJettyHolder).start(eq(1), eq(3), any(ExampleInitializationClass.class)); verify(objectSettableFuture).get(2, TimeUnit.SECONDS); } @Test public void shouldRunMockServerAndWaitForFixedPeriodAndHandleInterruptedException() throws MojoExecutionException, ExecutionException, InterruptedException, TimeoutException { // given mockServerRunAndWaitMojo.serverPort = 1; mockServerRunAndWaitMojo.proxyPort = 3; mockServerRunAndWaitMojo.timeout = 2; when(objectSettableFuture.get(2, TimeUnit.SECONDS)).thenThrow(new InterruptedException("TEST EXCEPTION")); // when mockServerRunAndWaitMojo.execute(); } @Test public void shouldSkipStoppingMockServer() throws MojoExecutionException { // given mockServerRunAndWaitMojo.skip = true; // when mockServerRunAndWaitMojo.execute(); // then verifyNoMoreInteractions(mockEmbeddedJettyHolder); } }