This is an automated email from the ASF dual-hosted git repository. ladyvader pushed a commit to branch feature/GEODE-3930 in repository https://gitbox.apache.org/repos/asf/geode.git
commit 210e7439e84aeb4739dc55c24a991679d88c06c8 Author: Dan Smith <[email protected]> AuthorDate: Thu Nov 2 14:08:25 2017 -0700 Added integration and DUnit tests for index creation on an existing region. --- .../cache/lucene/LuceneIndexCreationDUnitTest.java | 94 ++++++++++++++++++++++ .../lucene/LuceneIndexCreationIntegrationTest.java | 17 ++++ 2 files changed, 111 insertions(+) diff --git a/geode-lucene/src/test/java/org/apache/geode/cache/lucene/LuceneIndexCreationDUnitTest.java b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/LuceneIndexCreationDUnitTest.java index 948ba14..743ccd2 100644 --- a/geode-lucene/src/test/java/org/apache/geode/cache/lucene/LuceneIndexCreationDUnitTest.java +++ b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/LuceneIndexCreationDUnitTest.java @@ -14,8 +14,12 @@ */ package org.apache.geode.cache.lucene; +import org.apache.geode.cache.Cache; +import org.apache.geode.cache.Region; +import org.apache.geode.cache.lucene.internal.LuceneIndexFactoryImpl; import org.apache.geode.cache.lucene.internal.repository.serializer.HeterogeneousLuceneSerializer; import org.apache.geode.cache.lucene.test.LuceneTestUtilities; +import org.apache.geode.cache.lucene.test.TestObject; import org.apache.geode.internal.i18n.LocalizedStrings; import org.apache.geode.test.dunit.SerializableRunnableIF; import org.apache.geode.test.junit.categories.DistributedTest; @@ -25,15 +29,20 @@ import junitparams.Parameters; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.core.KeywordAnalyzer; import org.apache.lucene.analysis.standard.StandardAnalyzer; +import org.hamcrest.Matchers; +import org.junit.Rule; import org.junit.Test; import org.junit.experimental.categories.Category; +import org.junit.rules.ExpectedException; import org.junit.runner.RunWith; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.util.Collection; +import java.util.Collections; import java.util.HashMap; import java.util.Map; +import java.util.concurrent.TimeUnit; import static org.apache.geode.cache.lucene.test.LuceneTestUtilities.*; import static junitparams.JUnitParamsRunner.$; @@ -43,6 +52,9 @@ import static org.junit.Assert.*; @RunWith(JUnitParamsRunner.class) public class LuceneIndexCreationDUnitTest extends LuceneDUnitTest { + @Rule + public transient ExpectedException expectedException = ExpectedException.none(); + private Object[] parametersForMultipleIndexCreates() { Integer[] numIndexes = {1, 2, 10}; RegionTestableType[] regionTestTypes = getListOfRegionTestTypes(); @@ -248,6 +260,65 @@ public class LuceneIndexCreationDUnitTest extends LuceneDUnitTest { dataStore2.invoke(() -> initDataStore(createIndex, regionType)); } + @Test + @Parameters({"PARTITION", "PARTITION_REDUNDANT"}) + public void creatingIndexAfterRegionAndStartingUpSecondMemberSucceeds(RegionTestableType regionType) { + dataStore1.invoke(() -> { + regionType.createDataStore(getCache(), REGION_NAME); + createIndexAfterRegion("field1"); + }); + + dataStore2.invoke(() -> { + createIndexAfterRegion("field1"); + regionType.createDataStore(getCache(), REGION_NAME); + }); + dataStore1.invoke(() -> { + putEntryAndQuery(); + }); + } + + @Test() + @Parameters({"PARTITION", "PARTITION_REDUNDANT"}) + public void creatingIndexAfterRegionAndStartingUpSecondMemberWithoutIndexFails(RegionTestableType regionType) { + dataStore1.invoke(() -> { + regionType.createDataStore(getCache(), REGION_NAME); + createIndexAfterRegion("field1"); + }); + + expectedException.expectCause(Matchers.instanceOf(IllegalStateException.class)); + dataStore2.invoke(() -> { + regionType.createDataStore(getCache(), REGION_NAME); + createIndexAfterRegion("field1"); + }); + + dataStore1.invoke(() -> { + putEntryAndQuery(); + }); + } + + @Test + @Parameters({"PARTITION", "PARTITION_REDUNDANT"}) + public void creatingIndexAfterRegionInTwoMembersSucceed(RegionTestableType regionType) { + dataStore1.invoke(() -> { + regionType.createDataStore(getCache(), REGION_NAME); + }); + + dataStore2.invoke(() -> { + regionType.createDataStore(getCache(), REGION_NAME); + }); + + dataStore1.invoke(() -> { + createIndexAfterRegion("field1"); + }); + + dataStore2.invoke(() -> { + createIndexAfterRegion("field1"); + }); + + dataStore1.invoke(() -> { + putEntryAndQuery(); + }); + } @Test @Parameters(method = "getXmlAndExceptionMessages") @@ -544,4 +615,27 @@ public class LuceneIndexCreationDUnitTest extends LuceneDUnitTest { protected void verifyAsyncEventQueues(final int expectedSize) { assertEquals(expectedSize, getCache().getAsyncEventQueues(false).size()); } + + private void createIndexAfterRegion(String ... fields) { + LuceneService luceneService = LuceneServiceProvider.get(getCache()); + LuceneIndexFactoryImpl indexFactory = + (LuceneIndexFactoryImpl) luceneService.createIndexFactory(); + indexFactory.setFields(fields).create(INDEX_NAME, REGION_NAME, true); + } + + private void putEntryAndQuery() + throws InterruptedException, LuceneQueryException { + Cache cache = getCache(); + Region region = cache.getRegion(REGION_NAME); + region.put("key1", new TestObject("field1Value", "field2Value")); + LuceneService luceneService = LuceneServiceProvider.get(cache); + luceneService.waitUntilFlushed(INDEX_NAME, REGION_NAME, 1, TimeUnit.MINUTES); + LuceneQuery<Object, Object> + query = + luceneService.createLuceneQueryFactory() + .create(INDEX_NAME, REGION_NAME, "field1:field1Value", "field1"); + assertEquals(Collections.singletonList("key1"), query.findKeys()); + } + + } diff --git a/geode-lucene/src/test/java/org/apache/geode/cache/lucene/LuceneIndexCreationIntegrationTest.java b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/LuceneIndexCreationIntegrationTest.java index 8a57666..0b5bb04 100644 --- a/geode-lucene/src/test/java/org/apache/geode/cache/lucene/LuceneIndexCreationIntegrationTest.java +++ b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/LuceneIndexCreationIntegrationTest.java @@ -208,6 +208,23 @@ public class LuceneIndexCreationIntegrationTest extends LuceneIntegrationTest { assertEquals(Collections.singletonList("key1"), query.findKeys()); } + + @Test() + public void creatingDuplicateLuceneIndexFails() + throws IOException, ParseException, InterruptedException, LuceneQueryException { + Region region = createRegion(); + LuceneService luceneService = LuceneServiceProvider.get(cache); + final LuceneIndexFactoryImpl indexFactory = + (LuceneIndexFactoryImpl) luceneService.createIndexFactory(); + indexFactory.setFields("field1", "field2").create(INDEX_NAME, REGION_NAME, true); + + LuceneIndex index = luceneService.getIndex(INDEX_NAME, REGION_NAME); + assertNotNull(index); + + expectedException.expect(LuceneIndexExistsException.class); + indexFactory.setFields("field1", "field2").create(INDEX_NAME, REGION_NAME, true); + } + @Test public void cannotCreateLuceneIndexForReplicateRegion() throws IOException, ParseException { try { -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
