package com.aconex.scrutineer; import com.aconex.scrutineer.elasticsearch.ElasticSearchIdAndVersionStream; import com.aconex.scrutineer.jdbc.JdbcIdAndVersionStream; import com.google.common.base.Function; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import static org.mockito.Matchers.any; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; public class ScrutineerTest { @Mock private ScrutineerCommandLineOptions options; @Mock private ElasticSearchIdAndVersionStream elasticSearchIdAndVersionStream; @Mock private JdbcIdAndVersionStream jdbcIdAndVersionStream; @Mock private IdAndVersionStreamVerifier idAndVersionStreamVerifier; @Mock private IdAndVersionStreamVerifierListener standardListener, coincidentListener; @Before public void setup() { MockitoAnnotations.initMocks(this); } @Test public void testExecute() { Scrutineer scrutineer = spy(new Scrutineer(options)); doNothing().when(scrutineer).verify(); Scrutineer.execute(scrutineer); verify(scrutineer).verify(); verify(scrutineer).close(); } @Test(expected=RuntimeException.class) public void shouldRethrowExceptionInExecute() { Scrutineer scrutineer = spy(new Scrutineer(options)); doThrow(new Exception()).when(scrutineer).verify(); Scrutineer.execute(scrutineer); } @Test public void testVerify() { Scrutineer scrutineer = spy(new Scrutineer(options)); doReturn(elasticSearchIdAndVersionStream).when(scrutineer).createElasticSearchIdAndVersionStream(eq(options)); doReturn(jdbcIdAndVersionStream).when(scrutineer).createJdbcIdAndVersionStream(options); doNothing().when(scrutineer).verify(eq(elasticSearchIdAndVersionStream), eq(jdbcIdAndVersionStream), any(IdAndVersionStreamVerifier.class)); scrutineer.verify(); verify(scrutineer).verify(eq(elasticSearchIdAndVersionStream), eq(jdbcIdAndVersionStream), any(IdAndVersionStreamVerifier.class)); } @Test public void testShouldUseCoincidentFilteredStreamListenerIfOptionProvided() { options.ignoreTimestampsDuringRun = true; Scrutineer scrutineer = spy(new Scrutineer(options)); doReturn(coincidentListener).when(scrutineer).createCoincidentPrintStreamListener(any(Function.class)); doReturn(standardListener).when(scrutineer).createStandardPrintStreamListener(any(Function.class)); scrutineer.verify(elasticSearchIdAndVersionStream, jdbcIdAndVersionStream, idAndVersionStreamVerifier); verify(scrutineer).verify(elasticSearchIdAndVersionStream, jdbcIdAndVersionStream, idAndVersionStreamVerifier); verify(idAndVersionStreamVerifier).verify(any(IdAndVersionStream.class), any(IdAndVersionStream.class), eq(coincidentListener)); } @Test public void testShouldUseStandardPrintStreamListenerIfOptionProvided() { Scrutineer scrutineer = spy(new Scrutineer(options)); doReturn(coincidentListener).when(scrutineer).createCoincidentPrintStreamListener(any(Function.class)); doReturn(standardListener).when(scrutineer).createStandardPrintStreamListener(any(Function.class)); scrutineer.verify(elasticSearchIdAndVersionStream, jdbcIdAndVersionStream, idAndVersionStreamVerifier); verify(scrutineer).verify(elasticSearchIdAndVersionStream, jdbcIdAndVersionStream, idAndVersionStreamVerifier); verify(idAndVersionStreamVerifier).verify(any(IdAndVersionStream.class), any(IdAndVersionStream.class), eq(standardListener)); } @Test public void testClose() throws Exception { Scrutineer scrutineer = spy(new Scrutineer(options)); doNothing().when(scrutineer).closeJdbcConnection(); doNothing().when(scrutineer).closeElasticSearchConnections(); scrutineer.close(); verify(scrutineer).closeJdbcConnection(); verify(scrutineer).closeElasticSearchConnections(); } }