You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2020/11/19 14:37:40 UTC

[tomcat] branch master updated: Parameterise test for LoadBalancerDrainingValve

This is an automated email from the ASF dual-hosted git repository.

markt pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/tomcat.git


The following commit(s) were added to refs/heads/master by this push:
     new d1a23ea  Parameterise test for LoadBalancerDrainingValve
d1a23ea is described below

commit d1a23ea387acae51b75776f67726f176342f9329
Author: Mark Thomas <ma...@apache.org>
AuthorDate: Thu Nov 19 14:37:02 2020 +0000

    Parameterise test for LoadBalancerDrainingValve
---
 .../valves/TestLoadBalancerDrainingValve.java      | 266 +++++++++++----------
 1 file changed, 136 insertions(+), 130 deletions(-)

diff --git a/test/org/apache/catalina/valves/TestLoadBalancerDrainingValve.java b/test/org/apache/catalina/valves/TestLoadBalancerDrainingValve.java
index 4557953..a45d274 100644
--- a/test/org/apache/catalina/valves/TestLoadBalancerDrainingValve.java
+++ b/test/org/apache/catalina/valves/TestLoadBalancerDrainingValve.java
@@ -16,6 +16,7 @@
 package org.apache.catalina.valves;
 
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.List;
 
 import jakarta.servlet.ServletContext;
@@ -23,6 +24,10 @@ import jakarta.servlet.SessionCookieConfig;
 import jakarta.servlet.http.Cookie;
 
 import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
+import org.junit.runners.Parameterized.Parameters;
 
 import org.apache.catalina.Context;
 import org.apache.catalina.Valve;
@@ -32,28 +37,143 @@ import org.apache.catalina.core.StandardPipeline;
 import org.easymock.EasyMock;
 import org.easymock.IMocksControl;
 
+@RunWith(Parameterized.class)
 public class TestLoadBalancerDrainingValve {
 
-    static class MockResponse extends Response {
-        private List<Cookie> cookies;
-        @Override
-        public boolean isCommitted() {
-            return false;
+    @Parameters(name = "{index}: activation[{0}], validSessionID[{1}], expectInvokeNext[{2}], enableIgnore[{3}], " +
+            "queryString[{4}]")
+    public static Collection<Object[]> parameters() {
+
+        String[] jkActivations = new String[] { "ACT", "DIS" };
+        Boolean[] booleans = new Boolean[] { Boolean.TRUE, Boolean.FALSE };
+        String[] queryStrings = new String[] { null, "foo=bar" };
+
+        List<Object[]> parameterSets = new ArrayList<>();
+            for (String jkActivation : jkActivations) {
+                for (Boolean validSessionId : booleans) {
+                    for (Boolean enableIgnore : booleans) {
+                        Boolean expectInvokeNext = Boolean.valueOf("ACT".equals(jkActivation) || enableIgnore.booleanValue() ||
+                                validSessionId.booleanValue());
+                        for (String queryString : queryStrings) {
+                            parameterSets.add(new Object[] { jkActivation, validSessionId, expectInvokeNext,
+                                    enableIgnore, queryString});
+                        }
+                    }
+                }
+            }
+        return parameterSets;
+    }
+
+
+    @Parameter(0)
+    public String jkActivation;
+
+    @Parameter(1)
+    public boolean validSessionId;
+
+    @Parameter(2)
+    public boolean expectInvokeNext;
+
+    @Parameter(3)
+    public boolean enableIgnore;
+
+    @Parameter(4)
+    public String queryString;
+
+    @Test
+    public void runValve() throws Exception {
+        IMocksControl control = EasyMock.createControl();
+        ServletContext servletContext = control.createMock(ServletContext.class);
+        Context ctx = control.createMock(Context.class);
+        Request request = control.createMock(Request.class);
+        Response response = control.createMock(Response.class);
+
+        String sessionCookieName = "JSESSIONID";
+        String sessionId = "cafebabe";
+        String requestURI = "/test/path";
+        SessionCookieConfig cookieConfig = new CookieConfig();
+        cookieConfig.setDomain("example.com");
+        cookieConfig.setName(sessionCookieName);
+        cookieConfig.setPath("/");
+
+        // Valve.init requires all of this stuff
+        EasyMock.expect(ctx.getMBeanKeyProperties()).andStubReturn("");
+        EasyMock.expect(ctx.getName()).andStubReturn("");
+        EasyMock.expect(ctx.getPipeline()).andStubReturn(new StandardPipeline());
+        EasyMock.expect(ctx.getDomain()).andStubReturn("foo");
+        EasyMock.expect(ctx.getLogger()).andStubReturn(org.apache.juli.logging.LogFactory.getLog(LoadBalancerDrainingValve.class));
+        EasyMock.expect(ctx.getServletContext()).andStubReturn(servletContext);
+
+        // Set up the actual test
+        EasyMock.expect(request.getAttribute(LoadBalancerDrainingValve.ATTRIBUTE_KEY_JK_LB_ACTIVATION)).andStubReturn(jkActivation);
+        EasyMock.expect(Boolean.valueOf(request.isRequestedSessionIdValid())).andStubReturn(Boolean.valueOf(validSessionId));
+
+        ArrayList<Cookie> cookies = new ArrayList<>();
+        if(enableIgnore) {
+            cookies.add(new Cookie("ignore", "true"));
         }
-        @Override
-        public void addCookie(Cookie cookie)
-        {
-            if(null == cookies)
-                cookies = new ArrayList<>(1);
+
+        if(!validSessionId && jkActivation.equals("DIS")) {
+            MyCookie cookie = new MyCookie(cookieConfig.getName(), sessionId);
+            cookie.setPath(cookieConfig.getPath());
+            cookie.setValue(sessionId);
+
             cookies.add(cookie);
+
+            EasyMock.expect(request.getRequestedSessionId()).andStubReturn(sessionId);
+            EasyMock.expect(request.getRequestURI()).andStubReturn(requestURI);
+            EasyMock.expect(request.getCookies()).andStubReturn(cookies.toArray(new Cookie[0]));
+            EasyMock.expect(request.getContext()).andStubReturn(ctx);
+            EasyMock.expect(ctx.getSessionCookieName()).andStubReturn(sessionCookieName);
+            EasyMock.expect(servletContext.getSessionCookieConfig()).andStubReturn(cookieConfig);
+            EasyMock.expect(request.getQueryString()).andStubReturn(queryString);
+            EasyMock.expect(ctx.getSessionCookiePath()).andStubReturn("/");
+
+            if (!enableIgnore) {
+                EasyMock.expect(Boolean.valueOf(ctx.getSessionCookiePathUsesTrailingSlash())).andStubReturn(Boolean.TRUE);
+                EasyMock.expect(request.getQueryString()).andStubReturn(queryString);
+                // Response will have cookie deleted
+                MyCookie expectedCookie = new MyCookie(cookieConfig.getName(), "");
+                expectedCookie.setPath(cookieConfig.getPath());
+                expectedCookie.setMaxAge(0);
+
+                // These two lines just mean EasyMock.expect(response.addCookie) but for a void method
+                response.addCookie(expectedCookie);
+                EasyMock.expect(ctx.getSessionCookieName()).andReturn(sessionCookieName); // Indirect call
+                String expectedRequestURI = requestURI;
+                if(null != queryString)
+                    expectedRequestURI = expectedRequestURI + '?' + queryString;
+                response.setHeader("Location", expectedRequestURI);
+                response.setStatus(307);
+            }
         }
-        @Override
-        public List<Cookie> getCookies() {
-            return cookies;
+
+        Valve next = control.createMock(Valve.class);
+
+        if(expectInvokeNext) {
+            // Expect the "next" Valve to fire
+            // Next 2 lines are basically EasyMock.expect(next.invoke(req,res)) but for a void method
+            next.invoke(request, response);
+            EasyMock.expectLastCall();
         }
+
+        // Get set to actually test
+        control.replay();
+
+        LoadBalancerDrainingValve valve = new LoadBalancerDrainingValve();
+        valve.setContainer(ctx);
+        valve.init();
+        valve.setNext(next);
+        valve.setIgnoreCookieName("ignore");
+        valve.setIgnoreCookieValue("true");
+
+        valve.invoke(request, response);
+
+        control.verify();
     }
 
-    static class CookieConfig implements SessionCookieConfig {
+
+    private static class CookieConfig implements SessionCookieConfig {
 
         private String name;
         private String domain;
@@ -121,8 +241,9 @@ public class TestLoadBalancerDrainingValve {
         }
     }
 
+
     // A Cookie subclass that knows how to compare itself to other Cookie objects
-    static class MyCookie extends Cookie {
+    private static class MyCookie extends Cookie {
         private static final long serialVersionUID = 1L;
 
         public MyCookie(String name, String value) { super(name, value); }
@@ -157,119 +278,4 @@ public class TestLoadBalancerDrainingValve {
             return "Cookie { name=" + getName() + ", value=" + getValue() + ", path=" + getPath() + ", maxAge=" + getMaxAge() + " }";
         }
     }
-
-    @Test
-    public void testNormalRequest() throws Exception {
-        runValve("ACT", true, true, false, null);
-    }
-
-    @Test
-    public void testDisabledValidSession() throws Exception {
-        runValve("DIS", true, true, false, null);
-    }
-
-    @Test
-    public void testDisabledInvalidSession() throws Exception {
-        runValve("DIS", false, false, false, "foo=bar");
-    }
-
-    @Test
-    public void testDisabledInvalidSessionWithIgnore() throws Exception {
-        runValve("DIS", false, true, true, "foo=bar");
-    }
-
-    private void runValve(String jkActivation,
-                          boolean validSessionId,
-                          boolean expectInvokeNext,
-                          boolean enableIgnore,
-                          String queryString) throws Exception {
-        IMocksControl control = EasyMock.createControl();
-        ServletContext servletContext = control.createMock(ServletContext.class);
-        Context ctx = control.createMock(Context.class);
-        Request request = control.createMock(Request.class);
-        Response response = control.createMock(Response.class);
-
-        String sessionCookieName = "JSESSIONID";
-        String sessionId = "cafebabe";
-        String requestURI = "/test/path";
-        SessionCookieConfig cookieConfig = new CookieConfig();
-        cookieConfig.setDomain("example.com");
-        cookieConfig.setName(sessionCookieName);
-        cookieConfig.setPath("/");
-
-        // Valve.init requires all of this stuff
-        EasyMock.expect(ctx.getMBeanKeyProperties()).andStubReturn("");
-        EasyMock.expect(ctx.getName()).andStubReturn("");
-        EasyMock.expect(ctx.getPipeline()).andStubReturn(new StandardPipeline());
-        EasyMock.expect(ctx.getDomain()).andStubReturn("foo");
-        EasyMock.expect(ctx.getLogger()).andStubReturn(org.apache.juli.logging.LogFactory.getLog(LoadBalancerDrainingValve.class));
-        EasyMock.expect(ctx.getServletContext()).andStubReturn(servletContext);
-
-        // Set up the actual test
-        EasyMock.expect(request.getAttribute(LoadBalancerDrainingValve.ATTRIBUTE_KEY_JK_LB_ACTIVATION)).andStubReturn(jkActivation);
-        EasyMock.expect(Boolean.valueOf(request.isRequestedSessionIdValid())).andStubReturn(Boolean.valueOf(validSessionId));
-
-        ArrayList<Cookie> cookies = new ArrayList<>();
-        if(enableIgnore) {
-            cookies.add(new Cookie("ignore", "true"));
-        }
-
-        if(!validSessionId) {
-            MyCookie cookie = new MyCookie(cookieConfig.getName(), sessionId);
-            cookie.setPath(cookieConfig.getPath());
-            cookie.setValue(sessionId);
-
-            cookies.add(cookie);
-
-            EasyMock.expect(request.getRequestedSessionId()).andStubReturn(sessionId);
-            EasyMock.expect(request.getRequestURI()).andStubReturn(requestURI);
-            EasyMock.expect(request.getCookies()).andStubReturn(cookies.toArray(new Cookie[0]));
-            EasyMock.expect(request.getContext()).andStubReturn(ctx);
-            EasyMock.expect(ctx.getSessionCookieName()).andStubReturn(sessionCookieName);
-            EasyMock.expect(servletContext.getSessionCookieConfig()).andStubReturn(cookieConfig);
-            EasyMock.expect(request.getQueryString()).andStubReturn(queryString);
-            EasyMock.expect(ctx.getSessionCookiePath()).andStubReturn("/");
-
-            if (!enableIgnore) {
-                EasyMock.expect(Boolean.valueOf(ctx.getSessionCookiePathUsesTrailingSlash())).andStubReturn(Boolean.TRUE);
-                EasyMock.expect(request.getQueryString()).andStubReturn(queryString);
-                // Response will have cookie deleted
-                MyCookie expectedCookie = new MyCookie(cookieConfig.getName(), "");
-                expectedCookie.setPath(cookieConfig.getPath());
-                expectedCookie.setMaxAge(0);
-
-                // These two lines just mean EasyMock.expect(response.addCookie) but for a void method
-                response.addCookie(expectedCookie);
-                EasyMock.expect(ctx.getSessionCookieName()).andReturn(sessionCookieName); // Indirect call
-                String expectedRequestURI = requestURI;
-                if(null != queryString)
-                    expectedRequestURI = expectedRequestURI + '?' + queryString;
-                response.setHeader("Location", expectedRequestURI);
-                response.setStatus(307);
-            }
-        }
-
-        Valve next = control.createMock(Valve.class);
-
-        if(expectInvokeNext) {
-            // Expect the "next" Valve to fire
-            // Next 2 lines are basically EasyMock.expect(next.invoke(req,res)) but for a void method
-            next.invoke(request, response);
-            EasyMock.expectLastCall();
-        }
-
-        // Get set to actually test
-        control.replay();
-
-        LoadBalancerDrainingValve valve = new LoadBalancerDrainingValve();
-        valve.setContainer(ctx);
-        valve.init();
-        valve.setNext(next);
-        valve.setIgnoreCookieName("ignore");
-        valve.setIgnoreCookieValue("true");
-
-        valve.invoke(request, response);
-
-        control.verify();
-    }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org