diff --git a/src/main/java/org/springframework/data/gemfire/search/lucene/LuceneIndexFactoryBean.java b/src/main/java/org/springframework/data/gemfire/search/lucene/LuceneIndexFactoryBean.java index b4d1d4a4..9080d833 100644 --- a/src/main/java/org/springframework/data/gemfire/search/lucene/LuceneIndexFactoryBean.java +++ b/src/main/java/org/springframework/data/gemfire/search/lucene/LuceneIndexFactoryBean.java @@ -122,14 +122,15 @@ public class LuceneIndexFactoryBean implements FactoryBean, protected LuceneIndex createIndex(String indexName, String regionPath) { LuceneService luceneService = resolveLuceneService(); + LuceneIndexFactory indexFactory = luceneService.createIndexFactory(); + Map fieldAnalyzers = getFieldAnalyzers(); if (isEmpty(fieldAnalyzers)) { - luceneService.createIndexFactory().setFields(asArray(resolveFields(getFields()))) - .create(indexName, regionPath); + indexFactory.setFields(asArray(resolveFields(getFields()))).create(indexName, regionPath); } else { - luceneService.createIndexFactory().setFields(fieldAnalyzers).create(indexName, regionPath); + indexFactory.setFields(fieldAnalyzers).create(indexName, regionPath); } return luceneService.getIndex(indexName, regionPath); diff --git a/src/test/java/org/springframework/data/gemfire/client/ClientRegionFactoryBeanTest.java b/src/test/java/org/springframework/data/gemfire/client/ClientRegionFactoryBeanTest.java index e171c2df..d7791def 100644 --- a/src/test/java/org/springframework/data/gemfire/client/ClientRegionFactoryBeanTest.java +++ b/src/test/java/org/springframework/data/gemfire/client/ClientRegionFactoryBeanTest.java @@ -32,7 +32,6 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.verifyZeroInteractions; import static org.mockito.Mockito.when; import java.io.InputStream; @@ -58,8 +57,19 @@ import org.springframework.data.gemfire.config.xml.GemfireConstants; import org.springframework.data.gemfire.util.ArrayUtils; /** + * Unit tests for {@link ClientRegionFactoryBean}. + * * @author David Turanski * @author John Blum + * @see org.junit.Test + * @see org.mockito.Mockito + * @see org.springframework.data.gemfire.client.ClientRegionFactoryBean + * @see org.apache.geode.cache.EvictionAttributes + * @see org.apache.geode.cache.ExpirationAttributes + * @see org.apache.geode.cache.Region + * @see org.apache.geode.cache.client.ClientCache + * @see org.apache.geode.cache.client.ClientRegionFactory + * @see org.apache.geode.cache.client.Pool */ public class ClientRegionFactoryBeanTest { @@ -215,7 +225,6 @@ public class ClientRegionFactoryBeanTest { verify(mockBeanFactory, times(1)).containsBean(eq(GemfireConstants.DEFAULT_GEMFIRE_POOL_NAME)); verify(mockClientCache, times(1)).createClientRegionFactory(eq(ClientRegionShortcut.CACHING_PROXY)); verify(mockClientRegionFactory, times(1)).create(eq("TestRegion")); - verifyZeroInteractions(mockRegion); } @Test @@ -244,7 +253,6 @@ public class ClientRegionFactoryBeanTest { verify(mockBeanFactory, times(1)).containsBean(eq(GemfireConstants.DEFAULT_GEMFIRE_POOL_NAME)); verify(mockClientCache, times(1)).createClientRegionFactory(eq(ClientRegionShortcut.PROXY)); verify(mockClientRegionFactory, times(1)).createSubregion(eq(mockRegion), eq("TestSubRegion")); - verifyZeroInteractions(mockSubRegion); } @Test @@ -271,7 +279,6 @@ public class ClientRegionFactoryBeanTest { verify(mockClientCache, times(1)).createClientRegionFactory(eq(ClientRegionShortcut.LOCAL_HEAP_LRU)); verify(mockClientRegionFactory, times(1)).create(eq("TestRegion")); verify(mockClientRegionFactory, never()).setPoolName(any(String.class)); - verifyZeroInteractions(mockRegion); } @Test diff --git a/src/test/java/org/springframework/data/gemfire/config/annotation/EnableIndexingConfigurationUnitTests.java b/src/test/java/org/springframework/data/gemfire/config/annotation/EnableIndexingConfigurationUnitTests.java index ad8746f6..b47fd5ce 100644 --- a/src/test/java/org/springframework/data/gemfire/config/annotation/EnableIndexingConfigurationUnitTests.java +++ b/src/test/java/org/springframework/data/gemfire/config/annotation/EnableIndexingConfigurationUnitTests.java @@ -22,11 +22,14 @@ import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyString; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.doAnswer; -import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; import java.util.HashSet; +import java.util.List; import java.util.Map; import java.util.Optional; import java.util.Set; @@ -41,6 +44,7 @@ import org.apache.geode.cache.lucene.LuceneIndexFactory; import org.apache.geode.cache.lucene.LuceneService; import org.apache.geode.cache.query.Index; import org.apache.geode.cache.query.QueryService; +import org.apache.lucene.analysis.Analyzer; import org.junit.After; import org.junit.Test; import org.mockito.invocation.InvocationOnMock; @@ -82,6 +86,21 @@ public class EnableIndexingConfigurationUnitTests { indexes.clear(); } + private static String[] asArray(List list) { + return list.toArray(new String[list.size()]); + } + + private static String[] toStringArray(Object[] array) { + String[] stringArray = new String[array.length]; + int index = 0; + + for (Object element : array) { + stringArray[index++] = String.valueOf(element); + } + + return stringArray; + } + /* (non-Javadoc) */ protected void assertIndex(Index index, String name, String expression, String from, IndexType indexType) { assertThat(index).isNotNull(); @@ -96,8 +115,8 @@ public class EnableIndexingConfigurationUnitTests { assertThat(index).isNotNull(); assertThat(index.getName()).isEqualTo(name); assertThat(index.getRegionPath()).isEqualTo(regionPath); - assertThat(index.getFieldNames()).contains(fields); assertThat(index.getFieldNames()).hasSize(fields.length); + assertThat(index.getFieldNames()).contains(fields); } /* (non-Javadoc) */ @@ -206,36 +225,48 @@ public class EnableIndexingConfigurationUnitTests { } @Bean + @SuppressWarnings("unchecked") LuceneService luceneService() { LuceneService mockLuceneService = mock(LuceneService.class); - LuceneIndexFactory mockLuceneIndexFactory = mock(LuceneIndexFactory.class); + when(mockLuceneService.createIndexFactory()).thenAnswer(invocation -> { + LuceneIndexFactory mockLuceneIndexFactory = mock(LuceneIndexFactory.class); - doReturn(mockLuceneIndexFactory).when(mockLuceneService).createIndexFactory(); + List fieldNames = new ArrayList<>(); - doAnswer(invocation -> { - LuceneIndex mockLuceneIndex = mock(LuceneIndex.class); + when(mockLuceneIndexFactory.setFields((String[]) any())).thenAnswer(setFieldsInvocation -> { + Collections.addAll(fieldNames, toStringArray(setFieldsInvocation.getArguments())); + return mockLuceneIndexFactory; + }); - String indexName = invocation.getArgument(0); - String regionPath = invocation.getArgument(1); + Map fieldAnalyzers = new HashMap<>(); - when(mockLuceneIndex.getName()).thenReturn(indexName); - when(mockLuceneIndex.getRegionPath()).thenReturn(regionPath); - when(mockLuceneIndex.getFieldNames()).thenReturn(resolveFieldNames(invocation)); - when(mockLuceneService.getIndex(eq(indexName), eq(regionPath))).thenReturn(mockLuceneIndex); + when(mockLuceneIndexFactory.setFields(any(Map.class))).thenAnswer(setFieldsInvocation -> { + fieldAnalyzers.putAll(setFieldsInvocation.getArgument(0)); + return mockLuceneIndexFactory; + }); - return mockLuceneIndex; - }).when(mockLuceneIndexFactory).create(anyString(), anyString()); + doAnswer(createInvocation -> { + LuceneIndex mockLuceneIndex = mock(LuceneIndex.class); + + String indexName = createInvocation.getArgument(0); + String regionPath = createInvocation.getArgument(1); + + when(mockLuceneIndex.getName()).thenReturn(indexName); + when(mockLuceneIndex.getRegionPath()).thenReturn(regionPath); + when(mockLuceneIndex.getFieldAnalyzers()).thenReturn(fieldAnalyzers); + when(mockLuceneIndex.getFieldNames()).thenReturn(asArray(fieldNames)); + + when(mockLuceneService.getIndex(eq(indexName), eq(regionPath))).thenReturn(mockLuceneIndex); + + return mockLuceneIndex; + }).when(mockLuceneIndexFactory).create(anyString(), anyString()); + + return mockLuceneIndexFactory; + }); return mockLuceneService; } - - @SuppressWarnings("all") - String[] resolveFieldNames(InvocationOnMock invocation) { - String[] fieldNames = new String[invocation.getArguments().length - 2]; - System.arraycopy(invocation.getArguments(), 2, fieldNames, 0, fieldNames.length); - return fieldNames; - } } static abstract class AbstractIndexAnswer implements Answer { diff --git a/src/test/java/org/springframework/data/gemfire/config/xml/LuceneNamespaceUnitTests.java b/src/test/java/org/springframework/data/gemfire/config/xml/LuceneNamespaceUnitTests.java index d2fcc4dd..7583e2a8 100644 --- a/src/test/java/org/springframework/data/gemfire/config/xml/LuceneNamespaceUnitTests.java +++ b/src/test/java/org/springframework/data/gemfire/config/xml/LuceneNamespaceUnitTests.java @@ -22,14 +22,16 @@ import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyString; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.doAnswer; -import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import java.util.ArrayList; import java.util.Collections; +import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.Optional; @@ -40,7 +42,6 @@ import org.apache.geode.cache.lucene.LuceneService; import org.apache.lucene.analysis.Analyzer; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; import org.springframework.beans.BeansException; import org.springframework.beans.factory.FactoryBean; @@ -58,6 +59,10 @@ import org.springframework.test.context.junit4.SpringRunner; * @author John Blum * @see org.junit.Test * @see org.junit.runner.RunWith + * @see org.apache.geode.cache.lucene.LuceneIndex + * @see org.apache.geode.cache.lucene.LuceneService + * @see org.springframework.data.gemfire.config.xml.LuceneIndexParser + * @see org.springframework.data.gemfire.config.xml.LuceneServiceParser * @see org.springframework.test.context.ContextConfiguration * @see org.springframework.test.context.junit4.SpringRunner * @since 1.1.0 @@ -88,6 +93,21 @@ public class LuceneNamespaceUnitTests { @Qualifier("IndexFour") private LuceneIndex luceneIndexFour; + private static String[] asArray(List list) { + return list.toArray(new String[list.size()]); + } + + private static String[] toStringArray(Object[] array) { + String[] stringArray = new String[array.length]; + int index = 0; + + for (Object element : array) { + stringArray[index++] = String.valueOf(element); + } + + return stringArray; + } + protected void assertLuceneIndex(LuceneIndex index, String name, String regionPath) { assertThat(index).isNotNull(); assertThat(index.getName()).isEqualTo(name); @@ -110,10 +130,9 @@ public class LuceneNamespaceUnitTests { } @Test - @SuppressWarnings({ "deprecation", "unchecked" }) public void luceneServiceConfigurationAndInteractionsAreCorrect() { assertThat(this.luceneService).isNotNull(); - verify(this.luceneService, times(2)).createIndexFactory(); + verify(this.luceneService, times(4)).createIndexFactory(); verify(this.luceneService, never()).destroyIndex(anyString(), anyString()); } @@ -170,10 +189,22 @@ public class LuceneNamespaceUnitTests { when(this.luceneService.createIndexFactory()).thenAnswer(invocation -> { LuceneIndexFactory mockLuceneIndexFactory = mock(LuceneIndexFactory.class); - doReturn(mockLuceneIndexFactory).when(mockLuceneIndexFactory).setFields((String[]) any()); - doReturn(mockLuceneIndexFactory).when(mockLuceneIndexFactory).setFields(any(Map.class)); + List fieldNames = new ArrayList<>(); - Answer mockLuceneIndex = mockLuceneIndex(this.luceneService); + when(mockLuceneIndexFactory.setFields((String[]) any())).thenAnswer(setFieldsInvocation -> { + Collections.addAll(fieldNames, toStringArray(setFieldsInvocation.getArguments())); + return mockLuceneIndexFactory; + }); + + Map fieldAnalyzers = new HashMap<>(); + + when(mockLuceneIndexFactory.setFields(any(Map.class))).thenAnswer(setFieldsInvocation -> { + fieldAnalyzers.putAll(setFieldsInvocation.getArgument(0)); + return mockLuceneIndexFactory; + }); + + Answer mockLuceneIndex = + mockLuceneIndex(this.luceneService, fieldAnalyzers, fieldNames); doAnswer(mockLuceneIndex).when(mockLuceneIndexFactory).create(anyString(), anyString()); @@ -185,46 +216,25 @@ public class LuceneNamespaceUnitTests { } @SuppressWarnings("unchecked") - private Answer mockLuceneIndex(LuceneService mockLuceneService) { - return (invocationOnMock) -> { - String indexName = invocationOnMock.getArgument(0); - String regionPath = invocationOnMock.getArgument(1); + private Answer mockLuceneIndex(LuceneService mockLuceneService, + Map fieldAnalyzers, List fieldNames) { + + return invocation -> { + String indexName = invocation.getArgument(0); + String regionPath = invocation.getArgument(1); LuceneIndex mockLuceneIndex = mock(LuceneIndex.class, indexName); when(mockLuceneIndex.getName()).thenReturn(indexName); when(mockLuceneIndex.getRegionPath()).thenReturn(regionPath); - - if (invocationOnMock.getArguments().length > 2) { - Object fields = invocationOnMock.getArgument(2); - - if (fields instanceof Map) { - when(mockLuceneIndex.getFieldAnalyzers()).thenReturn((Map) fields); - when(mockLuceneIndex.getFieldNames()).thenReturn(EMPTY_STRING_ARRAY); - } - else { - when(mockLuceneIndex.getFieldAnalyzers()).thenReturn(Collections.emptyMap()); - when(mockLuceneIndex.getFieldNames()).thenReturn(extractFields(invocationOnMock)); - } - } - + when(mockLuceneIndex.getFieldAnalyzers()).thenReturn(fieldAnalyzers); + when(mockLuceneIndex.getFieldNames()).thenReturn(asArray(fieldNames)); when(mockLuceneService.getIndex(eq(indexName), eq(regionPath))).thenReturn(mockLuceneIndex); return mockLuceneIndex; }; } - private String[] asStringArray(Object fields) { - return (fields instanceof String[] ? (String[]) fields : String.valueOf(fields).split(", ")); - } - - @SuppressWarnings("all") - private String[] extractFields(InvocationOnMock invocationOnMock) { - String[] fields = new String[invocationOnMock.getArguments().length - 2]; - System.arraycopy(invocationOnMock.getArguments(), 2, fields, 0, fields.length); - return fields; - } - @Override public Class getObjectType() { return Optional.ofNullable(this.luceneService).>map(LuceneService::getClass) diff --git a/src/test/java/org/springframework/data/gemfire/domain/support/AbstractSliceSupportTests.java b/src/test/java/org/springframework/data/gemfire/domain/support/AbstractSliceSupportTests.java index f7d39cc8..5732a88e 100644 --- a/src/test/java/org/springframework/data/gemfire/domain/support/AbstractSliceSupportTests.java +++ b/src/test/java/org/springframework/data/gemfire/domain/support/AbstractSliceSupportTests.java @@ -104,7 +104,6 @@ public class AbstractSliceSupportTests { Pageable mockPageable = mock(Pageable.class); when(mockPageable.previousOrFirst()).thenReturn(mockPageable); - when(mockPageable.hasPrevious()).thenReturn(false); doReturn(mockPageable).when(mockSlice).previousPageable(); assertThat(mockSlice.getNumber()).isEqualTo(2); @@ -119,9 +118,7 @@ public class AbstractSliceSupportTests { Pageable mockPageableTwo = mock(Pageable.class, "Page Two"); when(mockPageableOne.previousOrFirst()).thenReturn(mockPageableOne); - when(mockPageableOne.hasPrevious()).thenReturn(false); when(mockPageableTwo.previousOrFirst()).thenReturn(mockPageableOne); - when(mockPageableTwo.hasPrevious()).thenReturn(true); doReturn(mockPageableTwo).when(mockSlice).previousPageable(); assertThat(mockSlice.getNumber()).isEqualTo(3); diff --git a/src/test/java/org/springframework/data/gemfire/repository/query/DefaultGemfireEntityInformationTest.java b/src/test/java/org/springframework/data/gemfire/repository/query/DefaultGemfireEntityInformationTest.java index 1a198d13..44ca59ee 100644 --- a/src/test/java/org/springframework/data/gemfire/repository/query/DefaultGemfireEntityInformationTest.java +++ b/src/test/java/org/springframework/data/gemfire/repository/query/DefaultGemfireEntityInformationTest.java @@ -33,9 +33,7 @@ import org.springframework.data.gemfire.repository.sample.Algorithm; import org.springframework.data.gemfire.repository.sample.Animal; /** - * The DefaultGemfireEntityInformationTest class is a test suite of test cases testing the contract and functionality - * of the DefaultGemfireEntityInformation class used to extract entity information during persistence/mapping operations - * during data access to the underlying data store (GemFire). + * Unit tests for {@link DefaultGemfireEntityInformation}. * * @author John Blum * @see org.junit.Test @@ -106,7 +104,7 @@ public class DefaultGemfireEntityInformationTest { newEntityInformation(newPersistentEntity(ConfusedDomainEntity.class)); assertNotNull(entityInfo); - assertEquals("MyConfusedDomainEntity", entityInfo.getRegionName()); + assertEquals("ConfusedDomainEntity", entityInfo.getRegionName()); assertEquals(ConfusedDomainEntity.class, entityInfo.getJavaType()); assertEquals(Long.class, entityInfo.getIdType()); assertThat(entityInfo.getId(new ConfusedDomainEntity(123L)).orElse(null)).isEqualTo(123L); @@ -119,7 +117,7 @@ public class DefaultGemfireEntityInformationTest { newEntityInformation(newPersistentEntity(ConfusedDomainEntity.class)); assertNotNull(entityInfo); - assertEquals("MyConfusedDomainEntity", entityInfo.getRegionName()); + assertEquals("ConfusedDomainEntity", entityInfo.getRegionName()); assertEquals(ConfusedDomainEntity.class, entityInfo.getJavaType()); //assertEquals(String.class, entityInfo.getIdType()); assertTrue(Long.class.equals(entityInfo.getIdType())); diff --git a/src/test/java/org/springframework/data/gemfire/util/SpringUtilsUnitTests.java b/src/test/java/org/springframework/data/gemfire/util/SpringUtilsUnitTests.java index 6bd6d985..04b38218 100644 --- a/src/test/java/org/springframework/data/gemfire/util/SpringUtilsUnitTests.java +++ b/src/test/java/org/springframework/data/gemfire/util/SpringUtilsUnitTests.java @@ -38,6 +38,7 @@ import org.springframework.beans.factory.config.BeanDefinition; * * @author John Blum * @see org.junit.Test + * @see org.junit.runner.RunWith * @see org.mockito.Mock * @see org.mockito.Mockito * @see org.mockito.junit.MockitoJUnitRunner @@ -124,8 +125,6 @@ public class SpringUtilsUnitTests { public void defaultIfNullWithSupplierReturnsValue() { Supplier mockSupplier = mock(Supplier.class); - when(mockSupplier.get()).thenReturn("supplier"); - assertThat(SpringUtils.defaultIfNull("value", mockSupplier)).isEqualTo("value"); verify(mockSupplier, never()).get();