You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by je...@apache.org on 2015/12/29 22:11:06 UTC
[12/24] incubator-geode git commit: GEODE-14: Added session
replication integration tests
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/890d62e3/modules/gemfire-modules-session-integration-test/src/test/java/com/gemstone/gemfire/modules/junit/ChildFirstClassLoader.java
----------------------------------------------------------------------
diff --git a/modules/gemfire-modules-session-integration-test/src/test/java/com/gemstone/gemfire/modules/junit/ChildFirstClassLoader.java b/modules/gemfire-modules-session-integration-test/src/test/java/com/gemstone/gemfire/modules/junit/ChildFirstClassLoader.java
deleted file mode 100644
index b566d05..0000000
--- a/modules/gemfire-modules-session-integration-test/src/test/java/com/gemstone/gemfire/modules/junit/ChildFirstClassLoader.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*=========================================================================
- * Copyright (c) 2010-2014 Pivotal Software, Inc. All Rights Reserved.
- * This product is protected by U.S. and international copyright
- * and intellectual property laws. Pivotal products are covered by
- * one or more patents listed at http://www.pivotal.io/patents.
- *=========================================================================
- */
-package com.gemstone.gemfire.modules.junit;
-
-import java.net.URL;
-import java.net.URLClassLoader;
-
-public class ChildFirstClassLoader extends URLClassLoader {
-
- public ChildFirstClassLoader() {
- super(new URL[]{});
- }
-
- public ChildFirstClassLoader(URL[] urls) {
- super(urls);
- }
-
- public ChildFirstClassLoader(URL[] urls, ClassLoader parent) {
- super(urls, parent);
- }
-
- @Override
- public void addURL(URL url) {
- super.addURL(url);
- }
-
- @Override
- public Class loadClass(String name) throws ClassNotFoundException {
- return loadClass(name, false);
- }
-
- /**
- * We override the parent-first behavior established by
- * java.lang.Classloader.
- */
- @Override
- protected Class loadClass(String name, boolean resolve)
- throws ClassNotFoundException {
- Class c = null;
-
- if (name.startsWith("com.gemstone")) {
- // First, check if the class has already been loaded
- c = findLoadedClass(name);
-
- // if not loaded, search the local (child) resources
- if (c == null) {
- try {
- c = findClass(name);
- } catch (ClassNotFoundException cnfe) {
- // ignore
- }
- }
- }
-
- // if we could not find it, delegate to parent
- // Note that we don't attempt to catch any ClassNotFoundException
- if (c == null) {
- if (getParent() != null) {
- c = getParent().loadClass(name);
- } else {
- c = getSystemClassLoader().loadClass(name);
- }
- }
-
- if (resolve) {
- resolveClass(c);
- }
-
- return c;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/890d62e3/modules/gemfire-modules-session-integration-test/src/test/java/com/gemstone/gemfire/modules/junit/NamedRunner.java
----------------------------------------------------------------------
diff --git a/modules/gemfire-modules-session-integration-test/src/test/java/com/gemstone/gemfire/modules/junit/NamedRunner.java b/modules/gemfire-modules-session-integration-test/src/test/java/com/gemstone/gemfire/modules/junit/NamedRunner.java
deleted file mode 100644
index 9a3ec3c..0000000
--- a/modules/gemfire-modules-session-integration-test/src/test/java/com/gemstone/gemfire/modules/junit/NamedRunner.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*=========================================================================
- * Copyright (c) 2010-2014 Pivotal Software, Inc. All Rights Reserved.
- * This product is protected by U.S. and international copyright
- * and intellectual property laws. Pivotal products are covered by
- * one or more patents listed at http://www.pivotal.io/patents.
- *=========================================================================
- */
-package com.gemstone.gemfire.modules.junit;
-
-/**
- * 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.
- */
-
-import org.junit.runner.notification.RunNotifier;
-import org.junit.runners.BlockJUnit4ClassRunner;
-import org.junit.runners.model.FrameworkMethod;
-import org.junit.runners.model.InitializationError;
-
-/**
- * A Junit 4 runner that stores the name of the method that runs. The methods
- * marked with @After and @Before (but also the Test method itself) can request
- * this name for which it is running.
- *
- * @author Rudy De Busscher
- */
-public class NamedRunner extends BlockJUnit4ClassRunner {
-
- /**
- * The Constant PREFIX_KEY.
- */
- private static final String PREFIX_KEY = "ClassLoaderRunner_TestMethodName_";
-
- /**
- * The Constant NO_NAME.
- */
- private static final String NO_NAME = "null";
-
- /**
- * Instantiates a new named runner.
- *
- * @param klass the klass
- * @throws InitializationError the initialization error
- */
- public NamedRunner(Class<?> klass) throws InitializationError {
- super(klass);
- }
-
- @Override
- protected void runChild(FrameworkMethod method, RunNotifier notifier)
-
- {
- storeTestMethodName(method.getName());
- super.runChild(method, notifier);
- removeTestMethodName();
- }
-
- /**
- * Gets the test method name.
- *
- * @return the test method name
- */
- public static String getTestMethodName() {
- return retrieveTestMethodName();
- }
-
- /**
- * Retrieve test method name.
- *
- * @return the string
- */
- private static String retrieveTestMethodName() {
- // We can't use a ThreadLocal variable in the case the TestPerClassLoader runner is used. Then this
- // Method is accessed from another classloader and thus reinitialized variables.
- String result = null;
- String storedName = System.getProperty(getKey());
- if (!NO_NAME.equals(storedName)) {
- result = storedName;
- }
- return result;
- }
-
- /**
- * Removes the test method name.
- */
- private static void removeTestMethodName() {
- // We can't use a ThreadLocal variable in the case the TestPerClassLoader runner is used. Then this
- // Method is accessed from another classloader and thus reinitialized variables.
- System.setProperty(getKey(), NO_NAME);
-
- }
-
- /**
- * Store test method name.
- *
- * @param name the name
- */
- private static void storeTestMethodName(String name) {
-
- // We can't use a ThreadLocal variable in the case the TestPerClassLoader runner is used. Then this
- // Method is accessed from another classloader and thus reinitialized variables.
- System.setProperty(getKey(), name);
- }
-
- /**
- * Gets the key.
- *
- * @return the key
- */
- private static String getKey() {
- StringBuffer buffer = new StringBuffer();
- buffer.append(PREFIX_KEY).append(Thread.currentThread().getName());
- return buffer.toString();
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/890d62e3/modules/gemfire-modules-session-integration-test/src/test/java/com/gemstone/gemfire/modules/junit/PerTestClassLoaderRunner.java
----------------------------------------------------------------------
diff --git a/modules/gemfire-modules-session-integration-test/src/test/java/com/gemstone/gemfire/modules/junit/PerTestClassLoaderRunner.java b/modules/gemfire-modules-session-integration-test/src/test/java/com/gemstone/gemfire/modules/junit/PerTestClassLoaderRunner.java
deleted file mode 100644
index fce6471..0000000
--- a/modules/gemfire-modules-session-integration-test/src/test/java/com/gemstone/gemfire/modules/junit/PerTestClassLoaderRunner.java
+++ /dev/null
@@ -1,273 +0,0 @@
-/*=========================================================================
- * Copyright (c) 2010-2014 Pivotal Software, Inc. All Rights Reserved.
- * This product is protected by U.S. and international copyright
- * and intellectual property laws. Pivotal products are covered by
- * one or more patents listed at http://www.pivotal.io/patents.
- *=========================================================================
- */
-package com.gemstone.gemfire.modules.junit;
-
-/**
- * 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
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * 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.
- */
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.internal.runners.statements.Fail;
-import org.junit.internal.runners.statements.RunAfters;
-import org.junit.internal.runners.statements.RunBefores;
-import org.junit.runners.model.FrameworkMethod;
-import org.junit.runners.model.InitializationError;
-import org.junit.runners.model.Statement;
-import org.junit.runners.model.TestClass;
-
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Method;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.StringTokenizer;
-import java.util.logging.Logger;
-
-public class PerTestClassLoaderRunner extends NamedRunner {
- private static final Logger LOGGER = Logger
- .getLogger(PerTestClassLoaderRunner.class.getName());
-
- // The classpath is needed because the custom class loader looks there to find the classes.
- private static String classPath;
- private static boolean classPathDetermined = false;
-
- // Some data related to the class from the custom class loader.
- private TestClass testClassFromClassLoader;
- private Object beforeFromClassLoader;
- private Object afterFromClassLoader;
-
- /**
- * Instantiates a new test per class loader runner.
- *
- * @param klass the klass
- * @throws InitializationError the initialization error
- */
- public PerTestClassLoaderRunner(Class<?> klass) throws InitializationError {
- super(klass);
- }
-
- @Override
- protected Object createTest() throws Exception {
- // Need an instance now from the class loaded by the custom loader.
- return testClassFromClassLoader.getJavaClass().newInstance();
- }
-
- /**
- * Load classes (TestCase, @Before and @After with custom class loader.
- *
- * @throws ClassNotFoundException the class not found exception
- */
- private void loadClassesWithCustomClassLoader()
- throws ClassNotFoundException {
- String classPath = System.getProperty("java.class.path");
- StringTokenizer st = new StringTokenizer(classPath, ":");
- List<URL> urls = new ArrayList<URL>();
- while (st.hasMoreTokens()) {
- String u = st.nextToken();
- try {
- if (!u.endsWith(".jar")) {
- u += "/";
- }
- URL url = new URL("file://" + u);
- urls.add(url);
- } catch (MalformedURLException e) {
- e.printStackTrace();
- }
- }
-
- ClassLoader classLoader = new ChildFirstClassLoader(
- urls.toArray(new URL[]{}),
- Thread.currentThread().getContextClassLoader()
- );
-
- Thread.currentThread().setContextClassLoader(classLoader);
-
- testClassFromClassLoader = new TestClass(classLoader
- .loadClass(getTestClass().getJavaClass().getName()));
- // See withAfters and withBefores for the reason.
- beforeFromClassLoader = classLoader.loadClass(Before.class.getName());
- afterFromClassLoader = classLoader.loadClass(After.class.getName());
- }
-
- @Override
- protected Statement methodBlock(FrameworkMethod method) {
- FrameworkMethod newMethod = null;
- try {
- // Need the class from the custom loader now, so lets load the class.
- loadClassesWithCustomClassLoader();
- // The method as parameter is from the original class and thus not found in our
- // class loaded by the custom name (reflection is class loader sensitive)
- // So find the same method but now in the class from the class Loader.
- Method methodFromNewlyLoadedClass = testClassFromClassLoader
- .getJavaClass().getMethod(method.getName());
- newMethod = new FrameworkMethod(methodFromNewlyLoadedClass);
- } catch (ClassNotFoundException e) {
- // Show any problem nicely as a JUnit Test failure.
- return new Fail(e);
- } catch (SecurityException e) {
- return new Fail(e);
- } catch (NoSuchMethodException e) {
- return new Fail(e);
- }
-
- // We can carry out the normal JUnit functionality with our newly discovered method now.
- return super.methodBlock(newMethod);
- }
-
- @SuppressWarnings("unchecked")
- @Override
- protected Statement withAfters(FrameworkMethod method, Object target,
- Statement statement) {
- // We now to need to search in the class from the custom loader.
- // We also need to search with the annotation loaded by the custom
- // class loader or otherwise we don't find any method.
- List<FrameworkMethod> afters = testClassFromClassLoader
- .getAnnotatedMethods(
- (Class<? extends Annotation>) afterFromClassLoader);
- return new RunAfters(statement, afters, target);
- }
-
- @SuppressWarnings("unchecked")
- @Override
- protected Statement withBefores(FrameworkMethod method, Object target,
- Statement statement) {
- // We now to need to search in the class from the custom loader.
- // We also need to search with the annotation loaded by the custom
- // class loader or otherwise we don't find any method.
- List<FrameworkMethod> befores = testClassFromClassLoader
- .getAnnotatedMethods(
- (Class<? extends Annotation>) beforeFromClassLoader);
- return new RunBefores(statement, befores, target);
- }
-
-// /**
-// * Gets the class path. This value is cached in a static variable for performance reasons.
-// *
-// * @return the class path
-// */
-// private static String getClassPath()
-// {
-// if (classPathDetermined)
-// {
-// return classPath;
-// }
-//
-// classPathDetermined = true;
-// // running from maven, we have the classpath in this property.
-// classPath = System.getProperty("surefire.test.class.path");
-// if (classPath != null)
-// {
-// return classPath;
-// }
-//
-// // For a multi module project, running it from the top we have to find it using another way.
-// // We also need to set useSystemClassLoader=true in the POM so that we gets a jar with the classpath in it.
-// String booterClassPath = System.getProperty("java.class.path");
-// Vector<String> pathItems = null;
-// if (booterClassPath != null)
-// {
-// pathItems = scanPath(booterClassPath);
-// }
-// // Do we have just 1 entry as classpath which is a jar?
-// if (pathItems != null && pathItems.size() == 1
-// && isJar((String) pathItems.get(0)))
-// {
-// classPath = loadJarManifestClassPath((String) pathItems.get(0),
-// "META-INF/MANIFEST.MF");
-// }
-// return classPath;
-//
-// }
-
-// /**
-// * Load jar manifest class path.
-// *
-// * @param path the path
-// * @param fileName the file name
-// *
-// * @return the string
-// */
-// private static String loadJarManifestClassPath(String path, String fileName)
-// {
-// File archive = new File(path);
-// if (!archive.exists()) {
-// return null;
-// }
-// ZipFile zipFile = null;
-//
-// try {
-// zipFile = new ZipFile(archive);
-// } catch (IOException io) {
-// return null;
-// }
-//
-// ZipEntry entry = zipFile.getEntry(fileName);
-// if (entry == null) {
-// return null;
-// } try {
-// Manifest mf = new Manifest();
-// mf.read(zipFile.getInputStream(entry));
-//
-// return mf.getMainAttributes().getValue(Attributes.Name.CLASS_PATH)
-// .replaceAll(" ", System.getProperty("path.separator"))
-// .replaceAll("file:/", "");
-// } catch (MalformedURLException e) {
-// LOGGER.throwing("ClassLoaderTestSuite", "loadJarManifestClassPath", e);
-// } catch (IOException e) {
-// LOGGER.throwing("ClassLoaderTestSuite", "loadJarManifestClassPath", e);
-// }
-// return null;
-// }
-//
-// /**
-// * Checks if is jar.
-// *
-// * @param pathEntry the path entry
-// *
-// * @return true, if is jar
-// */
-// private static boolean isJar(String pathEntry)
-// {
-// return pathEntry.endsWith(".jar") || pathEntry.endsWith(".zip");
-// }
-//
-// /**
-// * Scan path for all directories.
-// *
-// * @param classPath the class path
-// *
-// * @return the vector< string>
-// */
-// private static Vector<String> scanPath(String classPath)
-// {
-// String separator = System.getProperty("path.separator");
-// Vector<String> pathItems = new Vector<String>(10);
-// StringTokenizer st = new StringTokenizer(classPath, separator);
-// while (st.hasMoreTokens())
-// {
-// pathItems.addElement(st.nextToken());
-// }
-// return pathItems;
-// }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/890d62e3/modules/gemfire-modules-session-integration-test/src/test/java/com/gemstone/gemfire/modules/session/internal/filter/BasicServlet.java
----------------------------------------------------------------------
diff --git a/modules/gemfire-modules-session-integration-test/src/test/java/com/gemstone/gemfire/modules/session/internal/filter/BasicServlet.java b/modules/gemfire-modules-session-integration-test/src/test/java/com/gemstone/gemfire/modules/session/internal/filter/BasicServlet.java
deleted file mode 100644
index 2c1d7e4..0000000
--- a/modules/gemfire-modules-session-integration-test/src/test/java/com/gemstone/gemfire/modules/session/internal/filter/BasicServlet.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*=========================================================================
- * Copyright (c) 2010-2014 Pivotal Software, Inc. All Rights Reserved.
- * This product is protected by U.S. and international copyright
- * and intellectual property laws. Pivotal products are covered by
- * one or more patents listed at http://www.pivotal.io/patents.
- *=========================================================================
- */
-/*
- * To change this template, choose Tools | Templates
- * and open the template in the editor.
- */
-package com.gemstone.gemfire.modules.session.internal.filter;
-
-import java.io.IOException;
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.eclipse.jetty.servlet.DefaultServlet;
-/**
- *
- */
-public class BasicServlet extends DefaultServlet {
-
- Callback callback = null;
-
- @Override
- public void doGet(HttpServletRequest request, HttpServletResponse response)
- throws IOException, ServletException {
-
- if (callback != null) {
- callback.call(request, response);
- }
- }
-
- @Override
- public void init(ServletConfig config) throws ServletException {
- super.init(config);
- ServletContext context = config.getServletContext();
-
- String cbInitParam = config.getInitParameter("test.callback");
- callback = (Callback) context.getAttribute(cbInitParam);
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/890d62e3/modules/gemfire-modules-session-integration-test/src/test/java/com/gemstone/gemfire/modules/session/internal/filter/HttpSessionListenerImpl2.java
----------------------------------------------------------------------
diff --git a/modules/gemfire-modules-session-integration-test/src/test/java/com/gemstone/gemfire/modules/session/internal/filter/HttpSessionListenerImpl2.java b/modules/gemfire-modules-session-integration-test/src/test/java/com/gemstone/gemfire/modules/session/internal/filter/HttpSessionListenerImpl2.java
deleted file mode 100644
index ea39f65..0000000
--- a/modules/gemfire-modules-session-integration-test/src/test/java/com/gemstone/gemfire/modules/session/internal/filter/HttpSessionListenerImpl2.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*=========================================================================
- * Copyright (c) 2010-2014 Pivotal Software, Inc. All Rights Reserved.
- * This product is protected by U.S. and international copyright
- * and intellectual property laws. Pivotal products are covered by
- * one or more patents listed at http://www.pivotal.io/patents.
- *=========================================================================
- */
-/*
- * To change this template, choose Tools | Templates
- * and open the template in the editor.
- */
-
-package com.gemstone.gemfire.modules.session.internal.filter;
-
-import com.gemstone.gemfire.modules.session.filter.SessionCachingFilter;
-
-import javax.servlet.http.HttpSession;
-import javax.servlet.http.HttpSessionEvent;
-import javax.servlet.http.HttpSessionListener;
-
-/**
- * @author jdeppe
- */
-public class HttpSessionListenerImpl2 extends AbstractListener
- implements HttpSessionListener {
-
- @Override
- public void sessionCreated(HttpSessionEvent se) {
- events.add(ListenerEventType.SESSION_CREATED);
- latch.countDown();
- }
-
- @Override
- public void sessionDestroyed(HttpSessionEvent se) {
- HttpSession gfeSession = SessionCachingFilter.getWrappingSession(
- se.getSession());
- assert (gfeSession != null);
- events.add(ListenerEventType.SESSION_DESTROYED);
- latch.countDown();
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/890d62e3/modules/gemfire-modules-session-integration-test/src/test/java/com/gemstone/gemfire/modules/session/internal/filter/IntegrationTest.java
----------------------------------------------------------------------
diff --git a/modules/gemfire-modules-session-integration-test/src/test/java/com/gemstone/gemfire/modules/session/internal/filter/IntegrationTest.java b/modules/gemfire-modules-session-integration-test/src/test/java/com/gemstone/gemfire/modules/session/internal/filter/IntegrationTest.java
deleted file mode 100644
index 11d1029..0000000
--- a/modules/gemfire-modules-session-integration-test/src/test/java/com/gemstone/gemfire/modules/session/internal/filter/IntegrationTest.java
+++ /dev/null
@@ -1,1553 +0,0 @@
-/*=========================================================================
- * Copyright (c) 2010-2014 Pivotal Software, Inc. All Rights Reserved.
- * This product is protected by U.S. and international copyright
- * and intellectual property laws. Pivotal products are covered by
- * one or more patents listed at http://www.pivotal.io/patents.
- *=========================================================================
- */
-/*
- * To change this template, choose Tools | Templates
- * and open the template in the editor.
- */
-package com.gemstone.gemfire.modules.session.internal.filter;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.util.ArrayList;
-import java.util.EnumSet;
-import java.util.Enumeration;
-import java.util.List;
-import java.util.StringTokenizer;
-import java.util.concurrent.TimeUnit;
-import javax.servlet.DispatcherType;
-import javax.servlet.RequestDispatcher;
-import javax.servlet.ServletException;
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpSession;
-
-import com.gemstone.gemfire.cache.Region;
-import com.gemstone.gemfire.modules.junit.PerTestClassLoaderRunner;
-import com.gemstone.gemfire.modules.session.filter.SessionCachingFilter;
-import org.apache.jasper.servlet.JspServlet;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.eclipse.jetty.servlet.FilterHolder;
-import org.eclipse.jetty.servlet.ServletHolder;
-import org.eclipse.jetty.http.HttpTester;
-
-import static org.junit.Assert.*;
-
-/**
- * In-container testing using Jetty. This allows us to test context listener
- * events as well as dispatching actions.
- */
-@RunWith(PerTestClassLoaderRunner.class)
-public class IntegrationTest {
-
- private MyServletTester tester;
-
- private HttpTester.Request request;
-
- private HttpTester.Response response;
-
- private ServletHolder servletHolder;
-
- private FilterHolder filterHolder;
-
- private static final File tmpdir;
-
- private static final String gemfire_log;
-
- static {
- // Create a per-user scratch directory
- tmpdir = new File(System.getProperty("java.io.tmpdir"),
- "gemfire_modules-" + System.getProperty("user.name"));
- tmpdir.mkdirs();
- tmpdir.deleteOnExit();
-
- gemfire_log = tmpdir.getPath() +
- System.getProperty("file.separator") + "gemfire_modules.log";
- }
-
- @Before
- public void setUp() throws Exception {
- request = HttpTester.newRequest();
-
- tester = new MyServletTester();
- tester.setContextPath("/test");
-
- filterHolder = tester.addFilter(SessionCachingFilter.class, "/*",
- EnumSet.of(DispatcherType.REQUEST));
- filterHolder.setInitParameter("gemfire.property.mcast-port", "0");
- filterHolder.setInitParameter("gemfire.property.writable-working-dir",
- tmpdir.getPath());
- filterHolder.setInitParameter("cache-type", "peer-to-peer");
- filterHolder.setInitParameter("gemfire.property.log-file",
- gemfire_log);
-
- servletHolder = tester.addServlet(BasicServlet.class, "/hello");
- servletHolder.setInitParameter("test.callback", "callback_1");
-
- /**
- * This starts the servlet. Our wrapped servlets *must* start
- * immediately otherwise the ServletContext is not captured correctly.
- */
- servletHolder.setInitOrder(0);
- }
-
- @After
- public void tearDown() throws Exception {
- if (tester.isStarted()) {
- ContextManager.getInstance().removeContext(
- servletHolder.getServlet().getServletConfig().getServletContext());
- }
- tester.stop();
- }
-
- @Test
- public void testSanity() throws Exception {
- Callback c = new Callback() {
- @Override
- public void call(HttpServletRequest request, HttpServletResponse response)
- throws IOException {
- PrintWriter out = response.getWriter();
- out.write("Hello World");
- }
- };
-
- tester.setAttribute("callback_1", c);
- tester.start();
- ContextManager.getInstance().putContext(
- servletHolder.getServlet().getServletConfig().getServletContext());
-
- request.setMethod("GET");
- request.setURI("/test/hello");
- request.setHeader("Host", "tester");
- request.setVersion("HTTP/1.0");
-
- response = HttpTester.parseResponse(tester.getResponses(request.generate()));
-
- assertEquals(200, response.getStatus());
- assertEquals("Hello World", response.getContent());
- }
-
- @Test
- public void testSessionGenerated() throws Exception {
- Callback c = new Callback() {
- @Override
- public void call(HttpServletRequest request, HttpServletResponse response)
- throws IOException {
- PrintWriter out = response.getWriter();
- out.write(request.getSession().getId());
- }
- };
-
- tester.setAttribute("callback_1", c);
- tester.start();
- ContextManager.getInstance().putContext(
- servletHolder.getServlet().getServletConfig().getServletContext());
-
- request.setMethod("GET");
- request.setURI("/test/hello");
- request.setHeader("Host", "tester");
- request.setVersion("HTTP/1.0");
-
- response = HttpTester.parseResponse(tester.getResponses(request.generate()));
-
- assertTrue("Not a correctly generated session id",
- response.getContent().endsWith("-GF"));
-
- List<Cookie> cookies = getCookies(response);
- assertEquals("Session id != JSESSIONID from cookie",
- response.getContent(), cookies.get(0).getValue());
-
- Region r = getRegion();
- assertNotNull("Session not found in region",
- r.get(cookies.get(0).getValue()));
- }
-
-
- /**
- * Test that getSession(false) does not create a new session
- */
- @Test
- public void testSessionNotGenerated() throws Exception {
- Callback c = new Callback() {
- @Override
- public void call(HttpServletRequest request, HttpServletResponse response)
- throws IOException {
- String output = "OK";
- HttpSession s = request.getSession(false);
- if (s != null) {
- output = s.getId();
- }
- PrintWriter out = response.getWriter();
- out.write(output);
- }
- };
-
- tester.setAttribute("callback_1", c);
- tester.start();
- ContextManager.getInstance().putContext(
- servletHolder.getServlet().getServletConfig().getServletContext());
-
- request.setMethod("GET");
- request.setURI("/test/hello");
- request.setHeader("Host", "tester");
- request.setVersion("HTTP/1.0");
-
- response = HttpTester.parseResponse(tester.getResponses(request.generate()));
-
- assertEquals("Session should not have been created", "OK",
- response.getContent());
- }
-
-
- @Test
- public void testUnknownAttributeIsNull() throws Exception {
- Callback c = new Callback() {
- @Override
- public void call(HttpServletRequest request, HttpServletResponse response)
- throws IOException {
- Object o = request.getSession().getAttribute("unknown");
- PrintWriter out = response.getWriter();
- if (o == null) {
- out.write("null");
- } else {
- out.write(o.toString());
- }
- }
- };
-
- tester.setAttribute("callback_1", c);
- tester.start();
- ContextManager.getInstance().putContext(
- servletHolder.getServlet().getServletConfig().getServletContext());
-
- request.setMethod("GET");
- request.setURI("/test/hello");
- request.setHeader("Host", "tester");
- request.setVersion("HTTP/1.0");
-
- response = HttpTester.parseResponse(tester.getResponses(request.generate()));
-
- assertEquals("Unknown attribute should be null", "null",
- response.getContent());
- }
-
-
- @Test
- public void testSessionRemains1() throws Exception {
- Callback c = new Callback() {
- @Override
- public void call(HttpServletRequest request, HttpServletResponse response)
- throws IOException {
- String output = "null";
- HttpSession session = request.getSession();
- if (session.isNew()) {
- output = "new";
- session.setAttribute("foo", output);
- } else {
- output = (String) session.getAttribute("foo");
- if (output != null) {
- output = "old";
- }
- }
- PrintWriter out = response.getWriter();
- out.write(output);
- }
- };
-
- tester.setAttribute("callback_1", c);
- tester.start();
- ContextManager.getInstance().putContext(
- servletHolder.getServlet().getServletConfig().getServletContext());
-
- request.setMethod("GET");
- request.setURI("/test/hello");
- request.setHeader("Host", "tester");
- request.setVersion("HTTP/1.0");
-
- response = HttpTester.parseResponse(tester.getResponses(request.generate()));
-
- assertEquals("Session should be new", "new", response.getContent());
-
- List<Cookie> cookies = getCookies(response);
- request.setHeader("Cookie", "JSESSIONID=" + cookies.get(0).getValue());
-
- response = HttpTester.parseResponse(tester.getResponses(request.generate()));
-
- assertEquals("Session should be old", "old", response.getContent());
-
- List<Cookie> cookies2 = getCookies(response);
- assertEquals("Session IDs should be the same", cookies.get(0).getValue(),
- cookies2.get(0).getValue());
-
- Region r = getRegion();
- assertNotNull("Session object should exist in region",
- r.get(cookies.get(0).getValue()));
- }
-
- /**
- * Test that attributes are updated on the backend
- */
- @Test
- public void testAttributesUpdatedInRegion() throws Exception {
- Callback c_1 = new Callback() {
- @Override
- public void call(HttpServletRequest request, HttpServletResponse response)
- throws IOException, ServletException {
- request.getSession().setAttribute("foo", "bar");
- }
- };
-
- // This is the callback used to invalidate the session
- Callback c_2 = new Callback() {
- @Override
- public void call(HttpServletRequest request, HttpServletResponse response)
- throws IOException, ServletException {
- request.getSession().setAttribute("foo", "baz");
- }
- };
-
- tester.setAttribute("callback_1", c_1);
- tester.setAttribute("callback_2", c_2);
-
- servletHolder.setInitParameter("test.callback", "callback_1");
-
- ServletHolder sh2 = tester.addServlet(BasicServlet.class, "/request2");
- sh2.setInitParameter("test.callback", "callback_2");
-
- tester.start();
- ContextManager.getInstance().putContext(
- servletHolder.getServlet().getServletConfig().getServletContext());
-
- request.setMethod("GET");
- request.setURI("/test/hello");
- request.setHeader("Host", "tester");
- request.setVersion("HTTP/1.0");
- response = HttpTester.parseResponse(tester.getResponses(request.generate()));
-
- List<Cookie> cookies = getCookies(response);
-
- Region r = getRegion();
- assertEquals("bar",
- ((HttpSession) r.get(cookies.get(0).getValue())).getAttribute("foo"));
-
- request.setHeader("Cookie", "JSESSIONID=" + cookies.get(0).getValue());
- request.setURI("/test/request2");
- response = HttpTester.parseResponse(tester.getResponses(request.generate()));
-
- assertEquals("baz",
- ((HttpSession) r.get(cookies.get(0).getValue())).getAttribute(
- "foo"));
- }
-
- /**
- * Test setting an attribute to null deletes it
- */
- @Test
- public void testSetAttributeNullDeletesIt() throws Exception {
- Callback c_1 = new Callback() {
- @Override
- public void call(HttpServletRequest request, HttpServletResponse response)
- throws IOException, ServletException {
- request.getSession().setAttribute("foo", "bar");
- }
- };
-
- // This is the callback used to invalidate the session
- Callback c_2 = new Callback() {
- @Override
- public void call(HttpServletRequest request, HttpServletResponse response)
- throws IOException, ServletException {
- request.getSession().setAttribute("foo", null);
- }
- };
-
- tester.setAttribute("callback_1", c_1);
- tester.setAttribute("callback_2", c_2);
-
- servletHolder.setInitParameter("test.callback", "callback_1");
-
- ServletHolder sh2 = tester.addServlet(BasicServlet.class, "/request2");
- sh2.setInitParameter("test.callback", "callback_2");
-
- tester.start();
- ContextManager.getInstance().putContext(
- servletHolder.getServlet().getServletConfig().getServletContext());
-
- request.setMethod("GET");
- request.setURI("/test/hello");
- request.setHeader("Host", "tester");
- request.setVersion("HTTP/1.0");
- response = HttpTester.parseResponse(tester.getResponses(request.generate()));
-
- List<Cookie> cookies = getCookies(response);
-
- Region r = getRegion();
- assertEquals("bar",
- ((HttpSession) r.get(cookies.get(0).getValue())).getAttribute(
- "foo"));
-
- request.setHeader("Cookie", "JSESSIONID=" + cookies.get(0).getValue());
- request.setURI("/test/request2");
- response = HttpTester.parseResponse(tester.getResponses(request.generate()));
-
- assertNull(
- ((HttpSession) r.get(cookies.get(0).getValue())).getAttribute(
- "foo"));
- }
-
-// Don't see how to do this currently as the SessionListener needs a full
-// web context to work in.
-
-// /**
-// * Test that sessions expire correctly
-// */
-// public void testSessionExpiration() throws Exception {
-// Callback c_1 = new Callback() {
-// @Override
-// public void call(HttpServletRequest request, HttpServletResponse response)
-// throws IOException, ServletException {
-// HttpSession s = request.getSession();
-// s.setAttribute("foo", "bar");
-// s.setMaxInactiveInterval(1);
-//
-// PrintWriter out = response.getWriter();
-// out.write(s.getId());
-// }
-// };
-//
-// // This is the callback used to check if the session is still there
-// Callback c_2 = new Callback() {
-// @Override
-// public void call(HttpServletRequest request, HttpServletResponse response)
-// throws IOException, ServletException {
-// HttpSession s = request.getSession(false);
-// String output;
-// if (s == null) {
-// output = "null";
-// } else {
-// output = s.getId();
-// }
-//
-// PrintWriter out = response.getWriter();
-// out.write(output);
-// }
-// };
-//
-// tester.addEventListener(new SessionListener());
-// tester.setAttribute("callback_1", c_1);
-// tester.setAttribute("callback_2", c_2);
-//
-// servletHolder.setInitParameter("test.callback", "callback_1");
-//
-// ServletHolder sh2 = tester.addServlet(BasicServlet.class, "/request2");
-// sh2.setInitParameter("test.callback", "callback_2");
-//
-// tester.start();
-// ContextManager.getInstance().putContext(
-// servletHolder.getServlet().getServletConfig().getServletContext());
-//
-// request.setMethod("GET");
-// request.setURI("/test/hello");
-// request.setHeader("Host", "tester");
-// request.setVersion("HTTP/1.0");
-// response.parse(tester.getResponses(request.generate()));
-//
-// String id = response.getContent();
-//
-// // Wait for the session to expire
-// Thread.sleep(2000);
-//
-// request.setHeader("Cookie", "JSESSIONID=" + id);
-// request.setURI("/test/request2");
-// response.parse(tester.getResponses(request.generate()));
-//
-// assertEquals("null", response.getContent());
-//
-// Region r = getRegion();
-// assertNull("Region should not contain session", r.get(id));
-// }
-
- /**
- * Test that invalidating a session destroys it as well as the backend
- * object.
- */
- @Test
- public void testInvalidateSession1() throws Exception {
- Callback c_1 = new Callback() {
- @Override
- public void call(HttpServletRequest request, HttpServletResponse response)
- throws IOException, ServletException {
- request.getSession().setAttribute("foo", "bar");
- }
- };
-
- // This is the callback used to invalidate the session
- Callback c_2 = new Callback() {
- @Override
- public void call(HttpServletRequest request, HttpServletResponse response)
- throws IOException, ServletException {
- request.getSession(false).invalidate();
- }
- };
-
- tester.setAttribute("callback_1", c_1);
- tester.setAttribute("callback_2", c_2);
-
- servletHolder.setInitParameter("test.callback", "callback_1");
-
- ServletHolder sh2 = tester.addServlet(BasicServlet.class, "/request2");
- sh2.setInitParameter("test.callback", "callback_2");
-
- tester.start();
- ContextManager.getInstance().putContext(
- servletHolder.getServlet().getServletConfig().getServletContext());
-
- request.setMethod("GET");
- request.setURI("/test/hello");
- request.setHeader("Host", "tester");
- request.setVersion("HTTP/1.0");
- response = HttpTester.parseResponse(tester.getResponses(request.generate()));
-
- List<Cookie> cookies = getCookies(response);
- Region r = getRegion();
- assertEquals("bar",
- ((HttpSession) r.get(cookies.get(0).getValue())).getAttribute("foo"));
-
- request.setHeader("Cookie", "JSESSIONID=" + cookies.get(0).getValue());
- request.setURI("/test/request2");
- response = HttpTester.parseResponse(tester.getResponses(request.generate()));
-
- assertNull("Region should not contain session",
- r.get(cookies.get(0).getValue()));
- }
-
- /**
- * Test that invalidating a session throws an exception on subsequent access.
- */
- @Test
- public void testInvalidateSession2() throws Exception {
- Callback c_1 = new Callback() {
- @Override
- public void call(HttpServletRequest request, HttpServletResponse response)
- throws IOException, ServletException {
- HttpSession s = request.getSession();
- s.invalidate();
- PrintWriter out = response.getWriter();
- try {
- s.getAttribute("foo");
- } catch (IllegalStateException iex) {
- out.write("OK");
- }
- }
- };
-
- tester.setAttribute("callback_1", c_1);
-
- servletHolder.setInitParameter("test.callback", "callback_1");
-
- tester.start();
- ContextManager.getInstance().putContext(
- servletHolder.getServlet().getServletConfig().getServletContext());
-
- request.setMethod("GET");
- request.setURI("/test/hello");
- request.setHeader("Host", "tester");
- request.setVersion("HTTP/1.0");
- response = HttpTester.parseResponse(tester.getResponses(request.generate()));
-
- assertEquals("OK", response.getContent());
- }
-
- /**
- * Test that invalidating a session throws an exception on subsequent access.
- */
- @Test
- public void testInvalidateSession3() throws Exception {
- Callback c_1 = new Callback() {
- @Override
- public void call(HttpServletRequest request, HttpServletResponse response)
- throws IOException, ServletException {
- HttpSession s = request.getSession();
- s.invalidate();
- PrintWriter out = response.getWriter();
- try {
- s.getAttributeNames();
- } catch (IllegalStateException iex) {
- out.write("OK");
- }
- }
- };
-
- tester.setAttribute("callback_1", c_1);
-
- servletHolder.setInitParameter("test.callback", "callback_1");
-
- tester.start();
- ContextManager.getInstance().putContext(
- servletHolder.getServlet().getServletConfig().getServletContext());
-
- request.setMethod("GET");
- request.setURI("/test/hello");
- request.setHeader("Host", "tester");
- request.setVersion("HTTP/1.0");
- response = HttpTester.parseResponse(tester.getResponses(request.generate()));
-
- assertEquals("OK", response.getContent());
- }
-
- /**
- * Test that invalidating a session throws an exception on subsequent access.
- */
- @Test
- public void testInvalidateSession4() throws Exception {
- Callback c_1 = new Callback() {
- @Override
- public void call(HttpServletRequest request, HttpServletResponse response)
- throws IOException, ServletException {
- HttpSession s = request.getSession();
- s.invalidate();
- PrintWriter out = response.getWriter();
- try {
- s.getCreationTime();
- } catch (IllegalStateException iex) {
- out.write("OK");
- }
- }
- };
-
- tester.setAttribute("callback_1", c_1);
-
- servletHolder.setInitParameter("test.callback", "callback_1");
-
- tester.start();
- ContextManager.getInstance().putContext(
- servletHolder.getServlet().getServletConfig().getServletContext());
-
- request.setMethod("GET");
- request.setURI("/test/hello");
- request.setHeader("Host", "tester");
- request.setVersion("HTTP/1.0");
- response = HttpTester.parseResponse(tester.getResponses(request.generate()));
-
- assertEquals("OK", response.getContent());
- }
-
- /**
- * Test that invalidating a session does not throw an exception for subsequent
- * getId calls.
- */
- @Test
- public void testInvalidateSession5() throws Exception {
- Callback c_1 = new Callback() {
- @Override
- public void call(HttpServletRequest request, HttpServletResponse response)
- throws IOException, ServletException {
- HttpSession s = request.getSession();
- s.invalidate();
- s.getId();
- PrintWriter out = response.getWriter();
- out.write("OK");
- }
- };
-
- tester.setAttribute("callback_1", c_1);
-
- servletHolder.setInitParameter("test.callback", "callback_1");
-
- tester.start();
- ContextManager.getInstance().putContext(
- servletHolder.getServlet().getServletConfig().getServletContext());
-
- request.setMethod("GET");
- request.setURI("/test/hello");
- request.setHeader("Host", "tester");
- request.setVersion("HTTP/1.0");
- response = HttpTester.parseResponse(tester.getResponses(request.generate()));
-
- assertEquals("OK", response.getContent());
- }
-
- /**
- * Test that invalidating a session throws an exception on subsequent access.
- */
- @Test
- public void testInvalidateSession6() throws Exception {
- Callback c_1 = new Callback() {
- @Override
- public void call(HttpServletRequest request, HttpServletResponse response)
- throws IOException, ServletException {
- HttpSession s = request.getSession();
- s.invalidate();
- PrintWriter out = response.getWriter();
- try {
- s.getLastAccessedTime();
- } catch (IllegalStateException iex) {
- out.write("OK");
- }
- }
- };
-
- tester.setAttribute("callback_1", c_1);
-
- servletHolder.setInitParameter("test.callback", "callback_1");
-
- tester.start();
- ContextManager.getInstance().putContext(
- servletHolder.getServlet().getServletConfig().getServletContext());
-
- request.setMethod("GET");
- request.setURI("/test/hello");
- request.setHeader("Host", "tester");
- request.setVersion("HTTP/1.0");
- response = HttpTester.parseResponse(tester.getResponses(request.generate()));
-
- assertEquals("OK", response.getContent());
- }
-
- /**
- * Test that invalidating a session does not throw an exception for
- * subsequent getMaxInactiveInterval calls.
- */
-
-// I've commented this out for now as Jetty seems to want to throw an
-// Exception here where the HttpServlet api doesn't specify that.
- @Test
- public void testInvalidateSession7() throws Exception {
- Callback c_1 = new Callback() {
- @Override
- public void call(HttpServletRequest request,
- HttpServletResponse response) throws IOException, ServletException {
- HttpSession s = request.getSession();
- s.invalidate();
- s.getMaxInactiveInterval();
- PrintWriter out = response.getWriter();
- out.write("OK");
- }
- };
-
- tester.setAttribute("callback_1", c_1);
-
- servletHolder.setInitParameter("test.callback", "callback_1");
-
- tester.start();
- ContextManager.getInstance().putContext(
- servletHolder.getServlet().getServletConfig().getServletContext());
-
- request.setMethod("GET");
- request.setURI("/test/hello");
- request.setHeader("Host", "tester");
- request.setVersion("HTTP/1.0");
- response = HttpTester.parseResponse(tester.getResponses(request.generate()));
-
- assertEquals("OK", response.getContent());
- }
-
- /**
- * Test that invalidating a session does not throw an exception for subsequent
- * getServletContext calls.
- */
- @Test
- public void testInvalidateSession8() throws Exception {
- Callback c_1 = new Callback() {
- @Override
- public void call(HttpServletRequest request, HttpServletResponse response)
- throws IOException, ServletException {
- HttpSession s = request.getSession();
- s.invalidate();
- s.getServletContext();
- PrintWriter out = response.getWriter();
- out.write("OK");
- }
- };
-
- tester.setAttribute("callback_1", c_1);
-
- servletHolder.setInitParameter("test.callback", "callback_1");
-
- tester.start();
- ContextManager.getInstance().putContext(
- servletHolder.getServlet().getServletConfig().getServletContext());
-
- request.setMethod("GET");
- request.setURI("/test/hello");
- request.setHeader("Host", "tester");
- request.setVersion("HTTP/1.0");
- response = HttpTester.parseResponse(tester.getResponses(request.generate()));
-
- assertEquals("OK", response.getContent());
- }
-
- /**
- * Test that invalidating a session throws an exception on subsequent access.
- */
- @Test
- public void testInvalidateSession9() throws Exception {
- Callback c_1 = new Callback() {
- @Override
- public void call(HttpServletRequest request, HttpServletResponse response)
- throws IOException, ServletException {
- HttpSession s = request.getSession();
- s.invalidate();
- PrintWriter out = response.getWriter();
- try {
- s.isNew();
- } catch (IllegalStateException iex) {
- out.write("OK");
- }
- }
- };
-
- tester.setAttribute("callback_1", c_1);
-
- servletHolder.setInitParameter("test.callback", "callback_1");
-
- tester.start();
- ContextManager.getInstance().putContext(
- servletHolder.getServlet().getServletConfig().getServletContext());
-
- request.setMethod("GET");
- request.setURI("/test/hello");
- request.setHeader("Host", "tester");
- request.setVersion("HTTP/1.0");
- response = HttpTester.parseResponse(tester.getResponses(request.generate()));
-
- assertEquals("OK", response.getContent());
- }
-
- /**
- * Test that invalidating a session throws an exception on subsequent access.
- */
- @Test
- public void testInvalidateSession10() throws Exception {
- Callback c_1 = new Callback() {
- @Override
- public void call(HttpServletRequest request, HttpServletResponse response)
- throws IOException, ServletException {
- HttpSession s = request.getSession();
- s.invalidate();
- PrintWriter out = response.getWriter();
- try {
- s.removeAttribute("foo");
- } catch (IllegalStateException iex) {
- out.write("OK");
- }
- }
- };
-
- tester.setAttribute("callback_1", c_1);
-
- servletHolder.setInitParameter("test.callback", "callback_1");
-
- tester.start();
- ContextManager.getInstance().putContext(
- servletHolder.getServlet().getServletConfig().getServletContext());
-
- request.setMethod("GET");
- request.setURI("/test/hello");
- request.setHeader("Host", "tester");
- request.setVersion("HTTP/1.0");
- response = HttpTester.parseResponse(tester.getResponses(request.generate()));
-
- assertEquals("OK", response.getContent());
- }
-
- /**
- * Test that invalidating a session throws an exception on subsequent access.
- */
- @Test
- public void testInvalidateSession11() throws Exception {
- Callback c_1 = new Callback() {
- @Override
- public void call(HttpServletRequest request, HttpServletResponse response)
- throws IOException, ServletException {
- HttpSession s = request.getSession();
- s.invalidate();
- PrintWriter out = response.getWriter();
- try {
- s.setAttribute("foo", "bar");
- } catch (IllegalStateException iex) {
- out.write("OK");
- }
- }
- };
-
- tester.setAttribute("callback_1", c_1);
-
- servletHolder.setInitParameter("test.callback", "callback_1");
-
- tester.start();
- ContextManager.getInstance().putContext(
- servletHolder.getServlet().getServletConfig().getServletContext());
-
- request.setMethod("GET");
- request.setURI("/test/hello");
- request.setHeader("Host", "tester");
- request.setVersion("HTTP/1.0");
- response = HttpTester.parseResponse(tester.getResponses(request.generate()));
-
- assertEquals("OK", response.getContent());
- }
-
- /**
- * Test that invalidating a session does not throw an exception for subsequent
- * setMaxInactiveInterval calls.
- */
- @Test
- public void testInvalidateSession12() throws Exception {
- Callback c_1 = new Callback() {
- @Override
- public void call(HttpServletRequest request, HttpServletResponse response)
- throws IOException, ServletException {
- HttpSession s = request.getSession();
- s.invalidate();
- s.setMaxInactiveInterval(1);
- PrintWriter out = response.getWriter();
- out.write("OK");
- }
- };
-
- tester.setAttribute("callback_1", c_1);
-
- servletHolder.setInitParameter("test.callback", "callback_1");
-
- tester.start();
- ContextManager.getInstance().putContext(
- servletHolder.getServlet().getServletConfig().getServletContext());
-
- request.setMethod("GET");
- request.setURI("/test/hello");
- request.setHeader("Host", "tester");
- request.setVersion("HTTP/1.0");
- response = HttpTester.parseResponse(tester.getResponses(request.generate()));
-
- assertEquals("OK", response.getContent());
- }
-
- /**
- * Test that invalidating a session results in null being returned on
- * subsequent getSession(false) calls.
- */
- @Test
- public void testInvalidateSession13() throws Exception {
- Callback c_1 = new Callback() {
- @Override
- public void call(HttpServletRequest request, HttpServletResponse response)
- throws IOException, ServletException {
- HttpSession s = request.getSession();
- s.invalidate();
- s = request.getSession(false);
- PrintWriter out = response.getWriter();
- if (s == null) {
- out.write("OK");
- } else {
- out.write(s.toString());
- }
- }
- };
-
- tester.setAttribute("callback_1", c_1);
-
- servletHolder.setInitParameter("test.callback", "callback_1");
-
- tester.start();
- ContextManager.getInstance().putContext(
- servletHolder.getServlet().getServletConfig().getServletContext());
-
- request.setMethod("GET");
- request.setURI("/test/hello");
- request.setHeader("Host", "tester");
- request.setVersion("HTTP/1.0");
- response = HttpTester.parseResponse(tester.getResponses(request.generate()));
-
- assertEquals("OK", response.getContent());
- }
-
-
- /**
- * Test that we can invalidate and then recreate a new session
- */
- @Test
- public void testInvalidateAndRecreateSession() throws Exception {
- Callback c_1 = new Callback() {
- @Override
- public void call(HttpServletRequest request, HttpServletResponse response)
- throws IOException, ServletException {
-
- PrintWriter out = response.getWriter();
- out.write(request.getSession().getId());
- }
- };
-
- Callback c_2 = new Callback() {
- @Override
- public void call(HttpServletRequest request, HttpServletResponse response)
- throws IOException, ServletException {
- HttpSession s = request.getSession();
- s.invalidate();
-
- PrintWriter out = response.getWriter();
- out.write(request.getSession().getId());
- }
- };
-
- tester.setAttribute("callback_1", c_1);
- tester.setAttribute("callback_2", c_2);
-
- ServletHolder sh = tester.addServlet(BasicServlet.class, "/dispatch");
- sh.setInitParameter("test.callback", "callback_2");
-
- tester.start();
- ContextManager.getInstance().putContext(
- sh.getServlet().getServletConfig().getServletContext());
-
- request.setMethod("GET");
- request.setURI("/test/hello");
- request.setHeader("Host", "tester");
- request.setVersion("HTTP/1.0");
-
- response = HttpTester.parseResponse(tester.getResponses(request.generate()));
- String session1 = response.getContent();
-
- request.setHeader("Cookie", "JSESSIONID=" + session1);
- request.setURI("/test/request2");
- response = HttpTester.parseResponse(tester.getResponses(request.generate()));
-
- String session12 = response.getContent();
- assertFalse("First and subsequent session ids must not be the same",
- session1.equals(session12));
- }
-
-
- /**
- * Test that creation time does not change on subsequent access
- */
- @Test
- public void testGetCreationTime() throws Exception {
- Callback c = new Callback() {
- @Override
- public void call(HttpServletRequest request, HttpServletResponse response)
- throws IOException {
- HttpSession session = request.getSession();
- PrintWriter out = response.getWriter();
- out.write(Long.toString(session.getCreationTime()));
- }
- };
-
- tester.setAttribute("callback_1", c);
- tester.start();
- ContextManager.getInstance().putContext(
- servletHolder.getServlet().getServletConfig().getServletContext());
-
- request.setMethod("GET");
- request.setURI("/test/hello");
- request.setHeader("Host", "tester");
- request.setVersion("HTTP/1.0");
-
- response = HttpTester.parseResponse(tester.getResponses(request.generate()));
-
- long time1 = Long.parseLong(response.getContent());
- assertTrue("Creation time should be positive", time1 > 0);
-
- List<Cookie> cookies = getCookies(response);
- request.setHeader("Cookie", "JSESSIONID=" + cookies.get(0).getValue());
-
- try {
- Thread.sleep(1000);
- } catch (Exception ex) {
- }
-
- response = HttpTester.parseResponse(tester.getResponses(request.generate()));
- long time2 = Long.parseLong(response.getContent());
- assertTrue("Creation time should be the same across requests",
- time1 == time2);
- }
-
- /**
- * Test that the last accessed time is updated on subsequent access
- */
- @Test
- public void testGetLastAccessedTime() throws Exception {
- Callback c = new Callback() {
- @Override
- public void call(HttpServletRequest request, HttpServletResponse response)
- throws IOException {
- HttpSession session = request.getSession();
- PrintWriter out = response.getWriter();
- out.write(Long.toString(session.getLastAccessedTime()));
- }
- };
-
- tester.setAttribute("callback_1", c);
- tester.start();
- ContextManager.getInstance().putContext(
- servletHolder.getServlet().getServletConfig().getServletContext());
-
- request.setMethod("GET");
- request.setURI("/test/hello");
- request.setHeader("Host", "tester");
- request.setVersion("HTTP/1.0");
-
- response = HttpTester.parseResponse(tester.getResponses(request.generate()));
-
- long time1 = Long.parseLong(response.getContent());
-// assertTrue("Last accessed time should be positive", time1 > 0);
-
- List<Cookie> cookies = getCookies(response);
- request.setHeader("Cookie", "JSESSIONID=" + cookies.get(0).getValue());
-
- Thread.sleep(1000);
-
- response = HttpTester.parseResponse(tester.getResponses(request.generate()));
- long time2 = Long.parseLong(response.getContent());
- assertTrue("Last accessed time should be increasing across requests",
- time2 > time1);
- }
-
- /**
- * Test that the underlying native session remains the same across requests
- */
- @Test
- public void testNativeSessionRemainsUnchanged() throws Exception {
- Callback c = new Callback() {
- @Override
- public void call(HttpServletRequest request, HttpServletResponse response)
- throws IOException {
- GemfireHttpSession session = (GemfireHttpSession) request.getSession();
- PrintWriter out = response.getWriter();
- out.write(session.getNativeSession().getId());
- }
- };
-
- tester.setAttribute("callback_1", c);
- tester.start();
- ContextManager.getInstance().putContext(
- servletHolder.getServlet().getServletConfig().getServletContext());
-
- request.setMethod("GET");
- request.setURI("/test/hello");
- request.setHeader("Host", "tester");
- request.setVersion("HTTP/1.0");
-
- response = HttpTester.parseResponse(tester.getResponses(request.generate()));
- String nativeSessionId = response.getContent();
-
- List<Cookie> cookies = getCookies(response);
- String sessionId = cookies.get(0).getValue();
- Region r = getRegion();
-
- assertEquals(
- "Cached native session id does not match servlet returned native session id",
- nativeSessionId,
- ((GemfireHttpSession) r.get(sessionId)).getNativeSession().getId());
-
- request.setHeader("Cookie", "JSESSIONID=" + cookies.get(0).getValue());
- response = HttpTester.parseResponse(tester.getResponses(request.generate()));
-
- assertEquals(
- "Underlying native sessions must remain the same across requests",
- nativeSessionId,
- ((GemfireHttpSession) r.get(sessionId)).getNativeSession().getId());
- }
-
- /**
- * Test session id embedded in the URL
- */
- @Test
- public void testSessionIdEmbeddedInUrl() throws Exception {
- Callback c = new Callback() {
- @Override
- public void call(HttpServletRequest request, HttpServletResponse response)
- throws IOException {
- GemfireHttpSession session = (GemfireHttpSession) request.getSession();
- PrintWriter out = response.getWriter();
- out.write(session.getId());
- }
- };
-
- tester.setAttribute("callback_1", c);
- tester.start();
- ContextManager.getInstance().putContext(
- servletHolder.getServlet().getServletConfig().getServletContext());
-
- request.setMethod("GET");
- request.setURI("/test/hello");
- request.setHeader("Host", "tester");
- request.setVersion("HTTP/1.0");
-
- response = HttpTester.parseResponse(tester.getResponses(request.generate()));
- List<Cookie> cookies = getCookies(response);
- String sessionId = response.getContent();
- assertEquals("Session ids should be the same", sessionId,
- cookies.get(0).getValue());
-
- request.setURI("/test/hello;jsessionid=" + sessionId);
- response = HttpTester.parseResponse(tester.getResponses(request.generate()));
- cookies = getCookies(response);
-
- assertEquals("Session ids should be the same", sessionId,
- cookies.get(0).getValue());
- }
-
-
- /**
- * Test that request forward dispatching works
- */
- @Test
- public void testDispatchingForward1() throws Exception {
- Callback c_1 = new Callback() {
- @Override
- public void call(HttpServletRequest request, HttpServletResponse response)
- throws IOException, ServletException {
- RequestDispatcher dispatcher = request.getRequestDispatcher("dispatch");
- dispatcher.forward(request, response);
-
- // This should not appear in the output
- PrintWriter out = response.getWriter();
- out.write("bang");
- }
- };
-
- // This is the callback used by the forward servlet
- Callback c_2 = new Callback() {
- @Override
- public void call(HttpServletRequest request, HttpServletResponse response)
- throws IOException, ServletException {
- PrintWriter out = response.getWriter();
- out.write("dispatched");
- }
- };
-
- tester.setAttribute("callback_1", c_1);
- tester.setAttribute("callback_2", c_2);
-
- ServletHolder sh = tester.addServlet(BasicServlet.class, "/dispatch");
- sh.setInitParameter("test.callback", "callback_2");
-
- tester.start();
- ContextManager.getInstance().putContext(
- sh.getServlet().getServletConfig().getServletContext());
-
- request.setMethod("GET");
- request.setURI("/test/hello");
- request.setHeader("Host", "tester");
- request.setVersion("HTTP/1.0");
-
- response = HttpTester.parseResponse(tester.getResponses(request.generate()));
- assertEquals("dispatched", response.getContent());
-
- ContextManager.getInstance().removeContext(
- sh.getServlet().getServletConfig().getServletContext());
- }
-
-
- /**
- * Test that request include dispatching works
- */
- @Test
- public void testDispatchingInclude() throws Exception {
- Callback c_1 = new Callback() {
- @Override
- public void call(HttpServletRequest request, HttpServletResponse response)
- throws IOException, ServletException {
- RequestDispatcher dispatcher = request.getRequestDispatcher("dispatch");
- dispatcher.include(request, response);
-
- // This *should* appear in the output
- PrintWriter out = response.getWriter();
- out.write("_bang");
- }
- };
-
- // This is the callback used by the include servlet
- Callback c_2 = new Callback() {
- @Override
- public void call(HttpServletRequest request, HttpServletResponse response)
- throws IOException, ServletException {
- PrintWriter out = response.getWriter();
- out.write("dispatched");
- }
- };
-
- tester.setAttribute("callback_1", c_1);
- tester.setAttribute("callback_2", c_2);
-
- ServletHolder sh = tester.addServlet(BasicServlet.class, "/dispatch");
- sh.setInitParameter("test.callback", "callback_2");
-
- tester.start();
- ContextManager.getInstance().putContext(
- sh.getServlet().getServletConfig().getServletContext());
-
- request.setMethod("GET");
- request.setURI("/test/hello");
- request.setHeader("Host", "tester");
- request.setVersion("HTTP/1.0");
-
- response = HttpTester.parseResponse(tester.getResponses(request.generate()));
- assertEquals("dispatched_bang", response.getContent());
-
- ContextManager.getInstance().removeContext(
- sh.getServlet().getServletConfig().getServletContext());
- }
-
-
- /**
- * Test to try and simulate a failover scenario
- */
- @Test
- public void testFailover1() throws Exception {
- Callback c_1 = new Callback() {
- @Override
- public void call(HttpServletRequest request, HttpServletResponse response)
- throws IOException, ServletException {
- HttpSession s = request.getSession();
- s.setAttribute("foo", "bar");
-
- PrintWriter out = response.getWriter();
- out.write(request.getSession().getId());
- }
- };
-
- Callback c_2 = new Callback() {
- @Override
- public void call(HttpServletRequest request, HttpServletResponse response)
- throws IOException, ServletException {
- HttpSession s = request.getSession();
-
- PrintWriter out = response.getWriter();
- out.write((String) s.getAttribute("foo"));
- }
- };
-
- tester.setAttribute("callback_1", c_1);
- tester.setAttribute("callback_2", c_2);
-
- ServletHolder sh = tester.addServlet(BasicServlet.class, "/request2");
- sh.setInitParameter("test.callback", "callback_2");
-
- tester.start();
- ContextManager.getInstance().putContext(
- sh.getServlet().getServletConfig().getServletContext());
-
- request.setMethod("GET");
- request.setURI("/test/hello");
- request.setHeader("Host", "tester");
- request.setVersion("HTTP/1.0");
-
- response = HttpTester.parseResponse(tester.getResponses(request.generate()));
- String id = response.getContent();
-
- // Now we simulate the failover by removing the native session from
- // the stored session
- Region r = getRegion();
- GemfireHttpSession sessObj = (GemfireHttpSession) r.get(id);
- sessObj.setNativeSession(null);
-
- r.put(id, sessObj);
-
- request.setHeader("Cookie", "JSESSIONID=" + id);
- request.setURI("/test/request2");
- response = HttpTester.parseResponse(tester.getResponses(request.generate()));
-
- assertEquals("bar", response.getContent());
- }
-
- @Test
- public void testHttpSessionListener1() throws Exception {
- HttpSessionListenerImpl listener = new HttpSessionListenerImpl();
- tester.getContext().getSessionHandler().addEventListener(listener);
-
- Callback c = new Callback() {
- @Override
- public void call(HttpServletRequest request, HttpServletResponse response)
- throws IOException {
- HttpSession s = request.getSession();
- // This is set in HttpSessionListenerImpl
- String result = (String) s.getAttribute("gemfire-session-id");
- response.getWriter().write(result);
- }
- };
-
- tester.setAttribute("callback_1", c);
- tester.start();
- ContextManager.getInstance().putContext(
- servletHolder.getServlet().getServletConfig().getServletContext());
-
- request.setMethod("GET");
- request.setURI("/test/hello");
- request.setHeader("Host", "tester");
- request.setVersion("HTTP/1.0");
-
- response = HttpTester.parseResponse(tester.getResponses(request.generate()));
-
- assertEquals(200, response.getStatus());
-
- List<Cookie> cookies = getCookies(response);
-
-// AbstractListener listener = RendezvousManager.getListener();
- tester.stop();
-
- assertTrue("Timeout waiting for events",
- listener.await(1, TimeUnit.SECONDS));
- assertEquals(ListenerEventType.SESSION_CREATED,
- listener.events.get(0));
- assertEquals(ListenerEventType.SESSION_DESTROYED,
- listener.events.get(1));
- assertEquals(cookies.get(0).getValue(), response.getContent());
- }
-
- @Test
- public void testHttpSessionListener2() throws Exception {
- HttpSessionListenerImpl2 listener = new HttpSessionListenerImpl2();
- tester.getContext().getSessionHandler().addEventListener(listener);
-
- Callback c = new Callback() {
- @Override
- public void call(HttpServletRequest request, HttpServletResponse response)
- throws IOException {
- HttpSession s = request.getSession();
- s.setAttribute("test01", "test01");
- s = request.getSession(false);
- s.invalidate();
- response.getWriter().write(s.getId());
- }
- };
-
- tester.setAttribute("callback_1", c);
- tester.start();
- ContextManager.getInstance().putContext(
- servletHolder.getServlet().getServletConfig().getServletContext());
-
- request.setMethod("GET");
- request.setURI("/test/hello");
- request.setHeader("Host", "tester");
- request.setVersion("HTTP/1.0");
-
- response = HttpTester.parseResponse(tester.getResponses(request.generate()));
-
- assertEquals(200, response.getStatus());
-
- List<Cookie> cookies = getCookies(response);
-
- tester.stop();
-
- assertTrue("Timeout waiting for events",
- listener.await(1, TimeUnit.SECONDS));
- assertEquals(ListenerEventType.SESSION_CREATED,
- listener.events.get(0));
- assertEquals(ListenerEventType.SESSION_DESTROYED,
- listener.events.get(1));
- assertEquals(cookies.get(0).getValue(), response.getContent());
- }
-
-
-
-
-// @Test
- public void testJsp() throws Exception {
- tester.setResourceBase("target/test-classes");
- ServletHolder jspHolder = tester.addServlet(JspServlet.class, "/test/*");
- jspHolder.setInitOrder(1);
-
- jspHolder.setInitParameter("scratchdir", tmpdir.getPath());
-
- Callback c_1 = new Callback() {
- @Override
- public void call(HttpServletRequest request, HttpServletResponse response)
- throws IOException, ServletException {
- request.getSession().setAttribute("foo", "bar");
- request.setAttribute("foo", "baz");
- RequestDispatcher dispatcher = request.getRequestDispatcher(
- "pagecontext.jsp");
- dispatcher.forward(request, response);
- }
- };
-
- tester.getContext().setClassLoader(Thread.currentThread().getContextClassLoader());
- tester.setAttribute("callback_1", c_1);
-
- tester.start();
-
- request.setMethod("GET");
- request.setURI("/test/hello");
- request.setHeader("Host", "tester");
- request.setVersion("HTTP/1.0");
-
- response = HttpTester.parseResponse(tester.getResponses(request.generate()));
-
- assertEquals(200, response.getStatus());
- assertEquals("baz", response.getContent().trim());
- }
-
-
- ////////////////////////////////////////////////////////////////////
- // Private methods
-
- /**
- * Why doesn't HttpTester do this already??
- */
- private List<Cookie> getCookies(HttpTester.Response response) {
- List<Cookie> cookies = new ArrayList<Cookie>();
-
- Enumeration e = response.getValues("Set-Cookie");
-
- while (e != null && e.hasMoreElements()) {
- String header = (String) e.nextElement();
- Cookie c = null;
-
- StringTokenizer st = new StringTokenizer(header, ";");
- while (st.hasMoreTokens()) {
- String[] split = st.nextToken().split("=");
- String param = split[0].trim();
- String value = null;
- if (split.length > 1) {
- value = split[1].trim();
- }
- if ("version".equalsIgnoreCase(param)) {
- c.setVersion(Integer.parseInt(value));
- } else if ("comment".equalsIgnoreCase(param)) {
- c.setComment(value);
- } else if ("domain".equalsIgnoreCase(param)) {
- c.setDomain(value);
- } else if ("max-age".equalsIgnoreCase(param)) {
- c.setMaxAge(Integer.parseInt(value));
- } else if ("discard".equalsIgnoreCase(param)) {
- c.setMaxAge(-1);
- } else if ("path".equalsIgnoreCase(param)) {
- c.setPath(value);
- } else if ("secure".equalsIgnoreCase(param)) {
- c.setSecure(true);
- } else if ("httponly".equalsIgnoreCase(param)) {
- // Ignored??
- } else {
- if (c == null) {
- c = new Cookie(param, value);
- } else {
- throw new IllegalStateException("Unknown cookie param: " + param);
- }
- }
- }
-
- if (c != null) {
- cookies.add(c);
- }
- }
-
- return cookies;
- }
-
- private Region getRegion() {
- // Yuck...
- return ((GemfireSessionManager) ((SessionCachingFilter) filterHolder.getFilter()).getSessionManager()).getCache().getCache().getRegion(
- "gemfire_modules_sessions");
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/890d62e3/modules/gemfire-modules-session-integration-test/src/test/java/com/gemstone/gemfire/modules/session/internal/filter/MyServletTester.java
----------------------------------------------------------------------
diff --git a/modules/gemfire-modules-session-integration-test/src/test/java/com/gemstone/gemfire/modules/session/internal/filter/MyServletTester.java b/modules/gemfire-modules-session-integration-test/src/test/java/com/gemstone/gemfire/modules/session/internal/filter/MyServletTester.java
deleted file mode 100644
index 1ff6e70..0000000
--- a/modules/gemfire-modules-session-integration-test/src/test/java/com/gemstone/gemfire/modules/session/internal/filter/MyServletTester.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*=========================================================================
- * Copyright (c) 2010-2014 Pivotal Software, Inc. All Rights Reserved.
- * This product is protected by U.S. and international copyright
- * and intellectual property laws. Pivotal products are covered by
- * one or more patents listed at http://www.pivotal.io/patents.
- *=========================================================================
- */
-/*
- * To change this template, choose Tools | Templates
- * and open the template in the editor.
- */
-
-package com.gemstone.gemfire.modules.session.internal.filter;
-
-import org.eclipse.jetty.servlet.ServletTester;
-
-/**
- * Extend the base ServletTester class with a couple of helper methods. This
- * depends on a patched ServletTester class which exposes the _server variable
- * as package-private.
- */
-public class MyServletTester extends ServletTester {
-
- public boolean isStarted() {
-// return _server.isStarted();
- return false;
- }
-
- public boolean isStopped() {
-// return _server.isStopped();
- return false;
- }
-}