Polish GemFire

* Remove Compile Warnings
* Correct @since
* Add tests
* Add to What's New in documentation
This commit is contained in:
Rob Winch
2016-01-28 13:43:33 -06:00
parent 019e0083b0
commit 22f6f9dd72
18 changed files with 74 additions and 48 deletions

View File

@@ -26,6 +26,7 @@ Additional features include:
Below are the highlights of what is new in Spring Session 1.1. You can find a complete list in the https://github.com/spring-projects/spring-session/issues?utf8=%E2%9C%93&q=milestone%3A%221.1.0+M1%22[changelog].
* https://github.com/spring-projects/spring-session/issues/148[#148] - Added <<httpsession-gemfire,GemFire Support>>
* https://github.com/spring-projects/spring-session/issues/7[#7] - link:guides/findbyusername.html[Query by Username]
* https://github.com/spring-projects/spring-session/issues/299[#299] - link:guides/custom-cookie.html[Customize Cookie Creation]
* https://github.com/spring-projects/spring-session/issues/4[#4] - Add <<httpsession-httpsessionlistener,HttpSessionListener>> support

View File

@@ -24,8 +24,10 @@ import org.springframework.context.annotation.ImportResource;
@ImportResource("META-INF/spring/session-server.xml") // <2>
public class Application {
@SuppressWarnings("resource")
public static void main(final String[] args) {
new AnnotationConfigApplicationContext(Application.class).registerShutdownHook();
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(Application.class);
context.registerShutdownHook();
}
}
// tag::end[]

View File

@@ -126,7 +126,6 @@ public class GemFireCacheServerReadyBeanPostProcessor implements BeanPostProcess
}, duration);
}
@SuppressWarnings("unused")
boolean waitOnCondition(Condition condition) {
return waitOnCondition(condition, DEFAULT_WAIT_DURATION);
}

View File

@@ -81,6 +81,7 @@ public class ServerConfig {
return cacheServerFactory;
}
@SuppressWarnings("resource")
public static void main(final String[] args) throws IOException { // <5>
new AnnotationConfigApplicationContext(ServerConfig.class)
.registerShutdownHook();

View File

@@ -61,7 +61,6 @@ import com.gemstone.gemfire.cache.server.CacheServer;
* @see com.gemstone.gemfire.cache.server.CacheServer
* @since 1.1.0
*/
@SuppressWarnings("unused")
public class AbstractGemFireIntegrationTests {
protected static final boolean DEFAULT_ENABLE_QUERY_DEBUGGING = false;
@@ -106,7 +105,7 @@ public class AbstractGemFireIntegrationTests {
}
/* (non-Javadoc) */
protected static List<String> createJavaProcessCommandLine(Class type, String... args) {
protected static List<String> createJavaProcessCommandLine(Class<? extends Object> type, String... args) {
List<String> commandLine = new ArrayList<String>();
String javaHome = System.getProperty("java.home");
@@ -156,7 +155,7 @@ public class AbstractGemFireIntegrationTests {
}
/* (non-Javadoc) */
protected static Process run(Class type, File directory, String... args) throws IOException {
protected static Process run(Class<? extends Object> type, File directory, String... args) throws IOException {
return new ProcessBuilder()
.command(createJavaProcessCommandLine(type, args))
.directory(directory)
@@ -348,7 +347,7 @@ public class AbstractGemFireIntegrationTests {
List<String> regionList = new ArrayList<String>(regions.size());
for (Region region : regions) {
for (Region<?,?> region : regions) {
regionList.add(region.getFullPath());
}

View File

@@ -85,13 +85,12 @@ import com.gemstone.gemfire.cache.client.Pool;
* @see com.gemstone.gemfire.cache.client.ClientCache
* @see com.gemstone.gemfire.cache.client.Pool
* @see com.gemstone.gemfire.cache.server.CacheServer
* @since 1.0.0
* @since 1.1.0
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes =
ClientServerGemFireOperationsSessionRepositoryIntegrationTests.SpringSessionGemFireClientConfiguration.class)
@WebAppConfiguration
@SuppressWarnings("unused")
public class ClientServerGemFireOperationsSessionRepositoryIntegrationTests extends AbstractGemFireIntegrationTests {
private static final int MAX_INACTIVE_INTERVAL_IN_SECONDS = 1;
@@ -124,7 +123,6 @@ public class ClientServerGemFireOperationsSessionRepositoryIntegrationTests exte
String.format("-Dspring.session.data.gemfire.port=%1$d", port));
assertThat(waitForCacheServerToStart(SpringSessionGemFireServerConfiguration.SERVER_HOSTNAME, port)).isTrue();
//assertThat(waitForProcessToStart(gemfireServer, processWorkingDirectory)).isTrue();
System.err.printf("GemFire Server [startup time = %1$d ms]%n", System.currentTimeMillis() - t0);
}
@@ -209,7 +207,7 @@ public class ClientServerGemFireOperationsSessionRepositoryIntegrationTests exte
MAX_INACTIVE_INTERVAL_IN_SECONDS + 1));
assertThat(sessionEvent).isInstanceOf(SessionExpiredEvent.class);
assertThat(sessionEvent.<ExpiringSession>getSessionId()).isEqualTo(expectedSession.getId());
assertThat(sessionEvent.getSessionId()).isEqualTo(expectedSession.getId());
ExpiringSession expiredSession = gemfireSessionRepository.getSession(expectedSession.getId());
@@ -230,7 +228,7 @@ public class ClientServerGemFireOperationsSessionRepositoryIntegrationTests exte
sessionEvent = sessionEventListener.waitForSessionEvent(500);
assertThat(sessionEvent).isInstanceOf(SessionDeletedEvent.class);
assertThat(sessionEvent.<ExpiringSession>getSessionId()).isEqualTo(expectedSession.getId());
assertThat(sessionEvent.getSessionId()).isEqualTo(expectedSession.getId());
ExpiringSession deletedSession = gemfireSessionRepository.getSession(expectedSession.getId());
@@ -299,6 +297,7 @@ public class ClientServerGemFireOperationsSessionRepositoryIntegrationTests exte
}
// used for debugging purposes
@SuppressWarnings("resource")
public static void main(final String[] args) {
ConfigurableApplicationContext applicationContext = new AnnotationConfigApplicationContext(
SpringSessionGemFireClientConfiguration.class);
@@ -362,8 +361,10 @@ public class ClientServerGemFireOperationsSessionRepositoryIntegrationTests exte
return cacheServerFactory;
}
@SuppressWarnings("resource")
public static void main(final String[] args) throws IOException {
new AnnotationConfigApplicationContext(SpringSessionGemFireServerConfiguration.class).registerShutdownHook();
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringSessionGemFireServerConfiguration.class);
context.registerShutdownHook();
writeProcessControlFile(WORKING_DIRECTORY);
}
}

View File

@@ -31,6 +31,7 @@ import org.junit.runner.RunWith;
import org.springframework.context.annotation.Bean;
import org.springframework.data.gemfire.CacheFactoryBean;
import org.springframework.session.ExpiringSession;
import org.springframework.session.Session;
import org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSession;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@@ -65,7 +66,6 @@ import com.gemstone.gemfire.pdx.PdxWriter;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
@WebAppConfiguration
@SuppressWarnings("unused")
public class GemFireOperationsSessionRepositoryIntegrationTests extends AbstractGemFireIntegrationTests {
private static final int MAX_INACTIVE_INTERVAL_IN_SECONDS = 300;
@@ -167,6 +167,19 @@ public class GemFireOperationsSessionRepositoryIntegrationTests extends Abstract
assertThat(nonExistingPrincipalSessions.isEmpty()).isTrue();
}
@Test
public void doesNotFindAfterPrincipalRemoved() {
String username = "doesNotFindAfterPrincipalRemoved";
ExpiringSession session = save(touch(createSession(username)));
session.setAttribute(Session.PRINCIPAL_NAME_ATTRIBUTE_NAME, null);
save(session);
Map<String, ExpiringSession> nonExistingPrincipalSessions = doFindByPrincipalName(username);
assertThat(nonExistingPrincipalSessions).isNotNull();
assertThat(nonExistingPrincipalSessions.isEmpty()).isTrue();
}
@Test
public void saveAndReadSessionWithAttributes() {
ExpiringSession expectedSession = gemfireSessionRepository.createSession();

View File

@@ -67,7 +67,6 @@ import com.gemstone.gemfire.cache.RegionShortcut;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
@WebAppConfiguration
@SuppressWarnings("unused")
public class EnableGemFireHttpSessionEventsIntegrationTests extends AbstractGemFireIntegrationTests {
private static final int MAX_INACTIVE_INTERVAL_IN_SECONDS = 1;

View File

@@ -48,7 +48,6 @@ import com.gemstone.gemfire.cache.Region;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
@WebAppConfiguration
@SuppressWarnings("unused")
public class GemFireHttpSessionConfigurationXmlTests extends AbstractGemFireIntegrationTests {
@Autowired

View File

@@ -316,6 +316,7 @@ public abstract class AbstractGemFireOperationsSessionRepository extends CacheLi
* @see com.gemstone.gemfire.Delta
* @see com.gemstone.gemfire.Instantiator
*/
@SuppressWarnings("serial")
public static class GemFireSession implements Comparable<ExpiringSession>, DataSerializable, Delta, ExpiringSession {
protected static final boolean DEFAULT_ALLOW_JAVA_SERIALIZATION = true;
@@ -590,6 +591,7 @@ public abstract class AbstractGemFireOperationsSessionRepository extends CacheLi
* @see com.gemstone.gemfire.Delta
* @see com.gemstone.gemfire.Instantiator
*/
@SuppressWarnings("serial")
public static class GemFireSessionAttributes implements DataSerializable, Delta {
protected static final boolean DEFAULT_ALLOW_JAVA_SERIALIZATION = true;

View File

@@ -103,7 +103,6 @@ import com.gemstone.gemfire.cache.client.ClientRegionShortcut;
*/
@Documented
@Retention(RetentionPolicy.RUNTIME)
@SuppressWarnings("unused")
@Target(ElementType.TYPE)
@Configuration
@Import(GemFireHttpSessionConfiguration.class)

View File

@@ -71,7 +71,6 @@ import com.gemstone.gemfire.cache.client.ClientRegionShortcut;
* @since 1.1.0
*/
@Configuration
@SuppressWarnings("unused")
public class GemFireHttpSessionConfiguration extends SpringHttpSessionConfiguration
implements BeanClassLoaderAware, ImportAware {

View File

@@ -32,7 +32,7 @@ import com.gemstone.gemfire.internal.cache.GemFireCacheImpl;
* and is used by Spring Session's GemFire adapter support classes.
*
* @author John Blum
* @since 1.0.0
* @since 1.1.0
*/
public abstract class GemFireUtils {

View File

@@ -773,6 +773,7 @@ public class AbstractGemFireOperationsSessionRepositoryTest {
@Test
public void sessionToData() throws Exception {
@SuppressWarnings("serial")
GemFireSession session = new GemFireSession("1") {
@Override void writeObject(Object obj, DataOutput out) throws IOException {
assertThat(obj).isInstanceOf(GemFireSessionAttributes.class);
@@ -811,6 +812,7 @@ public class AbstractGemFireOperationsSessionRepositoryTest {
when(mockDataInput.readLong()).thenReturn(expectedCreationTime).thenReturn(expectedLastAccessedTime);
when(mockDataInput.readInt()).thenReturn(expectedMaxInactiveIntervalInSeconds);
@SuppressWarnings("serial")
GemFireSession session = new GemFireSession("1") {
@Override @SuppressWarnings("unchecked")
<T> T readObject(DataInput in) throws ClassNotFoundException, IOException {
@@ -852,6 +854,7 @@ public class AbstractGemFireOperationsSessionRepositoryTest {
final long beforeOrAtCreationTime = System.currentTimeMillis();
@SuppressWarnings("serial")
GemFireSession expectedSession = new GemFireSession("123") {
@Override void writeObject(Object obj, DataOutput out) throws IOException {
assertThat(obj).isInstanceOf(GemFireSessionAttributes.class);
@@ -869,6 +872,7 @@ public class AbstractGemFireOperationsSessionRepositoryTest {
expectedSession.toData(new DataOutputStream(outBytes));
@SuppressWarnings("serial")
GemFireSession deserializedSession = new GemFireSession("0") {
@SuppressWarnings("unchecked")
@Override <T> T readObject(DataInput in) throws ClassNotFoundException, IOException {
@@ -946,6 +950,7 @@ public class AbstractGemFireOperationsSessionRepositoryTest {
public void sessionToDelta() throws Exception {
final DataOutput mockDataOutput = mock(DataOutput.class);
@SuppressWarnings("serial")
GemFireSession session = new GemFireSession() {
@Override void writeObject(Object obj, DataOutput out) throws IOException {
assertThat(String.valueOf(obj)).isEqualTo("test");
@@ -976,6 +981,7 @@ public class AbstractGemFireOperationsSessionRepositoryTest {
when(mockDataInput.readLong()).thenReturn(1l);
when(mockDataInput.readInt()).thenReturn(600).thenReturn(0);
@SuppressWarnings("serial")
GemFireSession session = new GemFireSession() {
@Override @SuppressWarnings("unchecked")
<T> T readObject(DataInput in) throws ClassNotFoundException, IOException {
@@ -1086,6 +1092,7 @@ public class AbstractGemFireOperationsSessionRepositoryTest {
public void sessionAttributesToData() throws Exception {
final DataOutput mockDataOutput = mock(DataOutput.class);
@SuppressWarnings("serial")
GemFireSessionAttributes sessionAttributes = new GemFireSessionAttributes() {
private int count = 0;
@Override void writeObject(Object obj, DataOutput out) throws IOException {
@@ -1111,6 +1118,7 @@ public class AbstractGemFireOperationsSessionRepositoryTest {
when(mockDataInput.readInt()).thenReturn(2);
when(mockDataInput.readUTF()).thenReturn("attrOne").thenReturn("attrTwo");
@SuppressWarnings("serial")
GemFireSessionAttributes sessionAttributes = new GemFireSessionAttributes() {
private int count = 0;
@Override @SuppressWarnings("unchecked")
@@ -1154,6 +1162,7 @@ public class AbstractGemFireOperationsSessionRepositoryTest {
public void sessionAttributesToDelta() throws Exception {
final DataOutput mockDataOutput = mock(DataOutput.class);
@SuppressWarnings("serial")
GemFireSessionAttributes sessionAttributes = new GemFireSessionAttributes() {
private int count = 0;
@Override void writeObject(Object obj, DataOutput out) throws IOException {
@@ -1203,6 +1212,7 @@ public class AbstractGemFireOperationsSessionRepositoryTest {
when(mockDataInput.readInt()).thenReturn(2);
when(mockDataInput.readUTF()).thenReturn("attrOne").thenReturn("attrTwo");
@SuppressWarnings("serial")
GemFireSessionAttributes sessionAttributes = new GemFireSessionAttributes() {
private int count = 0;
@Override @SuppressWarnings("unchecked")
@@ -1262,7 +1272,6 @@ public class AbstractGemFireOperationsSessionRepositoryTest {
TestFramework.runOnce(new ThreadSafeSessionTest());
}
@SuppressWarnings("unused")
protected static final class ThreadSafeSessionTest extends MultithreadedTestCase {
private final long beforeOrAtCreationTime = System.currentTimeMillis();

View File

@@ -65,7 +65,7 @@ import com.gemstone.gemfire.cache.query.SelectResults;
* @see org.mockito.Mockito
* @see org.mockito.runners.MockitoJUnitRunner
* @see org.springframework.session.data.gemfire.GemFireOperationsSessionRepository
* @since 1.0.0
* @since 1.1.0
*/
@RunWith(MockitoJUnitRunner.class)
public class GemFireOperationsSessionRepositoryTest {
@@ -120,9 +120,9 @@ public class GemFireOperationsSessionRepositoryTest {
when(mockSessionTwo.getId()).thenReturn("2");
when(mockSessionThree.getId()).thenReturn("3");
SelectResults mockSelectResults = mock(SelectResults.class);
SelectResults<Object> mockSelectResults = mock(SelectResults.class);
when(mockSelectResults.asList()).thenReturn(Arrays.asList(mockSessionOne, mockSessionTwo, mockSessionThree));
when(mockSelectResults.asList()).thenReturn(Arrays.<Object>asList(mockSessionOne, mockSessionTwo, mockSessionThree));
String principalName = "jblum";
@@ -149,7 +149,7 @@ public class GemFireOperationsSessionRepositoryTest {
@Test
@SuppressWarnings("unchecked")
public void findByPrincipalNameReturnsNoMatchingSessions() {
SelectResults mockSelectResults = mock(SelectResults.class);
SelectResults<Object> mockSelectResults = mock(SelectResults.class);
when(mockSelectResults.asList()).thenReturn(Collections.emptyList());

View File

@@ -52,7 +52,7 @@ import com.gemstone.gemfire.cache.client.ClientRegionShortcut;
* @see com.gemstone.gemfire.cache.GemFireCache
* @see com.gemstone.gemfire.cache.Region
* @see com.gemstone.gemfire.cache.client.ClientCache
* @since 1.0.0
* @since 1.1.0
*/
public class GemFireHttpSessionConfigurationTest {
@@ -196,7 +196,7 @@ public class GemFireHttpSessionConfigurationTest {
@SuppressWarnings("unchecked")
public void createAndInitializeSpringSessionGemFireRegionTemplate() {
GemFireCache mockGemFireCache = mock(GemFireCache.class);
Region mockRegion = mock(Region.class);
Region<Object,Object> mockRegion = mock(Region.class);
when(mockGemFireCache.getRegion(eq("Example"))).thenReturn(mockRegion);

View File

@@ -23,7 +23,11 @@ import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.springframework.data.gemfire.client.Interest;
import org.springframework.session.ExpiringSession;
import com.gemstone.gemfire.cache.Cache;
import com.gemstone.gemfire.cache.GemFireCache;
@@ -51,34 +55,37 @@ import com.gemstone.gemfire.cache.client.ClientRegionShortcut;
* @see com.gemstone.gemfire.cache.RegionShortcut
* @see com.gemstone.gemfire.cache.client.ClientCache
* @see com.gemstone.gemfire.cache.client.ClientRegionShortcut
* @since 1.0.0
* @since 1.1.0
*/
@RunWith(MockitoJUnitRunner.class)
public class GemFireCacheTypeAwareRegionFactoryBeanTest {
@Rule
public ExpectedException expectedException = ExpectedException.none();
private GemFireCacheTypeAwareRegionFactoryBean regionFactoryBean;
@Mock
Region<Object,ExpiringSession> mockClientRegion;
@Mock
Region<Object,ExpiringSession> mockServerRegion;
@Mock
ClientCache mockClientCache;
private GemFireCacheTypeAwareRegionFactoryBean<Object,ExpiringSession> regionFactoryBean;
@Before
public void setup() {
regionFactoryBean = new GemFireCacheTypeAwareRegionFactoryBean();
regionFactoryBean = new GemFireCacheTypeAwareRegionFactoryBean<Object,ExpiringSession>();
}
@Test
public void afterPropertiesSetCreatesClientRegionForClientCache() throws Exception {
final ClientCache mockClientCache = mock(ClientCache.class);
final Region mockClientRegion = mock(Region.class, "MockClientRegion");
final Region mockServerRegion = mock(Region.class, "MockServerRegion");
regionFactoryBean = new GemFireCacheTypeAwareRegionFactoryBean() {
@Override protected Region newClientRegion(GemFireCache gemfireCache) throws Exception {
regionFactoryBean = new GemFireCacheTypeAwareRegionFactoryBean<Object,ExpiringSession>() {
@Override protected Region<Object,ExpiringSession> newClientRegion(GemFireCache gemfireCache) throws Exception {
assertThat(gemfireCache).isSameAs(mockClientCache);
return mockClientRegion;
}
@Override protected Region newServerRegion(final GemFireCache gemfireCache) throws Exception {
@Override protected Region<Object,ExpiringSession> newServerRegion(final GemFireCache gemfireCache) throws Exception {
assertThat(gemfireCache).isSameAs(mockClientCache);
return mockServerRegion;
}
@@ -95,16 +102,13 @@ public class GemFireCacheTypeAwareRegionFactoryBeanTest {
public void afterPropertiesSetCreatesServerRegionForPeerCache() throws Exception {
final Cache mockCache = mock(Cache.class);
final Region mockClientRegion = mock(Region.class, "MockClientRegion");
final Region mockServerRegion = mock(Region.class, "MockServerRegion");
regionFactoryBean = new GemFireCacheTypeAwareRegionFactoryBean() {
@Override protected Region newClientRegion(GemFireCache gemfireCache) throws Exception {
regionFactoryBean = new GemFireCacheTypeAwareRegionFactoryBean<Object,ExpiringSession>() {
@Override protected Region<Object,ExpiringSession> newClientRegion(GemFireCache gemfireCache) throws Exception {
assertThat(gemfireCache).isSameAs(mockCache);
return mockClientRegion;
}
@Override protected Region newServerRegion(final GemFireCache gemfireCache) throws Exception {
@Override protected Region<Object,ExpiringSession> newServerRegion(final GemFireCache gemfireCache) throws Exception {
assertThat(gemfireCache).isSameAs(mockCache);
return mockServerRegion;
}
@@ -119,7 +123,7 @@ public class GemFireCacheTypeAwareRegionFactoryBeanTest {
@Test
public void allKeysInterestRegistration() {
Interest[] interests = regionFactoryBean.registerInterests(true);
Interest<Object>[] interests = regionFactoryBean.registerInterests(true);
assertThat(interests).isNotNull();
assertThat(interests.length).isEqualTo(1);
@@ -131,16 +135,15 @@ public class GemFireCacheTypeAwareRegionFactoryBeanTest {
@Test
public void emptyInterestsRegistration() {
Interest[] interests = regionFactoryBean.registerInterests(false);
Interest<Object>[] interests = regionFactoryBean.registerInterests(false);
assertThat(interests).isNotNull();
assertThat(interests.length).isEqualTo(0);
}
@Test
@SuppressWarnings("unchecked")
public void getObjectTypeBeforeInitializationIsRegionClass() {
assertThat((Class<Region>) regionFactoryBean.getObjectType()).isEqualTo(Region.class);
assertThat(regionFactoryBean.getObjectType()).isEqualTo(Region.class);
}
@Test
@@ -189,7 +192,7 @@ public class GemFireCacheTypeAwareRegionFactoryBeanTest {
@Test
@SuppressWarnings("unchecked")
public void setAndGetRegionAttributes() {
RegionAttributes mockRegionAttributes = mock(RegionAttributes.class);
RegionAttributes<Object,ExpiringSession> mockRegionAttributes = mock(RegionAttributes.class);
assertThat(regionFactoryBean.getRegionAttributes()).isNull();

View File

@@ -41,7 +41,7 @@ import com.gemstone.gemfire.cache.client.ClientRegionShortcut;
* @see org.junit.Test
* @see org.mockito.Mockito
* @see org.springframework.session.data.gemfire.support.GemFireUtils
* @since 1.0.0
* @since 1.1.0
*/
public class GemFireUtilsTest {