You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by zh...@apache.org on 2017/09/12 21:27:49 UTC

[geode] branch feature/GEODE-3239 updated: GEODE-3240: add implementation for java api of set serializer chnage createRepositoryManager's mapper to be LuceneSerializer add integration test

This is an automated email from the ASF dual-hosted git repository.

zhouxj pushed a commit to branch feature/GEODE-3239
in repository https://gitbox.apache.org/repos/asf/geode.git


The following commit(s) were added to refs/heads/feature/GEODE-3239 by this push:
     new 6b5289f  GEODE-3240: add implementation for java api of set serializer             chnage createRepositoryManager's mapper to be LuceneSerializer             add integration test
6b5289f is described below

commit 6b5289f86d5d5da6af026fc520271cf96ff745ee
Author: zhouxh <gz...@pivotal.io>
AuthorDate: Mon Sep 11 16:46:19 2017 -0700

    GEODE-3240: add implementation for java api of set serializer
                chnage createRepositoryManager's mapper to be LuceneSerializer
                add integration test
    
    This closes #770
---
 .../internal/LuceneIndexForPartitionedRegion.java  |  8 ++-
 .../cache/lucene/internal/LuceneIndexImpl.java     |  7 ++-
 .../cache/lucene/internal/LuceneRawIndex.java      |  8 ++-
 .../lucene/internal/LuceneRegionListener.java      |  9 ++-
 .../cache/lucene/internal/LuceneServiceImpl.java   | 12 ++--
 .../lucene/internal/xml/LuceneIndexCreation.java   |  3 +-
 .../LuceneIndexMaintenanceIntegrationTest.java     | 23 ++++++++
 .../LuceneIndexForPartitionedRegionTest.java       | 44 ++++++++++++--
 .../internal/LuceneRegionListenerJUnitTest.java    | 67 ++++++++++++++++++++++
 .../internal/LuceneServiceImplJUnitTest.java       | 16 ++++++
 10 files changed, 177 insertions(+), 20 deletions(-)

diff --git a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneIndexForPartitionedRegion.java b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneIndexForPartitionedRegion.java
index 3300ca6..2fc714a 100644
--- a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneIndexForPartitionedRegion.java
+++ b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneIndexForPartitionedRegion.java
@@ -28,6 +28,7 @@ import org.apache.geode.cache.RegionAttributes;
 import org.apache.geode.cache.RegionShortcut;
 import org.apache.geode.cache.execute.FunctionService;
 import org.apache.geode.cache.execute.ResultCollector;
+import org.apache.geode.cache.lucene.LuceneSerializer;
 import org.apache.geode.cache.lucene.internal.directory.DumpDirectoryFiles;
 import org.apache.geode.cache.lucene.internal.filesystem.FileSystemStats;
 import org.apache.geode.cache.lucene.internal.partition.BucketTargetingFixedResolver;
@@ -55,8 +56,11 @@ public class LuceneIndexForPartitionedRegion extends LuceneIndexImpl {
     this.fileSystemStats = new FileSystemStats(cache.getDistributedSystem(), statsName);
   }
 
-  protected RepositoryManager createRepositoryManager() {
-    HeterogeneousLuceneSerializer mapper = new HeterogeneousLuceneSerializer(getFieldNames());
+  protected RepositoryManager createRepositoryManager(LuceneSerializer luceneSerializer) {
+    LuceneSerializer mapper = luceneSerializer;
+    if (mapper == null) {
+      mapper = new HeterogeneousLuceneSerializer(getFieldNames());
+    }
     PartitionedRepositoryManager partitionedRepositoryManager =
         new PartitionedRepositoryManager(this, mapper);
     return partitionedRepositoryManager;
diff --git a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneIndexImpl.java b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneIndexImpl.java
index a8358fa..b32042b 100644
--- a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneIndexImpl.java
+++ b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneIndexImpl.java
@@ -29,6 +29,7 @@ import org.apache.geode.cache.RegionAttributes;
 import org.apache.geode.cache.asyncqueue.AsyncEventQueue;
 import org.apache.geode.cache.asyncqueue.internal.AsyncEventQueueFactoryImpl;
 import org.apache.geode.cache.asyncqueue.internal.AsyncEventQueueImpl;
+import org.apache.geode.cache.lucene.LuceneSerializer;
 import org.apache.geode.cache.lucene.internal.repository.RepositoryManager;
 import org.apache.geode.cache.lucene.internal.xml.LuceneIndexCreation;
 import org.apache.geode.internal.cache.InternalCache;
@@ -145,11 +146,11 @@ public abstract class LuceneIndexImpl implements InternalLuceneIndex {
     }
   }
 
-  protected void setupRepositoryManager() {
-    repositoryManager = createRepositoryManager();
+  protected void setupRepositoryManager(LuceneSerializer luceneSerializer) {
+    repositoryManager = createRepositoryManager(luceneSerializer);
   }
 
-  protected abstract RepositoryManager createRepositoryManager();
+  protected abstract RepositoryManager createRepositoryManager(LuceneSerializer luceneSerializer);
 
   protected abstract void createLuceneListenersAndFileChunkRegions(
       AbstractPartitionedRepositoryManager partitionedRepositoryManager);
diff --git a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneRawIndex.java b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneRawIndex.java
index ee2930d..7ee0ff5 100755
--- a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneRawIndex.java
+++ b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneRawIndex.java
@@ -14,6 +14,7 @@
  */
 package org.apache.geode.cache.lucene.internal;
 
+import org.apache.geode.cache.lucene.LuceneSerializer;
 import org.apache.geode.cache.lucene.internal.repository.RepositoryManager;
 import org.apache.geode.cache.lucene.internal.repository.serializer.HeterogeneousLuceneSerializer;
 import org.apache.geode.internal.cache.InternalCache;
@@ -25,8 +26,11 @@ public class LuceneRawIndex extends LuceneIndexImpl {
   }
 
   @Override
-  protected RepositoryManager createRepositoryManager() {
-    HeterogeneousLuceneSerializer mapper = new HeterogeneousLuceneSerializer(getFieldNames());
+  protected RepositoryManager createRepositoryManager(LuceneSerializer luceneSerializer) {
+    HeterogeneousLuceneSerializer mapper = (HeterogeneousLuceneSerializer) luceneSerializer;
+    if (mapper == null) {
+      mapper = new HeterogeneousLuceneSerializer(getFieldNames());
+    }
     RawLuceneRepositoryManager rawLuceneRepositoryManager =
         new RawLuceneRepositoryManager(this, mapper);
     return rawLuceneRepositoryManager;
diff --git a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneRegionListener.java b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneRegionListener.java
index 48462a0..8866249 100644
--- a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneRegionListener.java
+++ b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneRegionListener.java
@@ -24,6 +24,7 @@ import org.apache.geode.cache.EvictionAttributes;
 import org.apache.geode.cache.Region;
 import org.apache.geode.cache.RegionAttributes;
 import org.apache.geode.cache.asyncqueue.internal.AsyncEventQueueImpl;
+import org.apache.geode.cache.lucene.LuceneSerializer;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.cache.InternalRegionArguments;
 import org.apache.geode.internal.cache.RegionListener;
@@ -44,10 +45,13 @@ public class LuceneRegionListener implements RegionListener {
 
   private final String[] fields;
 
+  private LuceneSerializer serializer;
+
   private LuceneIndexImpl luceneIndex;
 
   public LuceneRegionListener(LuceneServiceImpl service, InternalCache cache, String indexName,
-      String regionPath, String[] fields, Analyzer analyzer, Map<String, Analyzer> fieldAnalyzers) {
+      String regionPath, String[] fields, Analyzer analyzer, Map<String, Analyzer> fieldAnalyzers,
+      LuceneSerializer serializer) {
     this.service = service;
     this.cache = cache;
     this.indexName = indexName;
@@ -55,6 +59,7 @@ public class LuceneRegionListener implements RegionListener {
     this.fields = fields;
     this.analyzer = analyzer;
     this.fieldAnalyzers = fieldAnalyzers;
+    this.serializer = serializer;
   }
 
   public String getRegionPath() {
@@ -101,7 +106,7 @@ public class LuceneRegionListener implements RegionListener {
           this.regionPath, this.fields, this.analyzer, this.fieldAnalyzers));
 
       luceneIndex = this.service.beforeDataRegionCreated(this.indexName, this.regionPath, attrs,
-          this.analyzer, this.fieldAnalyzers, aeqId, this.fields);
+          this.analyzer, this.fieldAnalyzers, aeqId, serializer, this.fields);
 
       // Add internal async event id
       internalRegionArgs.addInternalAsyncEventQueueId(aeqId);
diff --git a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneServiceImpl.java b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneServiceImpl.java
index 935bc64..60e196c 100644
--- a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneServiceImpl.java
+++ b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneServiceImpl.java
@@ -195,11 +195,12 @@ public class LuceneServiceImpl implements InternalLuceneService {
     Set<String> fieldsSet = fieldAnalyzers.keySet();
     String[] fields = (String[]) fieldsSet.toArray(new String[fieldsSet.size()]);
 
-    createIndex(indexName, regionPath, analyzer, fieldAnalyzers, fields);
+    createIndex(indexName, regionPath, analyzer, fieldAnalyzers, serializer, fields);
   }
 
   public void createIndex(final String indexName, String regionPath, final Analyzer analyzer,
-      final Map<String, Analyzer> fieldAnalyzers, final String... fields) {
+      final Map<String, Analyzer> fieldAnalyzers, final LuceneSerializer serializer,
+      final String... fields) {
 
     if (!regionPath.startsWith("/")) {
       regionPath = "/" + regionPath;
@@ -215,7 +216,7 @@ public class LuceneServiceImpl implements InternalLuceneService {
     }
 
     cache.addRegionListener(new LuceneRegionListener(this, cache, indexName, regionPath, fields,
-        analyzer, fieldAnalyzers));
+        analyzer, fieldAnalyzers, serializer));
   }
 
   /**
@@ -234,12 +235,13 @@ public class LuceneServiceImpl implements InternalLuceneService {
 
   public LuceneIndexImpl beforeDataRegionCreated(final String indexName, final String regionPath,
       RegionAttributes attributes, final Analyzer analyzer,
-      final Map<String, Analyzer> fieldAnalyzers, String aeqId, final String... fields) {
+      final Map<String, Analyzer> fieldAnalyzers, String aeqId, final LuceneSerializer serializer,
+      final String... fields) {
     LuceneIndexImpl index = createIndexObject(indexName, regionPath);
     index.setSearchableFields(fields);
     index.setAnalyzer(analyzer);
     index.setFieldAnalyzers(fieldAnalyzers);
-    index.setupRepositoryManager();
+    index.setupRepositoryManager(serializer);
     index.setupAEQ(attributes, aeqId);
     return index;
 
diff --git a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/xml/LuceneIndexCreation.java b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/xml/LuceneIndexCreation.java
index e4c1ea0..e98fb41 100644
--- a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/xml/LuceneIndexCreation.java
+++ b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/xml/LuceneIndexCreation.java
@@ -87,7 +87,8 @@ public class LuceneIndexCreation implements LuceneIndex, Extension<Region<?, ?>>
     Analyzer analyzer = this.fieldAnalyzers == null ? new StandardAnalyzer()
         : new PerFieldAnalyzerWrapper(new StandardAnalyzer(), this.fieldAnalyzers);
     try {
-      service.createIndex(getName(), getRegionPath(), analyzer, this.fieldAnalyzers,
+      // TODO: the null should be replaced with real serializer
+      service.createIndex(getName(), getRegionPath(), analyzer, this.fieldAnalyzers, null,
           getFieldNames());
     } catch (LuceneIndexExistsException e) {
       logger
diff --git a/geode-lucene/src/test/java/org/apache/geode/cache/lucene/LuceneIndexMaintenanceIntegrationTest.java b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/LuceneIndexMaintenanceIntegrationTest.java
index ad28164..03921ee 100644
--- a/geode-lucene/src/test/java/org/apache/geode/cache/lucene/LuceneIndexMaintenanceIntegrationTest.java
+++ b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/LuceneIndexMaintenanceIntegrationTest.java
@@ -41,6 +41,7 @@ import org.apache.geode.cache.lucene.internal.LuceneIndexForPartitionedRegion;
 import org.apache.geode.cache.lucene.internal.LuceneIndexImpl;
 import org.apache.geode.cache.lucene.internal.LuceneIndexStats;
 import org.apache.geode.cache.lucene.internal.filesystem.FileSystemStats;
+import org.apache.geode.cache.lucene.internal.repository.serializer.HeterogeneousLuceneSerializer;
 import org.apache.geode.cache.lucene.test.LuceneTestUtilities;
 import org.apache.geode.test.junit.categories.IntegrationTest;
 
@@ -107,6 +108,28 @@ public class LuceneIndexMaintenanceIntegrationTest extends LuceneIntegrationTest
   }
 
   @Test
+  public void useSerializerToIndex() throws Exception {
+    luceneService.createIndexFactory().setFields("title", "name")
+        .setLuceneSerializer(
+            new HeterogeneousLuceneSerializer(new String[] {"title", "description"}))
+        .create(INDEX_NAME, REGION_NAME);
+
+    Region region = createRegion(REGION_NAME, RegionShortcut.PARTITION);
+    region.put("object-1", new TestObject("title 1", "hello world"));
+    region.put("object-2", new TestObject("title 2", "this will not match"));
+    region.put("object-3", new TestObject("title 3", "hello world"));
+    region.put("object-4", new TestObject("hello world", "hello world"));
+
+    LuceneIndex index = luceneService.getIndex(INDEX_NAME, REGION_NAME);
+    luceneService.waitUntilFlushed(INDEX_NAME, REGION_NAME, WAIT_FOR_FLUSH_TIME,
+        TimeUnit.MILLISECONDS);
+    LuceneQuery query = luceneService.createLuceneQueryFactory().create(INDEX_NAME, REGION_NAME,
+        "description:\"hello world\"", DEFAULT_FIELD);
+    PageableLuceneQueryResults<Integer, TestObject> results = query.findPages();
+    assertEquals(3, results.size());
+  }
+
+  @Test
   public void statsAreUpdatedAfterACommit() throws Exception {
     luceneService.createIndexFactory().setFields("title", "description").create(INDEX_NAME,
         REGION_NAME);
diff --git a/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/LuceneIndexForPartitionedRegionTest.java b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/LuceneIndexForPartitionedRegionTest.java
index 985fd8a..075a751 100644
--- a/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/LuceneIndexForPartitionedRegionTest.java
+++ b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/LuceneIndexForPartitionedRegionTest.java
@@ -17,11 +17,13 @@ package org.apache.geode.cache.lucene.internal;
 import static org.junit.Assert.*;
 import static org.mockito.Mockito.*;
 
+import java.util.Properties;
+
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
 import org.junit.rules.ExpectedException;
-
+import org.mockito.ArgumentCaptor;
 import org.apache.geode.cache.AttributesFactory;
 import org.apache.geode.cache.Cache;
 import org.apache.geode.cache.CacheListener;
@@ -37,6 +39,7 @@ import org.apache.geode.cache.asyncqueue.AsyncEventQueue;
 import org.apache.geode.cache.asyncqueue.internal.AsyncEventQueueFactoryImpl;
 import org.apache.geode.cache.execute.FunctionService;
 import org.apache.geode.cache.execute.ResultCollector;
+import org.apache.geode.cache.lucene.LuceneSerializer;
 import org.apache.geode.cache.lucene.internal.directory.DumpDirectoryFiles;
 import org.apache.geode.internal.cache.GemFireCacheImpl;
 import org.apache.geode.internal.cache.InternalCache;
@@ -118,6 +121,37 @@ public class LuceneIndexForPartitionedRegionTest {
   }
 
   @Test
+  public void createRepositoryManagerWithNotNullSerializer() {
+    String name = "indexName";
+    String regionPath = "regionName";
+    InternalCache cache = Fakes.cache();
+    LuceneSerializer serializer = mock(LuceneSerializer.class);
+    LuceneIndexForPartitionedRegion index =
+        new LuceneIndexForPartitionedRegion(name, regionPath, cache);
+    index = spy(index);
+    index.setupRepositoryManager(serializer);
+    verify(index).createRepositoryManager(eq(serializer));
+  }
+
+  @Test
+  public void createRepositoryManagerWithNullSerializer() {
+    String name = "indexName";
+    String regionPath = "regionName";
+    String fields[] = {"field1", "field2"};
+    InternalCache cache = Fakes.cache();
+    ArgumentCaptor<LuceneSerializer> serializerCaptor =
+        ArgumentCaptor.forClass(LuceneSerializer.class);
+    LuceneIndexForPartitionedRegion index =
+        new LuceneIndexForPartitionedRegion(name, regionPath, cache);
+    index = spy(index);
+    when(index.getFieldNames()).thenReturn(fields);
+    index.setupRepositoryManager(null);
+    verify(index).createRepositoryManager(serializerCaptor.capture());
+    LuceneSerializer serializer = serializerCaptor.getValue();
+    assertNull(serializer);
+  }
+
+  @Test
   public void createAEQCallsCreateOnAEQFactory() {
     String name = "indexName";
     String regionPath = "regionName";
@@ -219,7 +253,7 @@ public class LuceneIndexForPartitionedRegionTest {
     LuceneIndexForPartitionedRegion spy = spy(index);
     doReturn(null).when(spy).createFileRegion(any(), any(), any(), any(), any());
     doReturn(null).when(spy).createAEQ(any(), any());
-    spy.setupRepositoryManager();
+    spy.setupRepositoryManager(null);
     spy.setupAEQ(region.getAttributes(), aeq);
     spy.initialize();
     return spy;
@@ -275,7 +309,7 @@ public class LuceneIndexForPartitionedRegionTest {
     LuceneIndexForPartitionedRegion spy = spy(index);
     doReturn(null).when(spy).createFileRegion(any(), any(), any(), any(), any());
     doReturn(null).when(spy).createAEQ((RegionAttributes) any(), any());
-    spy.setupRepositoryManager();
+    spy.setupRepositoryManager(null);
     spy.setupAEQ(any(), any());
     spy.initialize();
 
@@ -297,7 +331,7 @@ public class LuceneIndexForPartitionedRegionTest {
     LuceneIndexForPartitionedRegion spy = spy(index);
     doReturn(null).when(spy).createFileRegion(any(), any(), any(), any(), any());
     doReturn(null).when(spy).createAEQ(any(), any());
-    spy.setupRepositoryManager();
+    spy.setupRepositoryManager(null);
     spy.setupAEQ(any(), any());
     spy.initialize();
     spy.initialize();
@@ -323,7 +357,7 @@ public class LuceneIndexForPartitionedRegionTest {
     index = spy(index);
     when(index.getFieldNames()).thenReturn(fields);
     doReturn(aeq).when(index).createAEQ(any(), any());
-    index.setupRepositoryManager();
+    index.setupRepositoryManager(null);
     index.setupAEQ(cache.getRegionAttributes(regionPath), aeq.getId());
     index.initialize();
     PartitionedRegion region = (PartitionedRegion) cache.getRegion(regionPath);
diff --git a/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/LuceneRegionListenerJUnitTest.java b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/LuceneRegionListenerJUnitTest.java
new file mode 100644
index 0000000..b97eac9
--- /dev/null
+++ b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/LuceneRegionListenerJUnitTest.java
@@ -0,0 +1,67 @@
+/*
+ * 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.internal;
+
+import static org.mockito.Mockito.*;
+
+import java.util.concurrent.CopyOnWriteArraySet;
+
+import org.apache.geode.cache.DataPolicy;
+import org.apache.geode.cache.EvictionAlgorithm;
+import org.apache.geode.cache.EvictionAttributes;
+import org.apache.geode.cache.Region;
+import org.apache.geode.cache.RegionAttributes;
+import org.apache.geode.cache.lucene.LuceneSerializer;
+import org.apache.geode.internal.cache.InternalCache;
+import org.apache.geode.internal.cache.InternalRegionArguments;
+import org.apache.geode.test.fake.Fakes;
+import org.apache.geode.test.junit.categories.UnitTest;
+import org.apache.lucene.analysis.Analyzer;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+
+@Category(UnitTest.class)
+public class LuceneRegionListenerJUnitTest {
+
+  @Test
+  public void beforeDataRegionCreatedShouldHaveSerializer() {
+    String name = "indexName";
+    String regionPath = "regionName";
+    String[] fields = {"field1", "field2"};
+    String aeqId = LuceneServiceImpl.getUniqueIndexName(name, regionPath);
+    InternalCache cache = Fakes.cache();
+    final Region region = Fakes.region(regionPath, cache);
+    RegionAttributes attributes = region.getAttributes();
+    DataPolicy policy = attributes.getDataPolicy();
+    when(policy.withPartitioning()).thenReturn(true);
+    EvictionAttributes evictionAttributes = mock(EvictionAttributes.class);
+    when(attributes.getEvictionAttributes()).thenReturn(evictionAttributes);
+    CopyOnWriteArraySet set = new CopyOnWriteArraySet();
+    set.add(aeqId);
+    when(attributes.getAsyncEventQueueIds()).thenReturn(set);
+    when(evictionAttributes.getAlgorithm()).thenReturn(EvictionAlgorithm.NONE);
+    LuceneServiceImpl service = mock(LuceneServiceImpl.class);
+    Analyzer analyzer = mock(Analyzer.class);
+    LuceneSerializer serializer = mock(LuceneSerializer.class);
+    InternalRegionArguments internalRegionArgs = mock(InternalRegionArguments.class);
+    when(internalRegionArgs.addCacheServiceProfile(any())).thenReturn(internalRegionArgs);
+
+    LuceneRegionListener listener = new LuceneRegionListener(service, cache, name, "/" + regionPath,
+        fields, analyzer, null, serializer);
+    listener.beforeCreate(null, regionPath, attributes, internalRegionArgs);
+    verify(service).beforeDataRegionCreated(eq(name), eq("/" + regionPath), eq(attributes),
+        eq(analyzer), any(), eq(aeqId), eq(serializer), any());
+  }
+}
diff --git a/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/LuceneServiceImplJUnitTest.java b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/LuceneServiceImplJUnitTest.java
index 40e4429..c5ca8f8 100644
--- a/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/LuceneServiceImplJUnitTest.java
+++ b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/LuceneServiceImplJUnitTest.java
@@ -15,6 +15,8 @@
 package org.apache.geode.cache.lucene.internal;
 
 import static org.junit.Assert.*;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.mock;
 
 import java.lang.reflect.Field;
@@ -22,6 +24,8 @@ import java.util.Collections;
 import java.util.concurrent.TimeUnit;
 
 import org.apache.geode.cache.Region;
+import org.apache.geode.cache.lucene.LuceneIndexFactory;
+import org.apache.geode.cache.lucene.LuceneSerializer;
 import org.apache.geode.internal.cache.GemFireCacheImpl;
 import org.apache.geode.test.junit.categories.UnitTest;
 import org.junit.Before;
@@ -29,6 +33,7 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
 import org.junit.rules.ExpectedException;
+import org.mockito.Mockito;
 
 @Category(UnitTest.class)
 public class LuceneServiceImplJUnitTest {
@@ -50,6 +55,17 @@ public class LuceneServiceImplJUnitTest {
   }
 
   @Test
+  public void shouldPassSerializer() {
+    service = Mockito.spy(service);
+    LuceneIndexFactory factory = service.createIndexFactory();
+    LuceneSerializer serializer = mock(LuceneSerializer.class);
+    factory.setLuceneSerializer(serializer);
+    factory.setFields("field1", "field2");
+    factory.create("index", "region");
+    Mockito.verify(service).createIndex(eq("index"), eq("region"), any(), eq(serializer));
+  }
+
+  @Test
   public void shouldThrowIllegalArgumentExceptionIfFieldsAreMissing() {
     thrown.expect(IllegalArgumentException.class);
     service.createIndexFactory().create("index", "region");

-- 
To stop receiving notification emails like this one, please contact
['"commits@geode.apache.org" <co...@geode.apache.org>'].