SGF-644 - Adapt to API changes in the Pivotal GemFire Lucene Integration and Support based on the Apache Geode 1.2.0 baseline.

This commit is contained in:
John Blum
2017-07-19 14:28:27 -07:00
parent 23d15285fd
commit 9df3028b98
11 changed files with 123 additions and 139 deletions

View File

@@ -130,18 +130,6 @@ public abstract class LuceneAccessor extends LuceneOperationsSupport implements
return resolveLuceneService().createLuceneQueryFactory();
}
/**
* Creates an instance of the {@link LuceneQueryFactory} to create and execute {@link LuceneQuery Lucene queries}.
*
* @param projectionFields {@link String} array containing the fields of the object to project.
* @return an instance of the {@link LuceneQueryFactory} to create and execute {@link LuceneQuery Lucene queries}.
* @see org.apache.geode.cache.lucene.LuceneQueryFactory
* @see #createLuceneQueryFactory(int, int)
*/
public LuceneQueryFactory createLuceneQueryFactory(String... projectionFields) {
return createLuceneQueryFactory(DEFAULT_RESULT_LIMIT, DEFAULT_PAGE_SIZE);
}
/**
* Creates an instance of the {@link LuceneQueryFactory} to create and execute {@link LuceneQuery Lucene queries}.
*

View File

@@ -35,6 +35,7 @@ import java.util.function.Supplier;
import org.apache.geode.cache.GemFireCache;
import org.apache.geode.cache.Region;
import org.apache.geode.cache.lucene.LuceneIndex;
import org.apache.geode.cache.lucene.LuceneIndexFactory;
import org.apache.geode.cache.lucene.LuceneService;
import org.apache.geode.cache.lucene.LuceneServiceProvider;
import org.apache.lucene.analysis.Analyzer;
@@ -56,6 +57,7 @@ import org.springframework.util.StringUtils;
* @see org.apache.geode.cache.GemFireCache
* @see org.apache.geode.cache.Region
* @see org.apache.geode.cache.lucene.LuceneIndex
* @see org.apache.geode.cache.lucene.LuceneIndexFactory
* @see org.apache.geode.cache.lucene.LuceneService
* @see org.apache.geode.cache.lucene.LuceneServiceProvider
* @see org.apache.lucene.analysis.Analyzer
@@ -68,7 +70,7 @@ import org.springframework.util.StringUtils;
*/
@SuppressWarnings("unused")
public class LuceneIndexFactoryBean extends AbstractFactoryBeanSupport<LuceneIndex>
implements DisposableBean, InitializingBean {
implements DisposableBean, InitializingBean {
protected static final boolean DEFAULT_DESTROY = false;
@@ -180,8 +182,7 @@ public class LuceneIndexFactoryBean extends AbstractFactoryBeanSupport<LuceneInd
* @param regionPath {@link String} containing the fully-qualified pathname to
* the {@link GemFireCache} {@link Region}.
* @return a new instance of {@link LuceneIndex} with the given {@code indexName} on the named {@link Region}.
* @see org.apache.geode.cache.lucene.LuceneService#createIndex(String, String, Map)
* @see org.apache.geode.cache.lucene.LuceneService#createIndex(String, String, String...)
* @see org.apache.geode.cache.lucene.LuceneIndexFactory#create(String, String)
* @see org.apache.geode.cache.lucene.LuceneService#getIndex(String, String)
* @see #resolveLuceneService()
* @see #getFieldAnalyzers()
@@ -192,13 +193,15 @@ public class LuceneIndexFactoryBean extends AbstractFactoryBeanSupport<LuceneInd
LuceneService luceneService = resolveLuceneService();
LuceneIndexFactory indexFactory = luceneService.createIndexFactory();
Map<String, Analyzer> fieldAnalyzers = getFieldAnalyzers();
if (isEmpty(fieldAnalyzers)) {
luceneService.createIndex(indexName, regionPath, asArray(resolveFields(getFields())));
indexFactory.setFields(asArray(resolveFields(getFields()))).create(indexName, regionPath);
}
else {
luceneService.createIndex(indexName, regionPath, fieldAnalyzers);
indexFactory.setFields(fieldAnalyzers).create(indexName, regionPath);
}
return luceneService.getIndex(indexName, regionPath);
@@ -225,7 +228,7 @@ public class LuceneIndexFactoryBean extends AbstractFactoryBeanSupport<LuceneInd
LuceneIndex luceneIndex = getObject();
if (isLuceneIndexDestroyable(luceneIndex)) {
resolveLuceneService().destroyIndex(luceneIndex);
resolveLuceneService().destroyIndex(luceneIndex.getName(), luceneIndex.getRegionPath());
}
}
@@ -251,7 +254,7 @@ public class LuceneIndexFactoryBean extends AbstractFactoryBeanSupport<LuceneInd
if (this.luceneIndex == null) {
setLuceneIndex(Optional.ofNullable(resolveLuceneService())
.map((luceneService) -> luceneService.getIndex(getIndexName(), resolveRegionPath()))
.orElse(null));
.orElse(null));
}
return this.luceneIndex;
@@ -287,6 +290,16 @@ public class LuceneIndexFactoryBean extends AbstractFactoryBeanSupport<LuceneInd
return (!isEmpty(fields) ? fields : Collections.singletonList(LuceneService.REGION_VALUE_FIELD));
}
/**
* Resolves the appropriate {@link LuceneIndexFactory} from the {@link LuceneService}.
*
* @return a newly created instance of the {@link LuceneIndexFactory} from the resolved {@link LuceneService}.
* @see #resolveLuceneService()
*/
protected LuceneIndexFactory resolveLuceneIndexFactory() {
return resolveLuceneService().createIndexFactory();
}
/**
* Resolves the {@link LuceneService} used by this {@link FactoryBean} to create the {@link LuceneIndex}.
*

View File

@@ -50,16 +50,13 @@ public interface LuceneOperations {
* @param query {@link String} containing the Lucene query to execute.
* @param defaultField {@link String} specifying the default field used in Lucene queries when a field
* is not explicitly defined in the Lucene query clause.
* @param projectionFields array of {@link String} values specifying the query projection.
* @return a {@link List} of {@link LuceneResultStruct} containing the query results.
* @see org.apache.geode.cache.lucene.LuceneResultStruct
* @see #query(String, String, int, String...)
* @see #query(String, String, int)
* @see java.util.List
*/
default <K, V> List<LuceneResultStruct<K, V>> query(String query, String defaultField,
String... projectionFields) {
return query(query, defaultField, DEFAULT_RESULT_LIMIT, projectionFields);
default <K, V> List<LuceneResultStruct<K, V>> query(String query, String defaultField) {
return query(query, defaultField, DEFAULT_RESULT_LIMIT);
}
/**
@@ -71,13 +68,11 @@ public interface LuceneOperations {
* @param defaultField {@link String} specifying the default field used in Lucene queries when a field
* is not explicitly defined in the Lucene query clause.
* @param resultLimit limit on the number of query results to return.
* @param projectionFields array of {@link String} values specifying the query projection.
* @return a {@link List} of {@link LuceneResultStruct} containing the query results.
* @see org.apache.geode.cache.lucene.LuceneResultStruct
* @see java.util.List
*/
<K, V> List<LuceneResultStruct<K, V>> query(String query, String defaultField,
int resultLimit, String... projectionFields);
<K, V> List<LuceneResultStruct<K, V>> query(String query, String defaultField, int resultLimit);
/**
* Executes the given Lucene {@link String query} with a limit on the number of results returned
@@ -90,12 +85,10 @@ public interface LuceneOperations {
* is not explicitly defined in the Lucene query clause.
* @param resultLimit limit on the number of query results to return.
* @param pageSize number of results per page.
* @param projectionFields array of {@link String} values specifying the query projection.
* @return a {@link PageableLuceneQueryResults} data structure containing the results of the Lucene query.
* @see org.apache.geode.cache.lucene.PageableLuceneQueryResults
*/
<K, V> PageableLuceneQueryResults<K, V> query(String query, String defaultField,
int resultLimit, int pageSize, String... projectionFields);
<K, V> PageableLuceneQueryResults<K, V> query(String query, String defaultField, int resultLimit, int pageSize);
/**
* Executes the given Lucene {@link String query}.
@@ -104,17 +97,14 @@ public interface LuceneOperations {
* @param <V> {@link Class} type of the value.
* @param queryProvider {@link LuceneQueryProvider} is a provider implementation supplying the Lucene query
* to execute as well as de/serialize to distribute across the cluster.
* @param projectionFields array of {@link String} values specifying the query projection.
* @return a {@link List} of {@link LuceneResultStruct} containing the query results.
* @see org.apache.geode.cache.lucene.LuceneQueryProvider
* @see org.apache.geode.cache.lucene.LuceneResultStruct
* @see #query(LuceneQueryProvider, int, String...)
* @see #query(LuceneQueryProvider, int)
* @see java.util.List
*/
default <K, V> List<LuceneResultStruct<K, V>> query(LuceneQueryProvider queryProvider,
String... projectionFields) {
return query(queryProvider, DEFAULT_RESULT_LIMIT, projectionFields);
default <K, V> List<LuceneResultStruct<K, V>> query(LuceneQueryProvider queryProvider) {
return query(queryProvider, DEFAULT_RESULT_LIMIT);
}
/**
@@ -125,14 +115,12 @@ public interface LuceneOperations {
* @param queryProvider {@link LuceneQueryProvider} is a provider implementation supplying the Lucene query
* to execute as well as de/serialize to distribute across the cluster.
* @param resultLimit limit on the number of query results to return.
* @param projectionFields array of {@link String} values specifying the query projection.
* @return a {@link List} of {@link LuceneResultStruct} containing the query results.
* @see org.apache.geode.cache.lucene.LuceneQueryProvider
* @see org.apache.geode.cache.lucene.LuceneResultStruct
* @see java.util.List
*/
<K, V> List<LuceneResultStruct<K, V>> query(LuceneQueryProvider queryProvider,
int resultLimit, String... projectionFields);
<K, V> List<LuceneResultStruct<K, V>> query(LuceneQueryProvider queryProvider, int resultLimit);
/**
* Executes the given Lucene {@link String query} with a limit on the number of results returned
@@ -144,13 +132,11 @@ public interface LuceneOperations {
* to execute as well as de/serialize to distribute across the cluster.
* @param resultLimit limit on the number of query results to return.
* @param pageSize number of results per page.
* @param projectionFields array of {@link String} values specifying the query projection.
* @return a {@link PageableLuceneQueryResults} data structure containing the results of the Lucene query.
* @see org.apache.geode.cache.lucene.LuceneQueryProvider
* @see org.apache.geode.cache.lucene.PageableLuceneQueryResults
*/
<K, V> PageableLuceneQueryResults<K, V> query(LuceneQueryProvider queryProvider,
int resultLimit, int pageSize, String... projectionFields);
<K, V> PageableLuceneQueryResults<K, V> query(LuceneQueryProvider queryProvider, int resultLimit, int pageSize);
/**
* Executes the given Lucene {@link String query} returning a {@link Collection} of keys

View File

@@ -36,6 +36,7 @@ import org.springframework.data.gemfire.search.lucene.support.LuceneAccessorSupp
* @author John Blum
* @see org.springframework.data.gemfire.search.lucene.LuceneAccessor
* @see org.springframework.data.gemfire.search.lucene.LuceneOperations
* @see org.springframework.data.gemfire.search.lucene.support.LuceneAccessorSupport
* @see org.apache.geode.cache.Region
* @see org.apache.geode.cache.lucene.LuceneIndex
* @see org.apache.geode.cache.lucene.LuceneQuery
@@ -91,13 +92,12 @@ public class LuceneTemplate extends LuceneAccessorSupport implements LuceneOpera
* @inheritDoc
*/
@Override
public <K, V> List<LuceneResultStruct<K, V>> query(String query, String defaultField,
int resultLimit, String... projectionFields) {
public <K, V> List<LuceneResultStruct<K, V>> query(String query, String defaultField, int resultLimit) {
String indexName = resolveIndexName();
String regionPath = resolveRegionPath();
LuceneQueryFactory queryFactory = createLuceneQueryFactory(resultLimit, projectionFields);
LuceneQueryFactory queryFactory = createLuceneQueryFactory(resultLimit);
LuceneQuery<K, V> queryWrapper = queryFactory.create(indexName, regionPath, query, defaultField);
@@ -109,12 +109,13 @@ public class LuceneTemplate extends LuceneAccessorSupport implements LuceneOpera
*/
@Override
public <K, V> PageableLuceneQueryResults<K, V> query(String query, String defaultField,
int resultLimit, int pageSize, String... projectionFields) {
int resultLimit, int pageSize) {
String indexName = resolveIndexName();
String regionPath = resolveRegionPath();
LuceneQueryFactory queryFactory = createLuceneQueryFactory(resultLimit, pageSize, projectionFields);
LuceneQueryFactory queryFactory = createLuceneQueryFactory(resultLimit, pageSize);
LuceneQuery<K, V> queryWrapper = queryFactory.create(indexName, regionPath, query, defaultField);
@@ -125,13 +126,12 @@ public class LuceneTemplate extends LuceneAccessorSupport implements LuceneOpera
* @inheritDoc
*/
@Override
public <K, V> List<LuceneResultStruct<K, V>> query(LuceneQueryProvider queryProvider,
int resultLimit, String... projectionFields) {
public <K, V> List<LuceneResultStruct<K, V>> query(LuceneQueryProvider queryProvider, int resultLimit) {
String indexName = resolveIndexName();
String regionPath = resolveRegionPath();
LuceneQueryFactory queryFactory = createLuceneQueryFactory(resultLimit, projectionFields);
LuceneQueryFactory queryFactory = createLuceneQueryFactory(resultLimit);
LuceneQuery<K, V> queryWrapper = queryFactory.create(indexName, regionPath, queryProvider);
@@ -143,12 +143,12 @@ public class LuceneTemplate extends LuceneAccessorSupport implements LuceneOpera
*/
@Override
public <K, V> PageableLuceneQueryResults<K, V> query(LuceneQueryProvider queryProvider,
int resultLimit, int pageSize, String... projectionFields) {
int resultLimit, int pageSize) {
String indexName = resolveIndexName();
String regionPath = resolveRegionPath();
LuceneQueryFactory queryFactory = createLuceneQueryFactory(resultLimit, pageSize, projectionFields);
LuceneQueryFactory queryFactory = createLuceneQueryFactory(resultLimit, pageSize);
LuceneQuery<K, V> queryWrapper = queryFactory.create(indexName, regionPath, queryProvider);
@@ -160,6 +160,7 @@ public class LuceneTemplate extends LuceneAccessorSupport implements LuceneOpera
*/
@Override
public <K> Collection<K> queryForKeys(String query, String defaultField, int resultLimit) {
String indexName = resolveIndexName();
String regionPath = resolveRegionPath();
@@ -175,6 +176,7 @@ public class LuceneTemplate extends LuceneAccessorSupport implements LuceneOpera
*/
@Override
public <K> Collection<K> queryForKeys(LuceneQueryProvider queryProvider, int resultLimit) {
String indexName = resolveIndexName();
String regionPath = resolveRegionPath();
@@ -190,6 +192,7 @@ public class LuceneTemplate extends LuceneAccessorSupport implements LuceneOpera
*/
@Override
public <V> Collection<V> queryForValues(String query, String defaultField, int resultLimit) {
String indexName = resolveIndexName();
String regionPath = resolveRegionPath();
@@ -205,6 +208,7 @@ public class LuceneTemplate extends LuceneAccessorSupport implements LuceneOpera
*/
@Override
public <V> Collection<V> queryForValues(LuceneQueryProvider queryProvider, int resultLimit) {
String indexName = resolveIndexName();
String regionPath = resolveRegionPath();

View File

@@ -85,9 +85,7 @@ public abstract class LuceneAccessorSupport extends LuceneAccessor {
* @inheritDoc
*/
@Override
public <K, V> List<LuceneResultStruct<K, V>> query(String query, String defaultField,
int resultLimit, String... projectionFields) {
public <K, V> List<LuceneResultStruct<K, V>> query(String query, String defaultField, int resultLimit) {
throw newUnsupportedOperationException(RuntimeExceptionFactory.NOT_IMPLEMENTED);
}
@@ -96,7 +94,7 @@ public abstract class LuceneAccessorSupport extends LuceneAccessor {
*/
@Override
public <K, V> PageableLuceneQueryResults<K, V> query(String query, String defaultField,
int resultLimit, int pageSize, String... projectionFields) {
int resultLimit, int pageSize) {
throw newUnsupportedOperationException(RuntimeExceptionFactory.NOT_IMPLEMENTED);
}
@@ -105,9 +103,7 @@ public abstract class LuceneAccessorSupport extends LuceneAccessor {
* @inheritDoc
*/
@Override
public <K, V> List<LuceneResultStruct<K, V>> query(LuceneQueryProvider queryProvider,
int resultLimit, String... projectionFields) {
public <K, V> List<LuceneResultStruct<K, V>> query(LuceneQueryProvider queryProvider, int resultLimit) {
throw newUnsupportedOperationException(RuntimeExceptionFactory.NOT_IMPLEMENTED);
}
@@ -116,7 +112,7 @@ public abstract class LuceneAccessorSupport extends LuceneAccessor {
*/
@Override
public <K, V> PageableLuceneQueryResults<K, V> query(LuceneQueryProvider queryProvider,
int resultLimit, int pageSize, String... projectionFields) {
int resultLimit, int pageSize) {
throw newUnsupportedOperationException(RuntimeExceptionFactory.NOT_IMPLEMENTED);
}

View File

@@ -43,9 +43,7 @@ public abstract class LuceneOperationsSupport implements LuceneOperations {
* @inheritDoc
*/
@Override
public <K, V> List<LuceneResultStruct<K, V>> query(String query, String defaultField,
int resultLimit, String... projectionFields) {
public <K, V> List<LuceneResultStruct<K, V>> query(String query, String defaultField, int resultLimit) {
throw newUnsupportedOperationException(RuntimeExceptionFactory.NOT_IMPLEMENTED);
}
@@ -54,7 +52,7 @@ public abstract class LuceneOperationsSupport implements LuceneOperations {
*/
@Override
public <K, V> PageableLuceneQueryResults<K, V> query(String query, String defaultField,
int resultLimit, int pageSize, String... projectionFields) {
int resultLimit, int pageSize) {
throw newUnsupportedOperationException(RuntimeExceptionFactory.NOT_IMPLEMENTED);
}
@@ -63,9 +61,7 @@ public abstract class LuceneOperationsSupport implements LuceneOperations {
* @inheritDoc
*/
@Override
public <K, V> List<LuceneResultStruct<K, V>> query(LuceneQueryProvider queryProvider,
int resultLimit, String... projectionFields) {
public <K, V> List<LuceneResultStruct<K, V>> query(LuceneQueryProvider queryProvider, int resultLimit) {
throw newUnsupportedOperationException(RuntimeExceptionFactory.NOT_IMPLEMENTED);
}
@@ -74,7 +70,7 @@ public abstract class LuceneOperationsSupport implements LuceneOperations {
*/
@Override
public <K, V> PageableLuceneQueryResults<K, V> query(LuceneQueryProvider queryProvider,
int resultLimit, int pageSize, String... projectionFields) {
int resultLimit, int pageSize) {
throw newUnsupportedOperationException(RuntimeExceptionFactory.NOT_IMPLEMENTED);
}

View File

@@ -94,7 +94,6 @@ public class LuceneAccessorUnitTests {
@Test
public void afterPropertiesSetInitializesLuceneAccessorProperly() throws Exception {
assertThat(luceneAccessor.getCache()).isNull();
assertThat(luceneAccessor.getLuceneService()).isNull();
assertThat(luceneAccessor.getIndexName()).isNullOrEmpty();
@@ -122,7 +121,6 @@ public class LuceneAccessorUnitTests {
@Test
public void createLuceneQueryFactory() {
doReturn(mockLuceneService).when(luceneAccessor).resolveLuceneService();
when(mockLuceneService.createLuceneQueryFactory()).thenReturn(mockLuceneQueryFactory);
@@ -134,15 +132,13 @@ public class LuceneAccessorUnitTests {
@Test
@SuppressWarnings("deprecation")
public void createLuceneQueryFactoryWithProjectionFields() {
public void createLuceneQueryFactoryWithResultLimit() {
doReturn(mockLuceneService).when(luceneAccessor).resolveLuceneService();
when(mockLuceneService.createLuceneQueryFactory()).thenReturn(mockLuceneQueryFactory);
when(mockLuceneQueryFactory.setLimit(anyInt())).thenReturn(mockLuceneQueryFactory);
when(mockLuceneQueryFactory.setPageSize(anyInt())).thenReturn(mockLuceneQueryFactory);
when(mockLuceneQueryFactory.setLimit(anyInt())).thenReturn(mockLuceneQueryFactory);
assertThat(luceneAccessor.createLuceneQueryFactory("fieldOne", "fieldTwo"))
.isEqualTo(mockLuceneQueryFactory);
assertThat(luceneAccessor.createLuceneQueryFactory(1000)).isEqualTo(mockLuceneQueryFactory);
verify(luceneAccessor).resolveLuceneService();
verify(mockLuceneService, times(1)).createLuceneQueryFactory();
@@ -153,14 +149,13 @@ public class LuceneAccessorUnitTests {
@Test
@SuppressWarnings("deprecation")
public void createLuceneQueryFactoryWithResultLimitAndProjectionFields() {
public void createLuceneQueryFactoryWithResultLimitAndPageSize() {
doReturn(mockLuceneService).when(luceneAccessor).resolveLuceneService();
when(mockLuceneService.createLuceneQueryFactory()).thenReturn(mockLuceneQueryFactory);
when(mockLuceneQueryFactory.setLimit(anyInt())).thenReturn(mockLuceneQueryFactory);
when(mockLuceneQueryFactory.setPageSize(anyInt())).thenReturn(mockLuceneQueryFactory);
when(mockLuceneQueryFactory.setLimit(anyInt())).thenReturn(mockLuceneQueryFactory);
assertThat(luceneAccessor.createLuceneQueryFactory(1000))
assertThat(luceneAccessor.createLuceneQueryFactory(1000, 20))
.isEqualTo(mockLuceneQueryFactory);
verify(luceneAccessor).resolveLuceneService();
@@ -171,7 +166,6 @@ public class LuceneAccessorUnitTests {
@Test
public void resolveCacheReturnsConfiguredCache() {
luceneAccessor.setCache(mockCache);
assertThat(luceneAccessor.getCache()).isSameAs(mockCache);
@@ -180,7 +174,6 @@ public class LuceneAccessorUnitTests {
@Test
public void resolveLuceneServiceReturnsConfiguredLuceneService() {
luceneAccessor.setLuceneService(mockLuceneService);
assertThat(luceneAccessor.getLuceneService()).isSameAs(mockLuceneService);
@@ -189,7 +182,6 @@ public class LuceneAccessorUnitTests {
@Test
public void resolveLuceneServiceLooksUpLuceneService() {
doReturn(mockCache).when(luceneAccessor).resolveCache();
doReturn(mockLuceneService).when(luceneAccessor).resolveLuceneService(eq(mockCache));
@@ -202,7 +194,6 @@ public class LuceneAccessorUnitTests {
@Test
public void resolveLuceneServiceThrowsIllegalArgumentExceptionWhenCacheIsNull() {
exception.expect(IllegalArgumentException.class);
exception.expectCause(is(nullValue(Throwable.class)));
exception.expectMessage("Cache reference was not properly configured");
@@ -213,7 +204,6 @@ public class LuceneAccessorUnitTests {
@Test
@SuppressWarnings("all")
public void resolveIndexNameReturnsConfiguredIndexName() {
luceneAccessor.setIndexName("TestIndex");
assertThat(luceneAccessor.getIndexName()).isEqualTo("TestIndex");
@@ -225,7 +215,6 @@ public class LuceneAccessorUnitTests {
@Test
@SuppressWarnings("all")
public void resolveIndexNameReturnsLuceneIndexName() {
luceneAccessor.setLuceneIndex(mockLuceneIndex);
when(mockLuceneIndex.getName()).thenReturn("MockIndex");
@@ -240,7 +229,6 @@ public class LuceneAccessorUnitTests {
@Test
@SuppressWarnings("all")
public void resolveIndexNameThrowsIllegalStateExceptionWhenIndexNameIsUnresolvable() {
assertThat(luceneAccessor.getIndexName()).isNullOrEmpty();
assertThat(luceneAccessor.getLuceneIndex()).isNull();
@@ -253,7 +241,6 @@ public class LuceneAccessorUnitTests {
@Test
public void resolveRegionPathReturnsConfiguredRegionPath() {
luceneAccessor.setRegionPath("/Example");
assertThat(luceneAccessor.getRegionPath()).isEqualTo("/Example");
@@ -263,7 +250,6 @@ public class LuceneAccessorUnitTests {
@Test
@SuppressWarnings("all")
public void resolveRegionPathReturnsRegionFullPath() {
when(mockRegion.getFullPath()).thenReturn("/Example");
luceneAccessor.setRegion(mockRegion);
@@ -277,7 +263,6 @@ public class LuceneAccessorUnitTests {
@Test
public void resolveRegionPathThrowsIllegalStatueExceptionWhenRegionPathIsUnresolvable() {
assertThat(luceneAccessor.getRegion()).isNull();
assertThat(luceneAccessor.getRegionPath()).isNullOrEmpty();
@@ -291,7 +276,6 @@ public class LuceneAccessorUnitTests {
@Test
@SuppressWarnings("unchecked")
public void doFind() throws LuceneQueryException {
LuceneQueryExecutor<String> mockQueryExecutor = mock(LuceneQueryExecutor.class);
when(mockQueryExecutor.execute()).thenReturn("test");
@@ -305,7 +289,6 @@ public class LuceneAccessorUnitTests {
@Test
@SuppressWarnings("unchecked")
public void doFindHandlesLuceneQueryException() throws LuceneQueryException {
LuceneQueryExecutor<String> mockQueryExecutor = mock(LuceneQueryExecutor.class);
when(mockQueryExecutor.execute()).thenThrow(new LuceneQueryException("test"));
@@ -326,7 +309,6 @@ public class LuceneAccessorUnitTests {
@Test
public void luceneAccessorInitializedCorrectly() {
luceneAccessor.setCache(mockCache);
luceneAccessor.setIndexName("ExampleIndex");
luceneAccessor.setLuceneIndex(mockLuceneIndex);

View File

@@ -23,7 +23,6 @@ import static org.hamcrest.Matchers.nullValue;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyString;
import static org.mockito.Matchers.eq;
import static org.mockito.Matchers.isNull;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
@@ -40,6 +39,7 @@ import java.util.Map;
import org.apache.geode.cache.GemFireCache;
import org.apache.geode.cache.Region;
import org.apache.geode.cache.lucene.LuceneIndex;
import org.apache.geode.cache.lucene.LuceneIndexFactory;
import org.apache.geode.cache.lucene.LuceneService;
import org.apache.lucene.analysis.Analyzer;
import org.junit.Before;
@@ -84,6 +84,9 @@ public class LuceneIndexFactoryBeanUnitTests {
@Mock
private LuceneIndex mockLuceneIndex;
@Mock
private LuceneIndexFactory mockLuceneIndexFactory;
@Mock
private LuceneService mockLuceneService;
@@ -93,8 +96,14 @@ public class LuceneIndexFactoryBeanUnitTests {
private LuceneIndexFactoryBean factoryBean;
@Before
@SuppressWarnings("unchecked")
public void setup() {
factoryBean = spy(new LuceneIndexFactoryBean());
doReturn(mockLuceneService).when(factoryBean).resolveLuceneService(eq(mockCache));
doReturn(mockLuceneIndexFactory).when(mockLuceneService).createIndexFactory();
doReturn(mockLuceneIndexFactory).when(mockLuceneIndexFactory).setFields((String[]) any());
doReturn(mockLuceneIndexFactory).when(mockLuceneIndexFactory).setFields(any(Map.class));
}
@Test
@@ -120,7 +129,7 @@ public class LuceneIndexFactoryBeanUnitTests {
}
@Test
public void afterPropertiesSetThrowsIllegalStateExceptionIndexNameNotSet() throws Exception {
public void afterPropertiesSetThrowsIllegalStateExceptionWhenIndexNameNotSet() throws Exception {
exception.expect(IllegalStateException.class);
exception.expectCause(is(nullValue(Throwable.class)));
exception.expectMessage("indexName was not properly initialized");
@@ -139,8 +148,11 @@ public class LuceneIndexFactoryBeanUnitTests {
assertThat(factoryBean.getLuceneService()).isSameAs(mockLuceneService);
assertThat(factoryBean.createLuceneIndex("ExampleIndex", "/Example")).isEqualTo(mockLuceneIndex);
verify(mockLuceneService, times(1))
.createIndex(eq("ExampleIndex"), eq("/Example"), eq(LuceneService.REGION_VALUE_FIELD));
verify(mockLuceneService, times(1)).createIndexFactory();
verify(mockLuceneIndexFactory, times(1))
.setFields(eq(LuceneService.REGION_VALUE_FIELD));
verify(mockLuceneIndexFactory, times(1))
.create(eq("ExampleIndex"), eq("/Example"));
verify(mockLuceneService, times(1))
.getIndex(eq("ExampleIndex"), eq("/Example"));
}
@@ -159,8 +171,10 @@ public class LuceneIndexFactoryBeanUnitTests {
assertThat(factoryBean.getLuceneService()).isSameAs(mockLuceneService);
assertThat(factoryBean.createLuceneIndex("ExampleIndex", "/Example")).isEqualTo(mockLuceneIndex);
verify(mockLuceneService, times(1))
.createIndex(eq("ExampleIndex"), eq("/Example"), eq(fieldAnalyzers));
verify(mockLuceneService, times(1)).createIndexFactory();
verify(mockLuceneIndexFactory, times(1)).setFields(eq(fieldAnalyzers));
verify(mockLuceneIndexFactory, times(1))
.create(eq("ExampleIndex"), eq("/Example"));
verify(mockLuceneService, times(1))
.getIndex(eq("ExampleIndex"), eq("/Example"));
}
@@ -177,8 +191,11 @@ public class LuceneIndexFactoryBeanUnitTests {
assertThat(factoryBean.getLuceneService()).isSameAs(mockLuceneService);
assertThat(factoryBean.createLuceneIndex("ExampleIndex", "/Example")).isEqualTo(mockLuceneIndex);
verify(mockLuceneService, times(1))
.createIndex(eq("ExampleIndex"), eq("/Example"), eq("fieldOne"), eq("fieldTwo"));
verify(mockLuceneService, times(1)).createIndexFactory();
verify(mockLuceneIndexFactory, times(1))
.setFields(eq("fieldOne"), eq("fieldTwo"));
verify(mockLuceneIndexFactory, times(1))
.create(eq("ExampleIndex"), eq("/Example"));
verify(mockLuceneService, times(1))
.getIndex(eq("ExampleIndex"), eq("/Example"));
}
@@ -193,11 +210,14 @@ public class LuceneIndexFactoryBeanUnitTests {
assertThat(factoryBean.getLuceneService()).isSameAs(mockLuceneService);
doReturn(mockLuceneIndex).when(factoryBean).getObject();
doReturn("MockIndex").when(mockLuceneIndex).getName();
doReturn("MockRegion").when(mockLuceneIndex).getRegionPath();
factoryBean.destroy();
verify(factoryBean, times(1)).getObject();
verify(mockLuceneService, times(1)).destroyIndex(eq(mockLuceneIndex));
verify(mockLuceneService, times(1))
.destroyIndex(eq("MockIndex"), eq("MockRegion"));
}
@Test
@@ -214,7 +234,7 @@ public class LuceneIndexFactoryBeanUnitTests {
factoryBean.destroy();
verify(factoryBean, times(1)).getObject();
verify(mockLuceneService, never()).destroyIndex(any(LuceneIndex.class));
verify(mockLuceneService, never()).destroyIndex(anyString(), anyString());
}
@Test
@@ -231,7 +251,7 @@ public class LuceneIndexFactoryBeanUnitTests {
factoryBean.destroy();
verify(factoryBean, times(1)).getObject();
verify(mockLuceneService, never()).destroyIndex(isNull(LuceneIndex.class));
verify(mockLuceneService, never()).destroyIndex(anyString(), anyString());
}
@Test
@@ -345,6 +365,17 @@ public class LuceneIndexFactoryBeanUnitTests {
.isEqualTo(Collections.singletonList(LuceneService.REGION_VALUE_FIELD));
}
@Test
public void resolveLuceneIndexFactoryCallsLuceneServiceCreateIndexFactory() {
factoryBean.setCache(mockCache);
doReturn(mockLuceneIndexFactory).when(mockLuceneService).createIndexFactory();
assertThat(factoryBean.resolveLuceneIndexFactory()).isEqualTo(mockLuceneIndexFactory);
verify(mockLuceneService, times(1)).createIndexFactory();
}
@Test
public void resolveLuceneServiceReturnsConfiguredLuceneService() {
factoryBean.setBeanFactory(mockBeanFactory);

View File

@@ -25,7 +25,6 @@ import java.time.Month;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicLong;
import java.util.stream.Collectors;
@@ -73,9 +72,6 @@ public class LuceneOperationsIntegrationTests {
private static final AtomicLong IDENTIFIER = new AtomicLong(0L);
private static final int LUCENE_INDEX_WAIT_UNTIL_FLUSHED_TIMEOUT =
Long.valueOf(TimeUnit.SECONDS.toMillis(15L)).intValue();
protected static final String LOG_LEVEL = "none";
private Person jonDoe;
@@ -115,8 +111,12 @@ public class LuceneOperationsIntegrationTests {
}
protected void flushLuceneIndex() {
Optional.ofNullable(this.luceneService.getIndex("PersonTitleIndex", "/People"))
.ifPresent(luceneIndex -> luceneIndex.waitUntilFlushed(LUCENE_INDEX_WAIT_UNTIL_FLUSHED_TIMEOUT));
try {
this.luceneService.waitUntilFlushed("PersonTitleIndex", "/People",
15L, TimeUnit.SECONDS);
}
catch (Throwable ignore) {
}
}
private List<String> asNames(List<? extends Nameable> nameables) {

View File

@@ -19,7 +19,6 @@ package org.springframework.data.gemfire.search.lucene;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyString;
import static org.mockito.Matchers.anyVararg;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
@@ -54,24 +53,23 @@ public class LuceneOperationsUnitTests {
@Test
public void stringQueryCallsQueryWithResultLimit() {
when(mockLuceneOperations.query(anyString(), anyString(), anyVararg())).thenCallRealMethod();
when(mockLuceneOperations.query(anyString(), anyString())).thenCallRealMethod();
mockLuceneOperations.query("title : Up Shit Creek Without a Paddle", "title",
"content");
mockLuceneOperations.query("title : Up Shit Creek Without a Paddle", "title");
verify(mockLuceneOperations, times(1)).query(
eq("title : Up Shit Creek Without a Paddle"), eq("title"),
eq(LuceneOperations.DEFAULT_RESULT_LIMIT), eq("content"));
eq(LuceneOperations.DEFAULT_RESULT_LIMIT));
}
@Test
public void queryProviderQueryCallsQueryWithResultLimit() {
when(mockLuceneOperations.query(any(LuceneQueryProvider.class), anyVararg())).thenCallRealMethod();
when(mockLuceneOperations.query(any(LuceneQueryProvider.class))).thenCallRealMethod();
mockLuceneOperations.query(mockLuceneQueryProvider, "content");
mockLuceneOperations.query(mockLuceneQueryProvider);
verify(mockLuceneOperations, times(1)).query(eq(mockLuceneQueryProvider),
eq(LuceneOperations.DEFAULT_RESULT_LIMIT), eq("content"));
eq(LuceneOperations.DEFAULT_RESULT_LIMIT));
}
@Test
@@ -82,7 +80,7 @@ public class LuceneOperationsUnitTests {
verify(mockLuceneOperations, times(1)).queryForKeys(
eq("title : Up Shit Creek Without a Paddle"), eq("title"),
eq(LuceneOperations.DEFAULT_RESULT_LIMIT));
eq(LuceneOperations.DEFAULT_RESULT_LIMIT));
}
@Test
@@ -103,7 +101,7 @@ public class LuceneOperationsUnitTests {
verify(mockLuceneOperations, times(1)).queryForValues(
eq("title : Up Shit Creek Without a Paddle"), eq("title"),
eq(LuceneOperations.DEFAULT_RESULT_LIMIT));
eq(LuceneOperations.DEFAULT_RESULT_LIMIT));
}
@Test
@@ -116,6 +114,6 @@ public class LuceneOperationsUnitTests {
eq(mockLuceneQueryProvider), eq(LuceneOperations.DEFAULT_RESULT_LIMIT));
}
abstract class TestLuceneOperations implements LuceneOperations {
}
abstract class TestLuceneOperations implements LuceneOperations { }
}

View File

@@ -62,6 +62,7 @@ import org.mockito.junit.MockitoJUnitRunner;
* @see org.apache.geode.cache.lucene.LuceneQueryFactory
* @see org.apache.geode.cache.lucene.LuceneQueryProvider
* @see org.apache.geode.cache.lucene.LuceneResultStruct
* @see org.apache.geode.cache.lucene.LuceneService
* @see org.apache.geode.cache.lucene.PageableLuceneQueryResults
* @since 1.0.0
*/
@@ -95,18 +96,16 @@ public class LuceneTemplateUnitTests {
@Before
@SuppressWarnings("deprecation")
public void setup() {
luceneTemplate.setLuceneService(mockLuceneService);
when(mockLuceneService.createLuceneQueryFactory()).thenReturn(mockLuceneQueryFactory);
when(mockLuceneQueryFactory.setLimit(anyInt())).thenReturn(mockLuceneQueryFactory);
when(mockLuceneQueryFactory.setPageSize(anyInt())).thenReturn(mockLuceneQueryFactory);
when(mockLuceneQueryFactory.setLimit(anyInt())).thenReturn(mockLuceneQueryFactory);
}
@Test
@SuppressWarnings({ "deprecation", "unchecked" })
public void stringQueryReturnsList() throws LuceneQueryException {
when(mockLuceneQueryFactory.create(eq("TestIndex"), eq("/Example"), anyString(), anyString()))
.thenReturn(mockLuceneQuery);
when(mockLuceneQuery.findResults()).thenReturn(asList(mockLuceneResultStructOne, mockLuceneResultStructTwo));
@@ -115,8 +114,7 @@ public class LuceneTemplateUnitTests {
doReturn("/Example").when(luceneTemplate).resolveRegionPath();
List<LuceneResultStruct<Object, Object>> results = luceneTemplate.query(
"title : Up Shit Creek Without a Paddle", "title", 100,
"content");
"title : Up Shit Creek Without a Paddle", "title", 100);
assertThat(results).isNotNull();
assertThat(results).hasSize(2);
@@ -137,7 +135,6 @@ public class LuceneTemplateUnitTests {
@Test
@SuppressWarnings({ "deprecation", "unchecked" })
public void stringQueryWithPageSizeReturnsPageableResults() throws LuceneQueryException {
when(mockLuceneQueryFactory.create(eq("TestIndex"), eq("/Example"), anyString(), anyString()))
.thenReturn(mockLuceneQuery);
when(mockLuceneQuery.findPages()).thenReturn(mockPageableLuceneQueryResults);
@@ -146,8 +143,7 @@ public class LuceneTemplateUnitTests {
doReturn("/Example").when(luceneTemplate).resolveRegionPath();
PageableLuceneQueryResults<Object, Object> results = luceneTemplate.query(
"title : Up Shit Creek Without a Paddle", "title", 100, 20,
"content");
"title : Up Shit Creek Without a Paddle", "title", 100, 20);
assertThat(results).isSameAs(mockPageableLuceneQueryResults);
@@ -166,7 +162,6 @@ public class LuceneTemplateUnitTests {
@Test
@SuppressWarnings({ "deprecation", "unchecked" })
public void queryProviderQueryReturnsList() throws LuceneQueryException {
when(mockLuceneQueryFactory.create(eq("TestIndex"), eq("/Example"),
any(LuceneQueryProvider.class))).thenReturn(mockLuceneQuery);
when(mockLuceneQuery.findResults()).thenReturn(asList(mockLuceneResultStructOne, mockLuceneResultStructTwo));
@@ -174,8 +169,8 @@ public class LuceneTemplateUnitTests {
doReturn("TestIndex").when(luceneTemplate).resolveIndexName();
doReturn("/Example").when(luceneTemplate).resolveRegionPath();
List<LuceneResultStruct<Object, Object>> results = luceneTemplate.query(mockLuceneQueryProvider,
100, "content");
List<LuceneResultStruct<Object, Object>> results =
luceneTemplate.query(mockLuceneQueryProvider, 100);
assertThat(results).isNotNull();
assertThat(results).hasSize(2);
@@ -196,7 +191,6 @@ public class LuceneTemplateUnitTests {
@Test
@SuppressWarnings({ "deprecation", "unchecked" })
public void queryProviderQueryWithPageSizeReturnsPageableResults() throws LuceneQueryException {
when(mockLuceneQueryFactory.create(eq("TestIndex"), eq("/Example"),
any(LuceneQueryProvider.class))).thenReturn(mockLuceneQuery);
when(mockLuceneQuery.findPages()).thenReturn(mockPageableLuceneQueryResults);
@@ -205,7 +199,7 @@ public class LuceneTemplateUnitTests {
doReturn("/Example").when(luceneTemplate).resolveRegionPath();
PageableLuceneQueryResults<Object, Object> results = luceneTemplate.query(mockLuceneQueryProvider,
100, 20, "content");
100, 20);
assertThat(results).isSameAs(mockPageableLuceneQueryResults);
@@ -224,7 +218,6 @@ public class LuceneTemplateUnitTests {
@Test
@SuppressWarnings({ "deprecation", "unchecked" })
public void stringQueryForKeysReturnsKeys() throws LuceneQueryException {
when(mockLuceneQueryFactory.create(eq("TestIndex"), eq("/Example"), anyString(), anyString()))
.thenReturn(mockLuceneQuery);
when(mockLuceneQuery.findKeys()).thenReturn(asList("keyOne", "keyTwo"));
@@ -254,7 +247,6 @@ public class LuceneTemplateUnitTests {
@Test
@SuppressWarnings({ "deprecation", "unchecked" })
public void queryProviderQueryForKeysReturnsKeys() throws LuceneQueryException {
when(mockLuceneQueryFactory.create(eq("TestIndex"), eq("/Example"),
any(LuceneQueryProvider.class))).thenReturn(mockLuceneQuery);
when(mockLuceneQuery.findKeys()).thenReturn(asList("keyOne", "keyTwo"));
@@ -283,7 +275,6 @@ public class LuceneTemplateUnitTests {
@Test
@SuppressWarnings({ "deprecation", "unchecked" })
public void stringQueryForValuesReturnsValues() throws LuceneQueryException {
when(mockLuceneQueryFactory.create(eq("TestIndex"), eq("/Example"), anyString(), anyString()))
.thenReturn(mockLuceneQuery);
when(mockLuceneQuery.findValues()).thenReturn(asList("valueOne", "valueTwo"));
@@ -313,7 +304,6 @@ public class LuceneTemplateUnitTests {
@Test
@SuppressWarnings({ "deprecation", "unchecked" })
public void queryProviderQueryForValuesReturnsValues() throws LuceneQueryException {
when(mockLuceneQueryFactory.create(eq("TestIndex"), eq("/Example"),
any(LuceneQueryProvider.class))).thenReturn(mockLuceneQuery);
when(mockLuceneQuery.findValues()).thenReturn(asList("valueOne", "valueTwo"));