Add support to disable OQL Indexes created by Spring Session by default.

Resolves gh-46.
This commit is contained in:
John Blum
2019-11-20 14:25:29 -08:00
parent b82a43d625
commit 6778cd0953
3 changed files with 85 additions and 14 deletions

View File

@@ -27,15 +27,21 @@ import org.junit.Test;
import org.apache.geode.DataSerializer;
import org.apache.geode.cache.GemFireCache;
import org.apache.geode.cache.Region;
import org.apache.geode.cache.RegionShortcut;
import org.apache.geode.cache.client.ClientRegionShortcut;
import org.apache.geode.cache.query.Index;
import org.apache.geode.internal.InternalDataSerializer;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.data.gemfire.GemfireTemplate;
import org.springframework.data.gemfire.config.annotation.ClientCacheApplication;
import org.springframework.data.gemfire.tests.integration.SpringApplicationContextIntegrationTestsSupport;
import org.springframework.data.gemfire.tests.mock.annotation.EnableGemFireMockObjects;
import org.springframework.session.SessionRepository;
import org.springframework.session.data.gemfire.GemFireOperationsSessionRepository;
import org.springframework.session.data.gemfire.expiration.SessionExpirationPolicy;
import org.springframework.session.data.gemfire.serialization.SessionSerializer;
import org.springframework.session.data.gemfire.serialization.data.AbstractDataSerializableSessionSerializer;
@@ -43,10 +49,13 @@ import org.springframework.session.data.gemfire.serialization.data.provider.Data
import org.springframework.session.data.gemfire.serialization.pdx.support.PdxSerializerSessionSerializerAdapter;
/**
* The GemFireHttpSessionConfigurationIntegrationTests class...
* Integration Tests for {@link GemFireHttpSessionConfiguration}.
*
* @author John Blum
* @since 1.0.0
* @see org.junit.Test
* @see org.mockito.Mockito
* @see org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration
* @since 1.1.0
*/
@SuppressWarnings("unused")
public class GemFireHttpSessionConfigurationIntegrationTests extends SpringApplicationContextIntegrationTestsSupport {
@@ -64,6 +73,62 @@ public class GemFireHttpSessionConfigurationIntegrationTests extends SpringAppli
.orElse(null)).isNotNull();
}
@Test
public void basicSpringSessionGemFireConfigurationIsCorrect() {
newApplicationContext(BasicSpringSessionGemFireConfiguration.class);
Region<?, ?> sessionsRegion =
getApplicationContext().getBean(GemFireHttpSessionConfiguration.DEFAULT_SESSION_REGION_NAME, Region.class);
Index principleNameIndex = getApplicationContext().getBean("principalNameIndex", Index.class);
GemfireTemplate sessionsRegionTemplate =
getApplicationContext().getBean("sessionRegionTemplate", GemfireTemplate.class);
assertThat(sessionsRegion).isNotNull();
assertThat(sessionsRegion.getName()).isEqualTo(GemFireHttpSessionConfiguration.DEFAULT_SESSION_REGION_NAME);
assertThat(principleNameIndex).isNotNull();
assertThat(principleNameIndex.getName()).isEqualTo("principalNameIndex");
assertThat(principleNameIndex.getRegion()).isEqualTo(sessionsRegion);
assertThat(getApplicationContext().getBean(SessionRepository.class)).isInstanceOf(GemFireOperationsSessionRepository.class);
assertThat(sessionsRegionTemplate).isNotNull();
assertThat(sessionsRegionTemplate.getRegion()).isEqualTo(sessionsRegion);
}
@Test
public void basicSpringSessionGemFireConfigurationWithIndexesDisableIsCorrect() {
try {
System.setProperty("spring.profiles.active", "disable-spring-session-data-gemfire-indexes");
assertThat(System.getProperty("spring.profiles.active")).contains("disable-spring-session-data-gemfire-indexes");
ConfigurableApplicationContext applicationContext =
newApplicationContext(BasicSpringSessionGemFireConfiguration.class);
assertThat(applicationContext).isNotNull();
assertThat(applicationContext.getEnvironment().getActiveProfiles()).contains("disable-spring-session-data-gemfire-indexes");
Region<?, ?> sessionsRegion =
getApplicationContext().getBean(GemFireHttpSessionConfiguration.DEFAULT_SESSION_REGION_NAME, Region.class);
GemfireTemplate sessionsRegionTemplate =
getApplicationContext().getBean("sessionRegionTemplate", GemfireTemplate.class);
assertThat(sessionsRegion).isNotNull();
assertThat(sessionsRegion.getName()).isEqualTo(GemFireHttpSessionConfiguration.DEFAULT_SESSION_REGION_NAME);
assertThat(getApplicationContext().containsBean("principalNameIndex")).isFalse();
assertThat(getApplicationContext().getBean(SessionRepository.class)).isInstanceOf(GemFireOperationsSessionRepository.class);
assertThat(sessionsRegionTemplate).isNotNull();
assertThat(sessionsRegionTemplate.getRegion()).isEqualTo(sessionsRegion);
}
finally {
System.clearProperty("spring.profiles.active");
}
}
private void testUsesDataSerialization(Class<? extends DataSerializer> expectedDataSerializerType) {
GemFireHttpSessionConfiguration configuration =
@@ -147,6 +212,11 @@ public class GemFireHttpSessionConfigurationIntegrationTests extends SpringAppli
assertThat(properties.sessionSerializerBeanName()).isEqualTo("MockSessionSerializer");
}
@ClientCacheApplication
@EnableGemFireMockObjects
@EnableGemFireHttpSession(clientRegionShortcut = ClientRegionShortcut.LOCAL, poolName = "DEFAULT")
static class BasicSpringSessionGemFireConfiguration { }
@ClientCacheApplication
@EnableGemFireMockObjects
@EnableGemFireHttpSession(

View File

@@ -55,6 +55,7 @@ import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.DependsOn;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.ImportAware;
import org.springframework.context.annotation.Profile;
import org.springframework.core.annotation.AnnotationAttributes;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.Environment;
@@ -1172,6 +1173,7 @@ public class GemFireHttpSessionConfiguration extends AbstractGemFireHttpSessionC
*/
@Bean
@DependsOn(DEFAULT_SESSION_REGION_NAME)
@Profile("!disable-spring-session-data-gemfire-indexes")
public IndexFactoryBean principalNameIndex(GemFireCache gemfireCache) {
IndexFactoryBean principalNameIndex = new IndexFactoryBean();
@@ -1198,6 +1200,7 @@ public class GemFireHttpSessionConfiguration extends AbstractGemFireHttpSessionC
*/
@Bean
@DependsOn(DEFAULT_SESSION_REGION_NAME)
@Profile("!disable-spring-session-data-gemfire-indexes")
public SessionAttributesIndexFactoryBean sessionAttributesIndex(GemFireCache gemfireCache) {
SessionAttributesIndexFactoryBean sessionAttributesIndex = new SessionAttributesIndexFactoryBean();

View File

@@ -13,7 +13,6 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.session.data.gemfire.config.annotation.web.http;
import static org.assertj.core.api.Assertions.assertThat;
@@ -29,7 +28,7 @@ import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyZeroInteractions;
import static org.mockito.Mockito.verifyNoInteractions;
import static org.mockito.Mockito.when;
import java.lang.reflect.Field;
@@ -72,10 +71,9 @@ import org.springframework.session.data.gemfire.support.IsDirtyPredicate;
import org.springframework.util.ReflectionUtils;
/**
* Unit tests for {@link GemFireHttpSessionConfiguration} class.
* Unit Tests for {@link GemFireHttpSessionConfiguration} class.
*
* @author John Blum
* @since 1.1.0
* @see org.junit.Test
* @see org.mockito.Mockito
* @see org.apache.geode.cache.Cache
@@ -95,6 +93,7 @@ import org.springframework.util.ReflectionUtils;
* @see org.springframework.session.Session
* @see org.springframework.session.data.gemfire.GemFireOperationsSessionRepository
* @see org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration
* @since 1.1.0
*/
public class GemFireHttpSessionConfigurationTests {
@@ -652,7 +651,7 @@ public class GemFireHttpSessionConfigurationTests {
verify(this.gemfireConfiguration, never()).getServerRegionShortcut();
verify(this.gemfireConfiguration, never()).getSessionExpirationPolicyBeanName();
verify(this.gemfireConfiguration, never()).getSessionSerializerBeanName();
verifyZeroInteractions(mockEnvironment);
verifyNoInteractions(mockEnvironment);
}
@Test
@@ -674,7 +673,7 @@ public class GemFireHttpSessionConfigurationTests {
verify(this.gemfireConfiguration, never()).getServerRegionShortcut();
verify(this.gemfireConfiguration, never()).getSessionExpirationPolicyBeanName();
verify(this.gemfireConfiguration, never()).getSessionSerializerBeanName();
verifyZeroInteractions(mockEnvironment);
verifyNoInteractions(mockEnvironment);
}
@Test
@@ -762,14 +761,13 @@ public class GemFireHttpSessionConfigurationTests {
assertThat(sessionRegionFactoryBean).isNotNull();
assertThat(sessionRegionFactoryBean.getClientRegionShortcut()).isEqualTo(ClientRegionShortcut.CACHING_PROXY);
assertThat(sessionRegionFactoryBean.getCache()).isEqualTo(mockGemFireCache);
assertThat(this.<String>getField(sessionRegionFactoryBean, "poolName")).isEqualTo("TestPool");
assertThat(this.<RegionAttributes<Object, Session>>getField(sessionRegionFactoryBean,
"regionAttributes")).isEqualTo(mockRegionAttributes);
assertThat(this.<String>getField(sessionRegionFactoryBean, "regionName")).isEqualTo("TestRegion");
assertThat(GemFireHttpSessionConfigurationTests.<String>getField(sessionRegionFactoryBean, "poolName")).isEqualTo("TestPool");
assertThat(GemFireHttpSessionConfigurationTests.<RegionAttributes<Object, Session>>getField(sessionRegionFactoryBean, "regionAttributes")).isEqualTo(mockRegionAttributes);
assertThat(GemFireHttpSessionConfigurationTests.<String>getField(sessionRegionFactoryBean, "regionName")).isEqualTo("TestRegion");
assertThat(sessionRegionFactoryBean.getServerRegionShortcut()).isEqualTo(RegionShortcut.PARTITION_REDUNDANT);
verifyZeroInteractions(mockGemFireCache);
verifyZeroInteractions(mockRegionAttributes);
verifyNoInteractions(mockGemFireCache);
verifyNoInteractions(mockRegionAttributes);
}
@Test