GEODE-8779: Register interest only when local cache is enabled. (#5836)

diff --git a/extensions/geode-modules-session-internal/src/main/java/org/apache/geode/modules/session/internal/common/ClientServerSessionCache.java b/extensions/geode-modules-session-internal/src/main/java/org/apache/geode/modules/session/internal/common/ClientServerSessionCache.java
index 603248a..7633f36 100644
--- a/extensions/geode-modules-session-internal/src/main/java/org/apache/geode/modules/session/internal/common/ClientServerSessionCache.java
+++ b/extensions/geode-modules-session-internal/src/main/java/org/apache/geode/modules/session/internal/common/ClientServerSessionCache.java
@@ -23,6 +23,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.geode.cache.DataPolicy;
 import org.apache.geode.cache.GemFireCache;
 import org.apache.geode.cache.InterestResultPolicy;
 import org.apache.geode.cache.Region;
@@ -127,7 +128,9 @@
       LOG.debug("Retrieved session region: " + this.sessionRegion);
 
       // Register interest in case users provide their own client cache region
-      sessionRegion.registerInterestForAllKeys(InterestResultPolicy.KEYS);
+      if (sessionRegion.getAttributes().getDataPolicy() != DataPolicy.EMPTY) {
+        sessionRegion.registerInterestForAllKeys(InterestResultPolicy.KEYS);
+      }
     }
   }
 
@@ -175,7 +178,9 @@
     // Create the region
     Region region = factory.create(regionName);
 
-    region.registerInterestForAllKeys(InterestResultPolicy.KEYS);
+    if (enableLocalCache) {
+      region.registerInterestForAllKeys(InterestResultPolicy.KEYS);
+    }
     return region;
   }
 }
diff --git a/extensions/geode-modules/src/main/java/org/apache/geode/modules/session/catalina/ClientServerSessionCache.java b/extensions/geode-modules/src/main/java/org/apache/geode/modules/session/catalina/ClientServerSessionCache.java
index 107fb32..8f54abd 100644
--- a/extensions/geode-modules/src/main/java/org/apache/geode/modules/session/catalina/ClientServerSessionCache.java
+++ b/extensions/geode-modules/src/main/java/org/apache/geode/modules/session/catalina/ClientServerSessionCache.java
@@ -20,6 +20,7 @@
 
 import javax.servlet.http.HttpSession;
 
+import org.apache.geode.cache.DataPolicy;
 import org.apache.geode.cache.GemFireCache;
 import org.apache.geode.cache.InterestResultPolicy;
 import org.apache.geode.cache.Region;
@@ -189,7 +190,9 @@
         sessionRegion.getAttributesMutator().addCacheListener(new SessionExpirationCacheListener());
       }
 
-      sessionRegion.registerInterestForAllKeys(InterestResultPolicy.KEYS);
+      if (sessionRegion.getAttributes().getDataPolicy() != DataPolicy.EMPTY) {
+        sessionRegion.registerInterestForAllKeys(InterestResultPolicy.KEYS);
+      }
     }
   }
 
@@ -224,10 +227,11 @@
   Region<String, HttpSession> createLocalSessionRegionWithRegisterInterest() {
     Region<String, HttpSession> region = createLocalSessionRegion();
 
-    // register interest are needed for proxy or caching-proxy client:
+    // register interest are needed for caching proxy client:
     // to get updates from server if local cache is enabled;
-    // to get callbacks for listener invocation for proxy client.
-    region.registerInterestForAllKeys(InterestResultPolicy.KEYS);
+    if (region.getAttributes().getDataPolicy() != DataPolicy.EMPTY) {
+      region.registerInterestForAllKeys(InterestResultPolicy.KEYS);
+    }
 
     return region;
   }
diff --git a/extensions/geode-modules/src/test/java/org/apache/geode/modules/session/catalina/AbstractSessionCacheTest.java b/extensions/geode-modules/src/test/java/org/apache/geode/modules/session/catalina/AbstractSessionCacheTest.java
index 32cecd8..cfc1d6b 100644
--- a/extensions/geode-modules/src/test/java/org/apache/geode/modules/session/catalina/AbstractSessionCacheTest.java
+++ b/extensions/geode-modules/src/test/java/org/apache/geode/modules/session/catalina/AbstractSessionCacheTest.java
@@ -18,6 +18,7 @@
 import static org.apache.geode.util.internal.UncheckedUtils.uncheckedCast;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.doThrow;
 import static org.mockito.Mockito.mock;
@@ -51,7 +52,8 @@
 
 
   protected SessionManager sessionManager = mock(SessionManager.class);
-  protected Region<String, HttpSession> sessionRegion = uncheckedCast(mock(Region.class));
+  protected Region<String, HttpSession> sessionRegion =
+      uncheckedCast(mock(Region.class, RETURNS_DEEP_STUBS));
   protected DistributedSystem distributedSystem = mock(DistributedSystem.class);
   protected Log logger = mock(Log.class);
   protected Execution<Object, Object, List<Object>> emptyExecution =
diff --git a/extensions/geode-modules/src/test/java/org/apache/geode/modules/session/catalina/ClientServerSessionCacheTest.java b/extensions/geode-modules/src/test/java/org/apache/geode/modules/session/catalina/ClientServerSessionCacheTest.java
index d89901b..d3cd56b 100644
--- a/extensions/geode-modules/src/test/java/org/apache/geode/modules/session/catalina/ClientServerSessionCacheTest.java
+++ b/extensions/geode-modules/src/test/java/org/apache/geode/modules/session/catalina/ClientServerSessionCacheTest.java
@@ -19,10 +19,12 @@
 import static org.apache.geode.util.internal.UncheckedUtils.uncheckedCast;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
+import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.any;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.doThrow;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
@@ -234,7 +236,7 @@
     doReturn(sessionRegion).when(cache).getRegion(sessionRegionName);
     doReturn(attributes).when(sessionRegion).getAttributes();
     doReturn(cacheListeners).when(attributes).getCacheListeners();
-    when(attributes.getDataPolicy()).thenReturn(DataPolicy.EMPTY);
+    when(attributes.getDataPolicy()).thenReturn(DataPolicy.DEFAULT);
 
     sessionCache.initialize();
 
@@ -242,6 +244,20 @@
   }
 
   @Test
+  public void createOrRetrieveRegionWithNonNullSessionProxyRegionNotRegistersInterestIfEmpty() {
+    final CacheListener<String, HttpSession>[] cacheListeners =
+        uncheckedCast(new CacheListener[] {new SessionExpirationCacheListener()});
+    doReturn(sessionRegion).when(cache).getRegion(sessionRegionName);
+    doReturn(attributes).when(sessionRegion).getAttributes();
+    doReturn(cacheListeners).when(attributes).getCacheListeners();
+    when(attributes.getDataPolicy()).thenReturn(DataPolicy.EMPTY);
+
+    sessionCache.initialize();
+
+    verify(sessionRegion, never()).registerInterestForAllKeys(InterestResultPolicy.KEYS);
+  }
+
+  @Test
   public void touchSessionsInvokesPRFunctionForPRAndDoesNotThrowExceptionWhenFunctionDoesNotThrowException() {
     final Set<String> sessionIds = new HashSet<>();
 
@@ -325,7 +341,7 @@
   public void registerInterestForSessionRegion() {
     final SessionManager manager = mock(SessionManager.class);
     final ClientCache clientCache = mock(ClientCache.class);
-    final Region region = mock(Region.class);
+    final Region<?, ?> region = mock(Region.class, RETURNS_DEEP_STUBS);
     final ClientServerSessionCache cache = spy(new ClientServerSessionCache(manager, clientCache));
     doReturn(region).when(cache).createLocalSessionRegion();
 
@@ -334,4 +350,19 @@
     verify(region).registerInterestForAllKeys(InterestResultPolicy.KEYS);
   }
 
+  @Test
+  public void doesNotRegisterInterestIfLocalCacheNotEnabled() {
+    final SessionManager manager = mock(SessionManager.class);
+    final ClientCache clientCache = mock(ClientCache.class);
+    final Region<?, ?> region = mock(Region.class);
+    final RegionAttributes<?, ?> attributes = mock(RegionAttributes.class);
+    final ClientServerSessionCache cache = spy(new ClientServerSessionCache(manager, clientCache));
+    doReturn(region).when(cache).createLocalSessionRegion();
+    doReturn(attributes).when(region).getAttributes();
+    doReturn(DataPolicy.EMPTY).when(attributes).getDataPolicy();
+
+    cache.createLocalSessionRegionWithRegisterInterest();
+
+    verify(region, never()).registerInterestForAllKeys(InterestResultPolicy.KEYS);
+  }
 }