GEODE-2639: Added DUnit tests for expiration on Lucene

        * Tests added to validate the effect of the expiration of Lucene Index 
entries.
        * Once the entries expire, the lucene index entries must be updated.

        This closes #422


Project: http://git-wip-us.apache.org/repos/asf/geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/geode/commit/5be70038
Tree: http://git-wip-us.apache.org/repos/asf/geode/tree/5be70038
Diff: http://git-wip-us.apache.org/repos/asf/geode/diff/5be70038

Branch: refs/heads/feature/GEODE-2420
Commit: 5be700386bd5f1483868f0a821c58d9642743699
Parents: 16bf532
Author: nabarun <n...@pivotal.io>
Authored: Fri Mar 10 11:00:09 2017 -0800
Committer: Ken Howe <kh...@pivotal.io>
Committed: Fri Mar 17 13:09:45 2017 -0700

----------------------------------------------------------------------
 .../geode/cache/lucene/ExpirationDUnitTest.java | 89 ++++++++++++++++++++
 .../geode/cache/lucene/LuceneDUnitTest.java     | 34 ++++++--
 2 files changed, 116 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/geode/blob/5be70038/geode-lucene/src/test/java/org/apache/geode/cache/lucene/ExpirationDUnitTest.java
----------------------------------------------------------------------
diff --git 
a/geode-lucene/src/test/java/org/apache/geode/cache/lucene/ExpirationDUnitTest.java
 
b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/ExpirationDUnitTest.java
new file mode 100644
index 0000000..92c7370
--- /dev/null
+++ 
b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/ExpirationDUnitTest.java
@@ -0,0 +1,89 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license
+ * agreements. See the NOTICE file distributed with this work for additional 
information regarding
+ * copyright ownership. The ASF licenses this file to You under the Apache 
License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the 
License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software 
distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
KIND, either express
+ * or implied. See the License for the specific language governing permissions 
and limitations under
+ * the License.
+ */
+package org.apache.geode.cache.lucene;
+
+import static 
org.apache.geode.cache.lucene.test.LuceneTestUtilities.INDEX_NAME;
+import static 
org.apache.geode.cache.lucene.test.LuceneTestUtilities.REGION_NAME;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import org.apache.geode.cache.Cache;
+import org.apache.geode.cache.Region;
+import org.apache.geode.test.dunit.SerializableRunnableIF;
+import org.apache.geode.test.junit.categories.DistributedTest;
+import org.awaitility.Awaitility;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.junit.runner.RunWith;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+import java.util.stream.IntStream;
+import junitparams.JUnitParamsRunner;
+import junitparams.Parameters;
+
+@Category(DistributedTest.class)
+@RunWith(JUnitParamsRunner.class)
+public class ExpirationDUnitTest extends LuceneQueriesAccessorBase {
+
+  protected final static int EXTRA_WAIT_TIME_SEC = 15;
+
+  protected RegionTestableType[] getPartitionRegionsWithExpirationSet() {
+    return new RegionTestableType[] 
{RegionTestableType.PARTITION_WITH_EXPIRATION_DESTROY,
+        RegionTestableType.PARTITION_REDUNDANT_WITH_EXPIRATION_DESTROY,
+        
RegionTestableType.PARTITION_REDUNDANT_PERSISTENT_WITH_EXPIRATION_DESTROY};
+  }
+
+  @Test
+  @Parameters(method = "getPartitionRegionsWithExpirationSet")
+  public void regionWithExpirationSetMustAlsoRemoveLuceneIndexEntries(
+      RegionTestableType regionTestType) {
+    SerializableRunnableIF createIndex = () -> {
+      LuceneService luceneService = LuceneServiceProvider.get(getCache());
+      luceneService.createIndexFactory().setFields("text").create(INDEX_NAME, 
REGION_NAME);
+    };
+
+    dataStore1.invoke(() -> initDataStore(createIndex, regionTestType));
+    dataStore2.invoke(() -> initDataStore(createIndex, regionTestType));
+    accessor.invoke(() -> initDataStore(createIndex, regionTestType));
+
+    accessor.invoke(() -> {
+      Cache cache = getCache();
+      Region region = cache.getRegion(REGION_NAME);
+      IntStream.range(0, NUM_BUCKETS).forEach(i -> region.put(i, new 
TestObject("hello world")));
+    });
+
+    assertTrue(waitForFlushBeforeExecuteTextSearch(accessor, 60000));
+
+    accessor.invoke(() -> Awaitility.await()
+        .atMost(EXPIRATION_TIMEOUT_SEC + EXTRA_WAIT_TIME_SEC, 
TimeUnit.SECONDS).until(() -> {
+          LuceneService luceneService = LuceneServiceProvider.get(getCache());
+          LuceneQuery<Integer, TestObject> luceneQuery = 
luceneService.createLuceneQueryFactory()
+              .setResultLimit(100).create(INDEX_NAME, REGION_NAME, "world", 
"text");
+
+          Collection luceneResultList = null;
+          try {
+            luceneResultList = luceneQuery.findKeys();
+          } catch (LuceneQueryException e) {
+            e.printStackTrace();
+            fail();
+          }
+          assertEquals(0, luceneResultList.size());
+        }));
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/geode/blob/5be70038/geode-lucene/src/test/java/org/apache/geode/cache/lucene/LuceneDUnitTest.java
----------------------------------------------------------------------
diff --git 
a/geode-lucene/src/test/java/org/apache/geode/cache/lucene/LuceneDUnitTest.java 
b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/LuceneDUnitTest.java
index fa3c470..b80f5de 100644
--- 
a/geode-lucene/src/test/java/org/apache/geode/cache/lucene/LuceneDUnitTest.java
+++ 
b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/LuceneDUnitTest.java
@@ -17,6 +17,8 @@ package org.apache.geode.cache.lucene;
 import org.apache.geode.cache.Cache;
 import org.apache.geode.cache.EvictionAction;
 import org.apache.geode.cache.EvictionAttributes;
+import org.apache.geode.cache.ExpirationAction;
+import org.apache.geode.cache.ExpirationAttributes;
 import org.apache.geode.cache.PartitionAttributes;
 import org.apache.geode.cache.PartitionAttributesFactory;
 import org.apache.geode.cache.Region;
@@ -37,6 +39,7 @@ public abstract class LuceneDUnitTest extends 
JUnit4CacheTestCase {
 
   protected static int NUM_BUCKETS = 10;
   protected static int MAX_ENTRIES_FOR_EVICTION = 20;
+  protected static int EXPIRATION_TIMEOUT_SEC = 5;
 
   @Override
   public void postSetUp() throws Exception {
@@ -98,12 +101,16 @@ public abstract class LuceneDUnitTest extends 
JUnit4CacheTestCase {
             EvictionAction.LOCAL_DESTROY)),
     PARTITION_PERSISTENT_EVICTION_LOCAL_DESTROY(RegionShortcut.PARTITION_PROXY,
         RegionShortcut.PARTITION_PERSISTENT, EvictionAttributes
-            .createLRUEntryAttributes(MAX_ENTRIES_FOR_EVICTION, 
EvictionAction.LOCAL_DESTROY))
-
-
-    ;
-
-
+            .createLRUEntryAttributes(MAX_ENTRIES_FOR_EVICTION, 
EvictionAction.LOCAL_DESTROY)),
+    
PARTITION_REDUNDANT_WITH_EXPIRATION_DESTROY(RegionShortcut.PARTITION_PROXY_REDUNDANT,
+        RegionShortcut.PARTITION_REDUNDANT, EXPIRATION_TIMEOUT_SEC, 
ExpirationAction.DESTROY),
+    PARTITION_WITH_EXPIRATION_DESTROY(RegionShortcut.PARTITION_PROXY, 
RegionShortcut.PARTITION,
+        EXPIRATION_TIMEOUT_SEC, ExpirationAction.DESTROY),
+    
PARTITION_REDUNDANT_PERSISTENT_WITH_EXPIRATION_DESTROY(RegionShortcut.PARTITION_PROXY_REDUNDANT,
+        RegionShortcut.PARTITION_REDUNDANT_PERSISTENT, EXPIRATION_TIMEOUT_SEC,
+        ExpirationAction.DESTROY);
+
+    ExpirationAttributes expirationAttributes = null;
     EvictionAttributes evictionAttributes = null;
     private RegionShortcut serverRegionShortcut;
     private RegionShortcut clientRegionShortcut;
@@ -117,6 +124,15 @@ public abstract class LuceneDUnitTest extends 
JUnit4CacheTestCase {
       this.clientRegionShortcut = clientRegionShortcut;
       this.serverRegionShortcut = serverRegionShortcut;
       this.evictionAttributes = evictionAttributes;
+      this.expirationAttributes = null;
+    }
+
+    RegionTestableType(RegionShortcut clientRegionShortcut, RegionShortcut 
serverRegionShortcut,
+        int timeout, ExpirationAction expirationAction) {
+      this.clientRegionShortcut = clientRegionShortcut;
+      this.serverRegionShortcut = serverRegionShortcut;
+      this.evictionAttributes = null;
+      this.expirationAttributes = new ExpirationAttributes(timeout, 
expirationAction);
     }
 
     public Region createDataStore(Cache cache, String regionName) {
@@ -128,7 +144,11 @@ public abstract class LuceneDUnitTest extends 
JUnit4CacheTestCase {
           return null;
         }
       }
-      if (evictionAttributes == null) {
+      if (expirationAttributes != null) {
+        return cache.createRegionFactory(serverRegionShortcut)
+            .setEntryTimeToLive(expirationAttributes)
+            
.setPartitionAttributes(getPartitionAttributes(false)).create(regionName);
+      } else if (evictionAttributes == null) {
         return cache.createRegionFactory(serverRegionShortcut)
             
.setPartitionAttributes(getPartitionAttributes(false)).create(regionName);
       } else {

Reply via email to