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/22 22:08:20 UTC

[08/17] incubator-geode git commit: GEODE-14: Fix test dependencies

GEODE-14: Fix test dependencies

- Comment out WAN code


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/437350a5
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/437350a5
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/437350a5

Branch: refs/heads/feature/GEODE-14
Commit: 437350a5ef5e534ed30a143d0e38a72daa46e53d
Parents: 63bc5f0
Author: Jens Deppe <jd...@pivotal.io>
Authored: Mon Dec 21 14:51:01 2015 -0800
Committer: Jens Deppe <jd...@pivotal.io>
Committed: Mon Dec 21 14:51:01 2015 -0800

----------------------------------------------------------------------
 build.gradle                                    |   9 +-
 extensions/gemfire-modules/build.gradle         |  17 +-
 .../session/bootstrap/PeerToPeerCache.java      |   3 +-
 .../gemfire/modules/session/TestSessions.java   | 512 ------------------
 .../modules/session/TestSessionsJUnitTest.java  | 515 +++++++++++++++++++
 .../test/resources/tomcat/conf/tomcat-users.xml |   3 +
 .../tomcat/conf/tomcat-users.xml                |   3 -
 gradle/dependency-versions.properties           |   4 +-
 8 files changed, 538 insertions(+), 528 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/437350a5/build.gradle
----------------------------------------------------------------------
diff --git a/build.gradle b/build.gradle
index f464dc3..6f81c6f 100755
--- a/build.gradle
+++ b/build.gradle
@@ -153,10 +153,13 @@ subprojects {
   // Here we want to disable all transitive dependencies on external artifacts.  This
   // allows us to lock down library versions.  However, we want project dependencies to
   // be transitive such that the libraries of a dependent project are automatically included.
+  // This restriction is also relaxed for test dependencies.
   configurations.all {
-    dependencies.all { dep ->
-      if (dep instanceof ModuleDependency && !(dep instanceof ProjectDependency)) {
-        dep.transitive = false
+    if (it.name != 'testCompile' && it.name != 'testRuntime') {
+      dependencies.all { dep ->
+        if (dep instanceof ModuleDependency && !(dep instanceof ProjectDependency)) {
+          dep.transitive = false
+        }
       }
     }
   }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/437350a5/extensions/gemfire-modules/build.gradle
----------------------------------------------------------------------
diff --git a/extensions/gemfire-modules/build.gradle b/extensions/gemfire-modules/build.gradle
index ef1330d..4290189 100644
--- a/extensions/gemfire-modules/build.gradle
+++ b/extensions/gemfire-modules/build.gradle
@@ -1,17 +1,22 @@
 
 test  {
-  include '**/TestSessions.class'
-  workingDir = "${projectDir}"
+  doFirst {
+    copy {
+      from 'build/resources/test/tomcat'
+      into 'build/test/tomcat/'
+    }
+  }
 }
 
 dependencies {
   compile project(':gemfire-core')
 
-  compile 'org.apache.tomcat:catalina:' + project.'modules.tomcat.version'
-  compile 'org.apache.tomcat:catalina-ha:' + project.'modules.tomcat.version'
-  compile 'org.apache.tomcat:juli:' + project.'modules.tomcat.version'
+  compile 'org.apache.tomcat:catalina:' + project.'tomcat6.version'
+  compile 'org.apache.tomcat:catalina-ha:' + project.'tomcat6.version'
+  compile 'org.apache.tomcat:juli:' + project.'tomcat6.version'
 
-  testCompile 'org.httpunit:httpunit:' + project.'modules.httpunit.version'
+  testCompile 'org.httpunit:httpunit:' + project.'httpunit.version'
+  testRuntime 'org.apache.tomcat:coyote:' + project.'tomcat6.version'
 
   provided project(path: ':gemfire-junit', configuration: 'testOutput')
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/437350a5/extensions/gemfire-modules/src/main/java/com/gemstone/gemfire/modules/session/bootstrap/PeerToPeerCache.java
----------------------------------------------------------------------
diff --git a/extensions/gemfire-modules/src/main/java/com/gemstone/gemfire/modules/session/bootstrap/PeerToPeerCache.java b/extensions/gemfire-modules/src/main/java/com/gemstone/gemfire/modules/session/bootstrap/PeerToPeerCache.java
index b3d1b41..a088b5f 100644
--- a/extensions/gemfire-modules/src/main/java/com/gemstone/gemfire/modules/session/bootstrap/PeerToPeerCache.java
+++ b/extensions/gemfire-modules/src/main/java/com/gemstone/gemfire/modules/session/bootstrap/PeerToPeerCache.java
@@ -48,8 +48,7 @@ public class PeerToPeerCache extends AbstractCache {
     // If no cache exists, create one
     String message = null;
     if (this.cache == null) {
-      this.cache = new CacheFactory(
-          createDistributedSystemProperties()).create();
+      this.cache = new CacheFactory(createDistributedSystemProperties()).create();
       message = "Created ";
     } else {
       message = "Retrieved ";

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/437350a5/extensions/gemfire-modules/src/test/java/com/gemstone/gemfire/modules/session/TestSessions.java
----------------------------------------------------------------------
diff --git a/extensions/gemfire-modules/src/test/java/com/gemstone/gemfire/modules/session/TestSessions.java b/extensions/gemfire-modules/src/test/java/com/gemstone/gemfire/modules/session/TestSessions.java
deleted file mode 100644
index b1751b2..0000000
--- a/extensions/gemfire-modules/src/test/java/com/gemstone/gemfire/modules/session/TestSessions.java
+++ /dev/null
@@ -1,512 +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.session;
-
-import com.gemstone.gemfire.cache.Region;
-import com.gemstone.gemfire.modules.session.catalina.CommitSessionValve;
-import com.gemstone.gemfire.modules.session.catalina.DeltaSessionManager;
-import com.gemstone.gemfire.modules.session.catalina.PeerToPeerCacheLifecycleListener;
-import com.gemstone.gemfire.modules.session.catalina.Tomcat6DeltaSessionManager;
-
-import javax.servlet.http.HttpSession;
-import java.io.File;
-import java.io.IOException;
-import java.io.PrintWriter;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import com.meterware.httpunit.WebRequest;
-import com.meterware.httpunit.GetMethodWebRequest;
-import com.meterware.httpunit.WebConversation;
-import com.meterware.httpunit.WebResponse;
-import org.apache.catalina.Valve;
-import org.apache.catalina.core.StandardWrapper;
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
-
-import java.beans.PropertyChangeEvent;
-
-import static junit.framework.Assert.*;
-
-/**
- *
- */
-public class TestSessions {
-    private static EmbeddedTomcat server;
-
-    private static Region<String, HttpSession> region;
-
-    private static StandardWrapper servlet;
-
-    private static DeltaSessionManager sessionManager;
-
-    // Set up the servers we need
-    @BeforeClass
-    public static void setupClass() throws Exception {
-        // Create a per-user scratch directory
-        File tmpDir = new File(System.getProperty("java.io.tmpdir"),
-                "gemfire_modules-" + System.getProperty("user.name"));
-        tmpDir.mkdirs();
-        tmpDir.deleteOnExit();
-
-        String gemfireLog = tmpDir.getPath() +
-                System.getProperty("file.separator") + "gemfire_modules.log";
-
-        server = new EmbeddedTomcat("/test", 7890, "JVM-1");
-
-        PeerToPeerCacheLifecycleListener p2pListener = new PeerToPeerCacheLifecycleListener();
-        p2pListener.setProperty("mcast-port", "19991");
-        p2pListener.setProperty("log-level", "config");
-        p2pListener.setProperty("log-file", gemfireLog);
-        p2pListener.setProperty("writable-working-dir", tmpDir.getPath());
-        server.getEmbedded().addLifecycleListener(p2pListener);
-        sessionManager = new Tomcat6DeltaSessionManager();
-        sessionManager.setEnableCommitValve(true);
-        server.getRootContext().setManager(sessionManager);
-
-        servlet = server.addServlet("/test/*", "default", CommandServlet.class.getName());
-        server.startContainer();
-
-        /**
-         * Can only retrieve the region once the container has started up
-         * (and the cache has started too).
-         */
-        region = sessionManager.getSessionCache().getSessionRegion();
-    }
-
-    @AfterClass
-    public static void teardownClass() throws Exception {
-        server.stopContainer();
-    }
-    /**
-     * Reset some data
-     */
-    @Before
-    public void setup() throws Exception {
-        sessionManager.setMaxInactiveInterval(30);
-        region.clear();
-    }
-
-    /**
-     * Check that the basics are working
-     */
-    @Test
-    public void testSanity() throws Exception {
-        WebConversation wc = new WebConversation();
-        WebRequest req = new GetMethodWebRequest("http://localhost:7890/test");
-        req.setParameter("cmd", QueryCommand.GET.name());
-        req.setParameter("param", "null");
-        WebResponse response = wc.getResponse(req);
-
-        assertEquals("JSESSIONID", response.getNewCookieNames()[0]);
-    }
-
-    /**
-     * Test callback functionality. This is here really just as an example.
-     * Callbacks are useful to implement per test actions which can be defined
-     * within the actual test method instead of in a separate servlet class.
-     */
-    @Test
-    public void testCallback() throws Exception {
-        final String helloWorld = "Hello World";
-        Callback c = new Callback() {
-
-            @Override
-            public void call(HttpServletRequest request, HttpServletResponse response)
-                    throws IOException {
-                PrintWriter out = response.getWriter();
-                out.write(helloWorld);
-            }
-        };
-        servlet.getServletContext().setAttribute("callback", c);
-
-        WebConversation wc = new WebConversation();
-        WebRequest req = new GetMethodWebRequest("http://localhost:7890/test");
-
-        req.setParameter("cmd", QueryCommand.CALLBACK.name());
-        req.setParameter("param", "callback");
-        WebResponse response = wc.getResponse(req);
-
-        assertEquals(helloWorld, response.getText());
-    }
-
-    /**
-     * Test that calling session.isNew() works for the initial as well as
-     * subsequent requests.
-     */
-    @Test
-    public void testIsNew() throws Exception {
-        Callback c = new Callback() {
-
-            @Override
-            public void call(HttpServletRequest request, HttpServletResponse response)
-                    throws IOException {
-                HttpSession session = request.getSession();
-                response.getWriter().write(Boolean.toString(session.isNew()));
-            }
-        };
-        servlet.getServletContext().setAttribute("callback", c);
-
-        WebConversation wc = new WebConversation();
-        WebRequest req = new GetMethodWebRequest("http://localhost:7890/test");
-
-        req.setParameter("cmd", QueryCommand.CALLBACK.name());
-        req.setParameter("param", "callback");
-        WebResponse response = wc.getResponse(req);
-
-        assertEquals("true", response.getText());
-        response = wc.getResponse(req);
-
-        assertEquals("false", response.getText());
-    }
-
-    /**
-     * Check that our session persists. The values we pass in as query
-     * params are used to set attributes on the session.
-     */
-    @Test
-    public void testSessionPersists1() throws Exception {
-        String key = "value_testSessionPersists1";
-        String value = "Foo";
-
-        WebConversation wc = new WebConversation();
-        WebRequest req = new GetMethodWebRequest("http://localhost:7890/test");
-        req.setParameter("cmd", QueryCommand.SET.name());
-        req.setParameter("param", key);
-        req.setParameter("value", value);
-        WebResponse response = wc.getResponse(req);
-        String sessionId = response.getNewCookieValue("JSESSIONID");
-
-        assertNotNull("No apparent session cookie", sessionId);
-
-        // The request retains the cookie from the prior response...
-        req.setParameter("cmd", QueryCommand.GET.name());
-        req.setParameter("param", key);
-        req.removeParameter("value");
-        response = wc.getResponse(req);
-
-        assertEquals(value, response.getText());
-    }
-
-    /**
-     * Check that our session persists beyond the container restarting.
-     */
-//    public void testSessionPersists2() throws Exception {
-//        String key = "value_testSessionPersists2";
-//        String value = "Foo";
-//
-//        WebConversation wc = new WebConversation();
-//        WebRequest req = new GetMethodWebRequest("http://localhost:7890/test");
-//        req.setParameter("cmd", QueryCommand.SET.name());
-//        req.setParameter("param", key);
-//        req.setParameter("value", value);
-//        WebResponse response = wc.getResponse(req);
-//        String sessionId = response.getNewCookieValue("JSESSIONID");
-//
-//        assertNotNull("No apparent session cookie", sessionId);
-//
-//        // Restart the container
-//        AllTests.teardownClass();
-//        AllTests.setupClass();
-//
-//        // The request retains the cookie from the prior response...
-//        req.setParameter("cmd", QueryCommand.GET.name());
-//        req.setParameter("param", key);
-//        req.removeParameter("value");
-//        response = wc.getResponse(req);
-//
-//        assertEquals(value, response.getText());
-//    }
-
-    /**
-     * Test that invalidating a session makes it's attributes inaccessible.
-     */
-    @Test
-    public void testInvalidate() throws Exception {
-        String key = "value_testInvalidate";
-        String value = "Foo";
-
-        WebConversation wc = new WebConversation();
-        WebRequest req = new GetMethodWebRequest("http://localhost:7890/test");
-
-        // Set an attribute
-        req.setParameter("cmd", QueryCommand.SET.name());
-        req.setParameter("param", key);
-        req.setParameter("value", value);
-        WebResponse response = wc.getResponse(req);
-
-        // Invalidate the session
-        req.removeParameter("param");
-        req.removeParameter("value");
-        req.setParameter("cmd", QueryCommand.INVALIDATE.name());
-        wc.getResponse(req);
-
-        // The attribute should not be accessible now...
-        req.setParameter("cmd", QueryCommand.GET.name());
-        req.setParameter("param", key);
-        response = wc.getResponse(req);
-
-        assertEquals("", response.getText());
-    }
-
-    /**
-     * Test setting the session expiration
-     */
-    @Test
-    public void testSessionExpiration1() throws Exception {
-        // TestSessions only live for a second
-        sessionManager.setMaxInactiveInterval(1);
-
-        String key = "value_testSessionExpiration1";
-        String value = "Foo";
-
-        WebConversation wc = new WebConversation();
-        WebRequest req = new GetMethodWebRequest("http://localhost:7890/test");
-
-        // Set an attribute
-        req.setParameter("cmd", QueryCommand.SET.name());
-        req.setParameter("param", key);
-        req.setParameter("value", value);
-        WebResponse response = wc.getResponse(req);
-
-        // Sleep a while
-        Thread.sleep(2000);
-
-        // The attribute should not be accessible now...
-        req.setParameter("cmd", QueryCommand.GET.name());
-        req.setParameter("param", key);
-        response = wc.getResponse(req);
-
-        assertEquals("", response.getText());
-    }
-
-    /**
-     * Test setting the session expiration via a property change as would happen
-     * under normal deployment conditions.
-     */
-    @Test
-    public void testSessionExpiration2() throws Exception {
-        // TestSessions only live for a minute
-        sessionManager.propertyChange(
-                new PropertyChangeEvent(server.getRootContext(),
-                        "sessionTimeout",
-                        new Integer(30), new Integer(1)));
-
-        // Check that the value has been set to 60 seconds
-        assertEquals(60, sessionManager.getMaxInactiveInterval());
-    }
-
-    /**
-     * Test that removing a session attribute also removes it from the region
-     */
-    @Test
-    public void testRemoveAttribute() throws Exception {
-        String key = "value_testRemoveAttribute";
-        String value = "Foo";
-
-        WebConversation wc = new WebConversation();
-        WebRequest req = new GetMethodWebRequest("http://localhost:7890/test");
-
-        // Set an attribute
-        req.setParameter("cmd", QueryCommand.SET.name());
-        req.setParameter("param", key);
-        req.setParameter("value", value);
-        WebResponse response = wc.getResponse(req);
-        String sessionId = response.getNewCookieValue("JSESSIONID");
-
-        // Implicitly remove the attribute
-        req.removeParameter("value");
-        wc.getResponse(req);
-
-        // The attribute should not be accessible now...
-        req.setParameter("cmd", QueryCommand.GET.name());
-        req.setParameter("param", key);
-        response = wc.getResponse(req);
-
-        assertEquals("", response.getText());
-        assertNull(region.get(sessionId).getAttribute(key));
-    }
-
-    /**
-     * Test that a session attribute gets set into the region too.
-     */
-    @Test
-    public void testBasicRegion() throws Exception {
-        String key = "value_testBasicRegion";
-        String value = "Foo";
-
-        WebConversation wc = new WebConversation();
-        WebRequest req = new GetMethodWebRequest("http://localhost:7890/test");
-
-        // Set an attribute
-        req.setParameter("cmd", QueryCommand.SET.name());
-        req.setParameter("param", key);
-        req.setParameter("value", value);
-        WebResponse response = wc.getResponse(req);
-        String sessionId = response.getNewCookieValue("JSESSIONID");
-
-        assertEquals(value, region.get(sessionId).getAttribute(key));
-    }
-
-    /**
-     * Test that a session attribute gets removed from the region when the
-     * session is invalidated.
-     */
-    @Test
-    public void testRegionInvalidate() throws Exception {
-        String key = "value_testRegionInvalidate";
-        String value = "Foo";
-
-        WebConversation wc = new WebConversation();
-        WebRequest req = new GetMethodWebRequest("http://localhost:7890/test");
-
-        // Set an attribute
-        req.setParameter("cmd", QueryCommand.SET.name());
-        req.setParameter("param", key);
-        req.setParameter("value", value);
-        WebResponse response = wc.getResponse(req);
-        String sessionId = response.getNewCookieValue("JSESSIONID");
-
-        // Invalidate the session
-        req.removeParameter("param");
-        req.removeParameter("value");
-        req.setParameter("cmd", QueryCommand.INVALIDATE.name());
-        wc.getResponse(req);
-
-        assertNull("The region should not have an entry for this session",
-                region.get(sessionId));
-    }
-
-    /**
-     * Test that multiple attribute updates, within the same request result in
-     * only the latest one being effective.
-     */
-    @Test
-    public void testMultipleAttributeUpdates() throws Exception {
-        final String key = "value_testMultipleAttributeUpdates";
-        Callback c = new Callback() {
-
-            @Override
-            public void call(HttpServletRequest request, HttpServletResponse response)
-                    throws IOException {
-                HttpSession session = request.getSession();
-                for (int i = 0; i < 1000; i++) {
-                    session.setAttribute(key, Integer.toString(i));
-                }
-            }
-        };
-        servlet.getServletContext().setAttribute("callback", c);
-
-        WebConversation wc = new WebConversation();
-        WebRequest req = new GetMethodWebRequest("http://localhost:7890/test");
-
-        // Execute the callback
-        req.setParameter("cmd", QueryCommand.CALLBACK.name());
-        req.setParameter("param", "callback");
-        WebResponse response = wc.getResponse(req);
-
-        String sessionId = response.getNewCookieValue("JSESSIONID");
-
-        assertEquals("999", region.get(sessionId).getAttribute(key));
-    }
-
-    /*
-     * Test for issue #38 CommitSessionValve throws exception on invalidated sessions
-     */
-    @Test
-    public void testCommitSessionValveInvalidSession() throws Exception {
-        Callback c = new Callback() {
-            @Override
-            public void call(HttpServletRequest request, HttpServletResponse response)
-                    throws IOException {
-                HttpSession session = request.getSession();
-                session.invalidate();
-                response.getWriter().write("done");
-            }
-        };
-        servlet.getServletContext().setAttribute("callback", c);
-
-        WebConversation wc = new WebConversation();
-        WebRequest req = new GetMethodWebRequest("http://localhost:7890/test");
-
-        // Execute the callback
-        req.setParameter("cmd", QueryCommand.CALLBACK.name());
-        req.setParameter("param", "callback");
-        WebResponse response = wc.getResponse(req);
-
-        assertEquals("done", response.getText());
-    }
-
-    /**
-     * Test for issue #45 Sessions are being created for every request
-     */
-    @Test
-    public void testExtraSessionsNotCreated() throws Exception {
-      Callback c = new Callback() {
-        @Override
-        public void call(HttpServletRequest request, HttpServletResponse response)
-            throws IOException {
-          // Do nothing with sessions
-          response.getWriter().write("done");
-        }
-      };
-      servlet.getServletContext().setAttribute("callback", c);
-
-      WebConversation wc = new WebConversation();
-      WebRequest req = new GetMethodWebRequest("http://localhost:7890/test");
-
-      // Execute the callback
-      req.setParameter("cmd", QueryCommand.CALLBACK.name());
-      req.setParameter("param", "callback");
-      WebResponse response = wc.getResponse(req);
-
-      assertEquals("done", response.getText());
-      assertEquals("The region should be empty", 0, region.size());
-    }
-
-    /**
-     * Test for issue #46 lastAccessedTime is not updated at the start of the
-     * request, but only at the end.
-     */
-    @Test
-    public void testLastAccessedTime() throws Exception {
-        Callback c = new Callback() {
-            @Override
-            public void call(HttpServletRequest request, HttpServletResponse response)
-                    throws IOException {
-                HttpSession session = request.getSession();
-                // Hack to expose the session to our test context
-                session.getServletContext().setAttribute("session", session);
-                session.setAttribute("lastAccessTime", session.getLastAccessedTime());
-                try {
-                  Thread.sleep(100);
-                } catch (InterruptedException ex) {
-                }
-                session.setAttribute("somethingElse", 1);
-                request.getSession();
-                response.getWriter().write("done");
-            }
-        };
-        servlet.getServletContext().setAttribute("callback", c);
-
-        WebConversation wc = new WebConversation();
-        WebRequest req = new GetMethodWebRequest("http://localhost:7890/test");
-
-        // Execute the callback
-        req.setParameter("cmd", QueryCommand.CALLBACK.name());
-        req.setParameter("param", "callback");
-        WebResponse response = wc.getResponse(req);
-
-        HttpSession session = (HttpSession) servlet.getServletContext().getAttribute("session");
-        Long lastAccess = (Long) session.getAttribute("lastAccessTime");
-
-        assertEquals("Last access time not set correctly", lastAccess.longValue(), session.getLastAccessedTime());
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/437350a5/extensions/gemfire-modules/src/test/java/com/gemstone/gemfire/modules/session/TestSessionsJUnitTest.java
----------------------------------------------------------------------
diff --git a/extensions/gemfire-modules/src/test/java/com/gemstone/gemfire/modules/session/TestSessionsJUnitTest.java b/extensions/gemfire-modules/src/test/java/com/gemstone/gemfire/modules/session/TestSessionsJUnitTest.java
new file mode 100644
index 0000000..fdf88b8
--- /dev/null
+++ b/extensions/gemfire-modules/src/test/java/com/gemstone/gemfire/modules/session/TestSessionsJUnitTest.java
@@ -0,0 +1,515 @@
+/*=========================================================================
+ * 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.session;
+
+import com.gemstone.gemfire.cache.Region;
+import com.gemstone.gemfire.modules.session.catalina.CommitSessionValve;
+import com.gemstone.gemfire.modules.session.catalina.DeltaSessionManager;
+import com.gemstone.gemfire.modules.session.catalina.PeerToPeerCacheLifecycleListener;
+import com.gemstone.gemfire.modules.session.catalina.Tomcat6DeltaSessionManager;
+
+import javax.servlet.http.HttpSession;
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintWriter;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import com.gemstone.gemfire.test.junit.categories.UnitTest;
+import com.meterware.httpunit.WebRequest;
+import com.meterware.httpunit.GetMethodWebRequest;
+import com.meterware.httpunit.WebConversation;
+import com.meterware.httpunit.WebResponse;
+import org.apache.catalina.Valve;
+import org.apache.catalina.core.StandardWrapper;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+
+import java.beans.PropertyChangeEvent;
+
+import static junit.framework.Assert.*;
+
+/**
+ *
+ */
+@Category(UnitTest.class)
+public class TestSessionsJUnitTest {
+    private static EmbeddedTomcat server;
+
+    private static Region<String, HttpSession> region;
+
+    private static StandardWrapper servlet;
+
+    private static DeltaSessionManager sessionManager;
+
+    // Set up the servers we need
+    @BeforeClass
+    public static void setupClass() throws Exception {
+        // Create a per-user scratch directory
+        File tmpDir = new File(System.getProperty("java.io.tmpdir"),
+                "gemfire_modules-" + System.getProperty("user.name"));
+        tmpDir.mkdirs();
+        tmpDir.deleteOnExit();
+
+        String gemfireLog = tmpDir.getPath() +
+                System.getProperty("file.separator") + "gemfire_modules.log";
+
+        server = new EmbeddedTomcat("/test", 7890, "JVM-1");
+
+        PeerToPeerCacheLifecycleListener p2pListener = new PeerToPeerCacheLifecycleListener();
+        p2pListener.setProperty("mcast-port", "0");
+        p2pListener.setProperty("log-level", "config");
+        p2pListener.setProperty("log-file", gemfireLog);
+        p2pListener.setProperty("writable-working-dir", tmpDir.getPath());
+        server.getEmbedded().addLifecycleListener(p2pListener);
+        sessionManager = new Tomcat6DeltaSessionManager();
+        sessionManager.setEnableCommitValve(true);
+        server.getRootContext().setManager(sessionManager);
+
+        servlet = server.addServlet("/test/*", "default", CommandServlet.class.getName());
+        server.startContainer();
+
+        /**
+         * Can only retrieve the region once the container has started up
+         * (and the cache has started too).
+         */
+        region = sessionManager.getSessionCache().getSessionRegion();
+    }
+
+    @AfterClass
+    public static void teardownClass() throws Exception {
+        server.stopContainer();
+    }
+    /**
+     * Reset some data
+     */
+    @Before
+    public void setup() throws Exception {
+        sessionManager.setMaxInactiveInterval(30);
+        region.clear();
+    }
+
+    /**
+     * Check that the basics are working
+     */
+    @Test
+    public void testSanity() throws Exception {
+        WebConversation wc = new WebConversation();
+        WebRequest req = new GetMethodWebRequest("http://localhost:7890/test");
+        req.setParameter("cmd", QueryCommand.GET.name());
+        req.setParameter("param", "null");
+        WebResponse response = wc.getResponse(req);
+
+        assertEquals("JSESSIONID", response.getNewCookieNames()[0]);
+    }
+
+    /**
+     * Test callback functionality. This is here really just as an example.
+     * Callbacks are useful to implement per test actions which can be defined
+     * within the actual test method instead of in a separate servlet class.
+     */
+    @Test
+    public void testCallback() throws Exception {
+        final String helloWorld = "Hello World";
+        Callback c = new Callback() {
+
+            @Override
+            public void call(HttpServletRequest request, HttpServletResponse response)
+                    throws IOException {
+                PrintWriter out = response.getWriter();
+                out.write(helloWorld);
+            }
+        };
+        servlet.getServletContext().setAttribute("callback", c);
+
+        WebConversation wc = new WebConversation();
+        WebRequest req = new GetMethodWebRequest("http://localhost:7890/test");
+
+        req.setParameter("cmd", QueryCommand.CALLBACK.name());
+        req.setParameter("param", "callback");
+        WebResponse response = wc.getResponse(req);
+
+        assertEquals(helloWorld, response.getText());
+    }
+
+    /**
+     * Test that calling session.isNew() works for the initial as well as
+     * subsequent requests.
+     */
+    @Test
+    public void testIsNew() throws Exception {
+        Callback c = new Callback() {
+
+            @Override
+            public void call(HttpServletRequest request, HttpServletResponse response)
+                    throws IOException {
+                HttpSession session = request.getSession();
+                response.getWriter().write(Boolean.toString(session.isNew()));
+            }
+        };
+        servlet.getServletContext().setAttribute("callback", c);
+
+        WebConversation wc = new WebConversation();
+        WebRequest req = new GetMethodWebRequest("http://localhost:7890/test");
+
+        req.setParameter("cmd", QueryCommand.CALLBACK.name());
+        req.setParameter("param", "callback");
+        WebResponse response = wc.getResponse(req);
+
+        assertEquals("true", response.getText());
+        response = wc.getResponse(req);
+
+        assertEquals("false", response.getText());
+    }
+
+    /**
+     * Check that our session persists. The values we pass in as query
+     * params are used to set attributes on the session.
+     */
+    @Test
+    public void testSessionPersists1() throws Exception {
+        String key = "value_testSessionPersists1";
+        String value = "Foo";
+
+        WebConversation wc = new WebConversation();
+        WebRequest req = new GetMethodWebRequest("http://localhost:7890/test");
+        req.setParameter("cmd", QueryCommand.SET.name());
+        req.setParameter("param", key);
+        req.setParameter("value", value);
+        WebResponse response = wc.getResponse(req);
+        String sessionId = response.getNewCookieValue("JSESSIONID");
+
+        assertNotNull("No apparent session cookie", sessionId);
+
+        // The request retains the cookie from the prior response...
+        req.setParameter("cmd", QueryCommand.GET.name());
+        req.setParameter("param", key);
+        req.removeParameter("value");
+        response = wc.getResponse(req);
+
+        assertEquals(value, response.getText());
+    }
+
+    /**
+     * Check that our session persists beyond the container restarting.
+     */
+//    public void testSessionPersists2() throws Exception {
+//        String key = "value_testSessionPersists2";
+//        String value = "Foo";
+//
+//        WebConversation wc = new WebConversation();
+//        WebRequest req = new GetMethodWebRequest("http://localhost:7890/test");
+//        req.setParameter("cmd", QueryCommand.SET.name());
+//        req.setParameter("param", key);
+//        req.setParameter("value", value);
+//        WebResponse response = wc.getResponse(req);
+//        String sessionId = response.getNewCookieValue("JSESSIONID");
+//
+//        assertNotNull("No apparent session cookie", sessionId);
+//
+//        // Restart the container
+//        AllTests.teardownClass();
+//        AllTests.setupClass();
+//
+//        // The request retains the cookie from the prior response...
+//        req.setParameter("cmd", QueryCommand.GET.name());
+//        req.setParameter("param", key);
+//        req.removeParameter("value");
+//        response = wc.getResponse(req);
+//
+//        assertEquals(value, response.getText());
+//    }
+
+    /**
+     * Test that invalidating a session makes it's attributes inaccessible.
+     */
+    @Test
+    public void testInvalidate() throws Exception {
+        String key = "value_testInvalidate";
+        String value = "Foo";
+
+        WebConversation wc = new WebConversation();
+        WebRequest req = new GetMethodWebRequest("http://localhost:7890/test");
+
+        // Set an attribute
+        req.setParameter("cmd", QueryCommand.SET.name());
+        req.setParameter("param", key);
+        req.setParameter("value", value);
+        WebResponse response = wc.getResponse(req);
+
+        // Invalidate the session
+        req.removeParameter("param");
+        req.removeParameter("value");
+        req.setParameter("cmd", QueryCommand.INVALIDATE.name());
+        wc.getResponse(req);
+
+        // The attribute should not be accessible now...
+        req.setParameter("cmd", QueryCommand.GET.name());
+        req.setParameter("param", key);
+        response = wc.getResponse(req);
+
+        assertEquals("", response.getText());
+    }
+
+    /**
+     * Test setting the session expiration
+     */
+    @Test
+    public void testSessionExpiration1() throws Exception {
+        // TestSessions only live for a second
+        sessionManager.setMaxInactiveInterval(1);
+
+        String key = "value_testSessionExpiration1";
+        String value = "Foo";
+
+        WebConversation wc = new WebConversation();
+        WebRequest req = new GetMethodWebRequest("http://localhost:7890/test");
+
+        // Set an attribute
+        req.setParameter("cmd", QueryCommand.SET.name());
+        req.setParameter("param", key);
+        req.setParameter("value", value);
+        WebResponse response = wc.getResponse(req);
+
+        // Sleep a while
+        Thread.sleep(2000);
+
+        // The attribute should not be accessible now...
+        req.setParameter("cmd", QueryCommand.GET.name());
+        req.setParameter("param", key);
+        response = wc.getResponse(req);
+
+        assertEquals("", response.getText());
+    }
+
+    /**
+     * Test setting the session expiration via a property change as would happen
+     * under normal deployment conditions.
+     */
+    @Test
+    public void testSessionExpiration2() throws Exception {
+        // TestSessions only live for a minute
+        sessionManager.propertyChange(
+                new PropertyChangeEvent(server.getRootContext(),
+                        "sessionTimeout",
+                        new Integer(30), new Integer(1)));
+
+        // Check that the value has been set to 60 seconds
+        assertEquals(60, sessionManager.getMaxInactiveInterval());
+    }
+
+    /**
+     * Test that removing a session attribute also removes it from the region
+     */
+    @Test
+    public void testRemoveAttribute() throws Exception {
+        String key = "value_testRemoveAttribute";
+        String value = "Foo";
+
+        WebConversation wc = new WebConversation();
+        WebRequest req = new GetMethodWebRequest("http://localhost:7890/test");
+
+        // Set an attribute
+        req.setParameter("cmd", QueryCommand.SET.name());
+        req.setParameter("param", key);
+        req.setParameter("value", value);
+        WebResponse response = wc.getResponse(req);
+        String sessionId = response.getNewCookieValue("JSESSIONID");
+
+        // Implicitly remove the attribute
+        req.removeParameter("value");
+        wc.getResponse(req);
+
+        // The attribute should not be accessible now...
+        req.setParameter("cmd", QueryCommand.GET.name());
+        req.setParameter("param", key);
+        response = wc.getResponse(req);
+
+        assertEquals("", response.getText());
+        assertNull(region.get(sessionId).getAttribute(key));
+    }
+
+    /**
+     * Test that a session attribute gets set into the region too.
+     */
+    @Test
+    public void testBasicRegion() throws Exception {
+        String key = "value_testBasicRegion";
+        String value = "Foo";
+
+        WebConversation wc = new WebConversation();
+        WebRequest req = new GetMethodWebRequest("http://localhost:7890/test");
+
+        // Set an attribute
+        req.setParameter("cmd", QueryCommand.SET.name());
+        req.setParameter("param", key);
+        req.setParameter("value", value);
+        WebResponse response = wc.getResponse(req);
+        String sessionId = response.getNewCookieValue("JSESSIONID");
+
+        assertEquals(value, region.get(sessionId).getAttribute(key));
+    }
+
+    /**
+     * Test that a session attribute gets removed from the region when the
+     * session is invalidated.
+     */
+    @Test
+    public void testRegionInvalidate() throws Exception {
+        String key = "value_testRegionInvalidate";
+        String value = "Foo";
+
+        WebConversation wc = new WebConversation();
+        WebRequest req = new GetMethodWebRequest("http://localhost:7890/test");
+
+        // Set an attribute
+        req.setParameter("cmd", QueryCommand.SET.name());
+        req.setParameter("param", key);
+        req.setParameter("value", value);
+        WebResponse response = wc.getResponse(req);
+        String sessionId = response.getNewCookieValue("JSESSIONID");
+
+        // Invalidate the session
+        req.removeParameter("param");
+        req.removeParameter("value");
+        req.setParameter("cmd", QueryCommand.INVALIDATE.name());
+        wc.getResponse(req);
+
+        assertNull("The region should not have an entry for this session",
+                region.get(sessionId));
+    }
+
+    /**
+     * Test that multiple attribute updates, within the same request result in
+     * only the latest one being effective.
+     */
+    @Test
+    public void testMultipleAttributeUpdates() throws Exception {
+        final String key = "value_testMultipleAttributeUpdates";
+        Callback c = new Callback() {
+
+            @Override
+            public void call(HttpServletRequest request, HttpServletResponse response)
+                    throws IOException {
+                HttpSession session = request.getSession();
+                for (int i = 0; i < 1000; i++) {
+                    session.setAttribute(key, Integer.toString(i));
+                }
+            }
+        };
+        servlet.getServletContext().setAttribute("callback", c);
+
+        WebConversation wc = new WebConversation();
+        WebRequest req = new GetMethodWebRequest("http://localhost:7890/test");
+
+        // Execute the callback
+        req.setParameter("cmd", QueryCommand.CALLBACK.name());
+        req.setParameter("param", "callback");
+        WebResponse response = wc.getResponse(req);
+
+        String sessionId = response.getNewCookieValue("JSESSIONID");
+
+        assertEquals("999", region.get(sessionId).getAttribute(key));
+    }
+
+    /*
+     * Test for issue #38 CommitSessionValve throws exception on invalidated sessions
+     */
+    @Test
+    public void testCommitSessionValveInvalidSession() throws Exception {
+        Callback c = new Callback() {
+            @Override
+            public void call(HttpServletRequest request, HttpServletResponse response)
+                    throws IOException {
+                HttpSession session = request.getSession();
+                session.invalidate();
+                response.getWriter().write("done");
+            }
+        };
+        servlet.getServletContext().setAttribute("callback", c);
+
+        WebConversation wc = new WebConversation();
+        WebRequest req = new GetMethodWebRequest("http://localhost:7890/test");
+
+        // Execute the callback
+        req.setParameter("cmd", QueryCommand.CALLBACK.name());
+        req.setParameter("param", "callback");
+        WebResponse response = wc.getResponse(req);
+
+        assertEquals("done", response.getText());
+    }
+
+    /**
+     * Test for issue #45 Sessions are being created for every request
+     */
+    @Test
+    public void testExtraSessionsNotCreated() throws Exception {
+      Callback c = new Callback() {
+        @Override
+        public void call(HttpServletRequest request, HttpServletResponse response)
+            throws IOException {
+          // Do nothing with sessions
+          response.getWriter().write("done");
+        }
+      };
+      servlet.getServletContext().setAttribute("callback", c);
+
+      WebConversation wc = new WebConversation();
+      WebRequest req = new GetMethodWebRequest("http://localhost:7890/test");
+
+      // Execute the callback
+      req.setParameter("cmd", QueryCommand.CALLBACK.name());
+      req.setParameter("param", "callback");
+      WebResponse response = wc.getResponse(req);
+
+      assertEquals("done", response.getText());
+      assertEquals("The region should be empty", 0, region.size());
+    }
+
+    /**
+     * Test for issue #46 lastAccessedTime is not updated at the start of the
+     * request, but only at the end.
+     */
+    @Test
+    public void testLastAccessedTime() throws Exception {
+        Callback c = new Callback() {
+            @Override
+            public void call(HttpServletRequest request, HttpServletResponse response)
+                    throws IOException {
+                HttpSession session = request.getSession();
+                // Hack to expose the session to our test context
+                session.getServletContext().setAttribute("session", session);
+                session.setAttribute("lastAccessTime", session.getLastAccessedTime());
+                try {
+                  Thread.sleep(100);
+                } catch (InterruptedException ex) {
+                }
+                session.setAttribute("somethingElse", 1);
+                request.getSession();
+                response.getWriter().write("done");
+            }
+        };
+        servlet.getServletContext().setAttribute("callback", c);
+
+        WebConversation wc = new WebConversation();
+        WebRequest req = new GetMethodWebRequest("http://localhost:7890/test");
+
+        // Execute the callback
+        req.setParameter("cmd", QueryCommand.CALLBACK.name());
+        req.setParameter("param", "callback");
+        WebResponse response = wc.getResponse(req);
+
+        HttpSession session = (HttpSession) servlet.getServletContext().getAttribute("session");
+        Long lastAccess = (Long) session.getAttribute("lastAccessTime");
+
+        assertEquals("Last access time not set correctly", lastAccess.longValue(), session.getLastAccessedTime());
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/437350a5/extensions/gemfire-modules/src/test/resources/tomcat/conf/tomcat-users.xml
----------------------------------------------------------------------
diff --git a/extensions/gemfire-modules/src/test/resources/tomcat/conf/tomcat-users.xml b/extensions/gemfire-modules/src/test/resources/tomcat/conf/tomcat-users.xml
new file mode 100644
index 0000000..6c9f217
--- /dev/null
+++ b/extensions/gemfire-modules/src/test/resources/tomcat/conf/tomcat-users.xml
@@ -0,0 +1,3 @@
+<?xml version='1.0' encoding='utf-8'?>
+<tomcat-users>
+</tomcat-users>

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/437350a5/extensions/gemfire-modules/tomcat/conf/tomcat-users.xml
----------------------------------------------------------------------
diff --git a/extensions/gemfire-modules/tomcat/conf/tomcat-users.xml b/extensions/gemfire-modules/tomcat/conf/tomcat-users.xml
deleted file mode 100644
index 6c9f217..0000000
--- a/extensions/gemfire-modules/tomcat/conf/tomcat-users.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-<?xml version='1.0' encoding='utf-8'?>
-<tomcat-users>
-</tomcat-users>

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/437350a5/gradle/dependency-versions.properties
----------------------------------------------------------------------
diff --git a/gradle/dependency-versions.properties b/gradle/dependency-versions.properties
index df052c5..9d017b0 100644
--- a/gradle/dependency-versions.properties
+++ b/gradle/dependency-versions.properties
@@ -41,6 +41,7 @@ guava.version = 15.0
 hadoop.version = 2.4.1
 hamcrest-all.version = 1.3
 hbase.version = 0.94.27
+httpunit.version = 1.7.2
 jackson.version = 2.2.0
 jackson-module-scala_2.10.version = 2.1.5
 jansi.version = 1.8
@@ -59,8 +60,6 @@ JUnitParams.version = 1.0.4
 log4j.version = 2.1
 lucene.version = 5.3.0
 mockito-core.version = 1.10.19
-modules.tomcat.version = 6.0.37
-modules.httpunit.version = 1.7.2
 multithreadedtc.version = 1.01
 mx4j.version = 3.0.1
 mx4j-remote.version = 3.0.1
@@ -82,3 +81,4 @@ spymemcached.version = 2.9.0
 swagger.version = 1.3.2
 swagger-springmvc.version = 0.8.2
 system-rules.version = 1.15.0
+tomcat6.version = 6.0.37