/* * JBoss, Home of Professional Open Source * Copyright 2014 Red Hat Inc. and/or its affiliates and other contributors * as indicated by the @authors tag. All rights reserved. */ package org.jboss.elasticsearch.river.remote; import java.util.HashMap; import java.util.Map; import org.elasticsearch.common.logging.ESLogger; import org.jboss.elasticsearch.river.remote.exception.RemoteDocumentNotFoundException; import org.junit.Assert; import org.junit.Test; import org.mockito.Mockito; import static org.mockito.Mockito.mock; /** * Unit test for {@link SpaceIndexerBase}. * * @author Vlastimil Elias (velias at redhat dot com) */ public class SpaceIndexerBaseTest { private static final String DOC_ID = "docid"; private static final String SPACE = "space"; @Test public void constructor() { IRemoteSystemClient remoteClientMock = mock(IRemoteSystemClient.class); IESIntegration esIntegrationMock = mock(IESIntegration.class); IDocumentIndexStructureBuilder documentIndexStructureBuilderMock = mock(IDocumentIndexStructureBuilder.class); try { new TestIndexer(null, remoteClientMock, esIntegrationMock, documentIndexStructureBuilderMock); Assert.fail("IllegalArgumentException expected"); } catch (IllegalArgumentException e) { // OK } TestIndexer tested = new TestIndexer(SPACE, remoteClientMock, esIntegrationMock, documentIndexStructureBuilderMock); Assert.assertEquals(SPACE, tested.spaceKey); Assert.assertEquals(remoteClientMock, tested.remoteSystemClient); Assert.assertEquals(documentIndexStructureBuilderMock, tested.documentIndexStructureBuilder); Assert.assertEquals(esIntegrationMock, tested.esIntegrationComponent); } @Test public void getDocumentIdChecked() { TestIndexer tested = getTested(); // document id found { Map<String, Object> document = new HashMap<String, Object>(); Mockito.when(tested.documentIndexStructureBuilder.extractDocumentId(document)).thenReturn("aa"); Assert.assertEquals("aa", tested.getDocumentIdChecked(document)); } // document id is null { Map<String, Object> document = new HashMap<String, Object>(); Mockito.when(tested.documentIndexStructureBuilder.extractDocumentId(document)).thenReturn(null); try { tested.getDocumentIdChecked(document); Assert.fail("IllegalArgumentException expected"); } catch (IllegalArgumentException e) { } } // document id is empty string { Map<String, Object> document = new HashMap<String, Object>(); Mockito.when(tested.documentIndexStructureBuilder.extractDocumentId(document)).thenReturn(" "); try { tested.getDocumentIdChecked(document); Assert.fail("IllegalArgumentException expected"); } catch (IllegalArgumentException e) { } } } @Test public void getDocumentDetail() throws Exception { TestIndexer tested = getTested(); // case - remote document OK { Mockito.reset(tested.remoteSystemClient); Map<String, Object> detail = new HashMap<String, Object>(); Map<String, Object> document = new HashMap<String, Object>(); Mockito.when(tested.remoteSystemClient.getChangedDocumentDetails(SPACE, DOC_ID, document)).thenReturn(detail); Assert.assertTrue(tested.getDocumentDetail(DOC_ID, document)); Assert.assertEquals(detail, document.get(SpaceIndexerBase.KEY_DETAIL)); } // case - remote document empty { Mockito.reset(tested.remoteSystemClient); Map<String, Object> document = new HashMap<String, Object>(); Mockito.when(tested.remoteSystemClient.getChangedDocumentDetails(SPACE, DOC_ID, document)).thenReturn(null); Assert.assertTrue(tested.getDocumentDetail(DOC_ID, document)); Assert.assertEquals(null, document.get(SpaceIndexerBase.KEY_DETAIL)); } // case - remote document RemoteDocumentNotFoundException { Mockito.reset(tested.remoteSystemClient, tested.indexingInfo); Map<String, Object> document = new HashMap<String, Object>(); Mockito.when(tested.remoteSystemClient.getChangedDocumentDetails(SPACE, DOC_ID, document)).thenThrow( new RemoteDocumentNotFoundException("msg")); Assert.assertFalse(tested.getDocumentDetail(DOC_ID, document)); Assert.assertEquals(null, document.get(SpaceIndexerBase.KEY_DETAIL)); Assert.assertEquals(1, tested.indexingInfo.documentsWithError); Mockito.verify(tested.indexingInfo).addErrorMessage(Mockito.anyString()); } // case - other exception { Mockito.reset(tested.remoteSystemClient, tested.indexingInfo); tested.indexingInfo.documentsWithError = 0; Map<String, Object> document = new HashMap<String, Object>(); Exception e = new Exception(); Mockito.when(tested.remoteSystemClient.getChangedDocumentDetails(SPACE, DOC_ID, document)).thenThrow(e); try { tested.getDocumentDetail(DOC_ID, document); Assert.fail("Exception expected"); } catch (Exception ex) { Assert.assertEquals(null, document.get(SpaceIndexerBase.KEY_DETAIL)); Assert.assertEquals(0, tested.indexingInfo.documentsWithError); Mockito.verify(tested.indexingInfo, Mockito.times(0)).addErrorMessage(Mockito.anyString()); Assert.assertEquals(e, ex); } } } /** * @return */ protected TestIndexer getTested() { IRemoteSystemClient remoteClientMock = mock(IRemoteSystemClient.class); IESIntegration esIntegrationMock = mock(IESIntegration.class); IDocumentIndexStructureBuilder documentIndexStructureBuilderMock = mock(IDocumentIndexStructureBuilder.class); TestIndexer tested = new TestIndexer(SPACE, remoteClientMock, esIntegrationMock, documentIndexStructureBuilderMock); tested.indexingInfo = Mockito.mock(SpaceIndexingInfo.class); tested.logger = Mockito.mock(ESLogger.class); return tested; } private static final class TestIndexer extends SpaceIndexerBase { public TestIndexer(String spaceKey, IRemoteSystemClient remoteSystemClient, IESIntegration esIntegrationComponent, IDocumentIndexStructureBuilder documentIndexStructureBuilder) { super(spaceKey, remoteSystemClient, esIntegrationComponent, documentIndexStructureBuilder); } @Override protected void processUpdate() throws Exception { } } }