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

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


The following commit(s) were added to refs/heads/main by this push:
     new fbdd0f20da Extend AccessLogValve unit tests for single pattern 
identifiers
fbdd0f20da is described below

commit fbdd0f20da081d7ffafccb23508dcceb3e1d03ac
Author: Rainer Jung <rainer.j...@kippdata.de>
AuthorDate: Fri Apr 28 00:18:16 2023 +0200

    Extend AccessLogValve unit tests for single pattern identifiers
---
 .../apache/catalina/valves/TestAccessLogValve.java | 128 +++++++++++++++++----
 1 file changed, 108 insertions(+), 20 deletions(-)

diff --git a/test/org/apache/catalina/valves/TestAccessLogValve.java 
b/test/org/apache/catalina/valves/TestAccessLogValve.java
index 5dfa4a1dbe..907b8f4b66 100644
--- a/test/org/apache/catalina/valves/TestAccessLogValve.java
+++ b/test/org/apache/catalina/valves/TestAccessLogValve.java
@@ -18,11 +18,19 @@ package org.apache.catalina.valves;
 
 import java.io.CharArrayWriter;
 import java.io.IOException;
+import java.io.PrintWriter;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.regex.Pattern;
 
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServlet;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+
 import org.junit.Assert;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -30,6 +38,7 @@ import org.junit.runners.Parameterized;
 import org.junit.runners.Parameterized.Parameter;
 
 import org.apache.catalina.LifecycleException;
+import org.apache.catalina.core.StandardContext;
 import org.apache.catalina.startup.Tomcat;
 import org.apache.catalina.startup.TomcatBaseTest;
 import org.apache.juli.logging.Log;
@@ -51,23 +60,85 @@ public class TestAccessLogValve extends TomcatBaseTest {
     private static final String JSON_TYPE = "json";
 
     private static final String DATE_PATTERN = 
"\\[\\d\\d/[A-Z][a-z][a-z]/\\d\\d\\d\\d:\\d\\d:\\d\\d:\\d\\d 
[-+]\\d\\d\\d\\d\\]";
-    private static final String IP_PATTERN = "(127\\.0\\.0\\.\\d+|\\[::1\\])";
+    private static final String IP_PATTERN = 
"(127\\.0\\.\\d\\.\\d+|\\[::1\\])";
     private static final String UA_PATTERN = "[^\"]+";
 
     @Parameterized.Parameters(name = "{index}: Name[{0}], Type[{1}]")
     public static Collection<Object[]> parameters() {
         List<Object[]> parameterSets = new ArrayList<>();
 
+        parameterSets.add(new Object[] {"pct-a", TEXT_TYPE, "/", "%a", 
IP_PATTERN});
+        parameterSets.add(new Object[] {"pct-a", JSON_TYPE, "/", "%a", 
"\\{\"remoteAddr\":\"" + IP_PATTERN + "\"\\}"});
+        parameterSets.add(new Object[] {"pct-A", TEXT_TYPE, "/", "%A", 
IP_PATTERN});
+        parameterSets.add(new Object[] {"pct-A", JSON_TYPE, "/", "%A", 
"\\{\"localAddr\":\"" + IP_PATTERN + "\"\\}"});
+        parameterSets.add(new Object[] {"pct-b", TEXT_TYPE, "/", "%b", "3"});
+        parameterSets.add(new Object[] {"pct-b", JSON_TYPE, "/", "%b", 
"\\{\"size\":\"3\"\\}"});
+        parameterSets.add(new Object[] {"pct-B", TEXT_TYPE, "/", "%B", "3"});
+        parameterSets.add(new Object[] {"pct-B", JSON_TYPE, "/", "%B", 
"\\{\"byteSentNC\":\"3\"\\}"});
+        parameterSets.add(new Object[] {"pct-D", TEXT_TYPE, "/", "%D", 
"\\d+"});
+        parameterSets.add(new Object[] {"pct-D", JSON_TYPE, "/", "%D", 
"\\{\"elapsedTime\":\"\\d+\"\\}"});
+        parameterSets.add(new Object[] {"pct-F", TEXT_TYPE, "/", "%F", 
"\\d+"});
+        parameterSets.add(new Object[] {"pct-F", JSON_TYPE, "/", "%F", 
"\\{\"firstByteTime\":\"\\d+\"\\}"});
+        parameterSets.add(new Object[] {"pct-h", TEXT_TYPE, "/", "%h", 
IP_PATTERN});
+        parameterSets.add(new Object[] {"pct-h", JSON_TYPE, "/", "%h", 
"\\{\"host\":\"" + IP_PATTERN + "\"\\}"});
+        parameterSets.add(new Object[] {"pct-H", TEXT_TYPE, "/", "%H", 
"HTTP/1.1"});
+        parameterSets.add(new Object[] {"pct-H", JSON_TYPE, "/", "%H", 
"\\{\"protocol\":\"HTTP/1.1\"\\}"});
+        parameterSets.add(new Object[] {"pct-I", TEXT_TYPE, "/", "%I", 
"http-nio2?-" + IP_PATTERN + "-auto-\\d+-exec-\\d+"});
+        parameterSets.add(new Object[] {"pct-I", JSON_TYPE, "/", "%I", 
"\\{\"threadName\":\"http-nio2?-" + IP_PATTERN + "-auto-\\d+-exec-\\d+\"\\}"});
+        parameterSets.add(new Object[] {"pct-l", TEXT_TYPE, "/", "%l", "-"});
+        parameterSets.add(new Object[] {"pct-l", JSON_TYPE, "/", "%l", 
"\\{\"logicalUserName\":\"-\"\\}"});
+        parameterSets.add(new Object[] {"pct-m", TEXT_TYPE, "/", "%m", "GET"});
+        parameterSets.add(new Object[] {"pct-m", JSON_TYPE, "/", "%m", 
"\\{\"method\":\"GET\"\\}"});
+        parameterSets.add(new Object[] {"pct-p", TEXT_TYPE, "/", "%p", 
"\\d+"});
+        parameterSets.add(new Object[] {"pct-p", JSON_TYPE, "/", "%p", 
"\\{\"port\":\"\\d+\"\\}"});
+        parameterSets.add(new Object[] {"pct-q", TEXT_TYPE, "/", "%q", ""});
+        parameterSets.add(new Object[] {"pct-q", JSON_TYPE, "/", "%q", 
"\\{\"query\":\"\"\\}"});
+        parameterSets.add(new Object[] {"pct-r", TEXT_TYPE, "/", "%r", "GET / 
HTTP/1.1"});
+        parameterSets.add(new Object[] {"pct-r", JSON_TYPE, "/", "%r", 
"\\{\"request\":\"GET / HTTP/1.1\"\\}"});
+        parameterSets.add(new Object[] {"pct-s", TEXT_TYPE, "/", "%s", "200"});
+        parameterSets.add(new Object[] {"pct-s", JSON_TYPE, "/", "%s", 
"\\{\"statusCode\":\"200\"\\}"});
+        parameterSets.add(new Object[] {"pct-S", TEXT_TYPE, "/", "%S", 
"[A-F0-9]{32}"});
+        parameterSets.add(new Object[] {"pct-S", JSON_TYPE, "/", "%S", 
"\\{\"sessionId\":\"[A-F0-9]{32}\"\\}"});
+        parameterSets.add(new Object[] {"pct-t", TEXT_TYPE, "/", "%t", 
DATE_PATTERN});
+        parameterSets.add(new Object[] {"pct-t", JSON_TYPE, "/", "%t", 
"\\{\"time\":\"" + DATE_PATTERN + "\"\\}"});
+        parameterSets.add(new Object[] {"pct-T", TEXT_TYPE, "/", "%T", 
"\\d+"});
+        parameterSets.add(new Object[] {"pct-T", JSON_TYPE, "/", "%T", 
"\\{\"elapsedTimeS\":\"\\d+\"\\}"});
+        parameterSets.add(new Object[] {"pct-u", TEXT_TYPE, "/", "%u", "-"});
+        parameterSets.add(new Object[] {"pct-u", JSON_TYPE, "/", "%u", 
"\\{\"user\":\"-\"\\}"});
+        parameterSets.add(new Object[] {"pct-U", TEXT_TYPE, "/", "%U", "/"});
+        parameterSets.add(new Object[] {"pct-U", JSON_TYPE, "/", "%U", 
"\\{\"path\":\"/\"\\}"});
+        parameterSets.add(new Object[] {"pct-v", TEXT_TYPE, "/", "%v", 
"localhost"});
+        parameterSets.add(new Object[] {"pct-v", JSON_TYPE, "/", "%v", 
"\\{\"localServerName\":\"localhost\"\\}"});
+        parameterSets.add(new Object[] {"pct-X", TEXT_TYPE, "/", "%X", "\\+"});
+        parameterSets.add(new Object[] {"pct-X", JSON_TYPE, "/", "%X", 
"\\{\"connectionStatus\":\"\\+\"\\}"});
+        parameterSets.add(new Object[] {"pct-a-remote", TEXT_TYPE, "/", 
"%{remote}a", IP_PATTERN});
+        parameterSets.add(new Object[] {"pct-a-remote", JSON_TYPE, "/", 
"%{remote}a", "\\{\"remoteAddr-remote\":\"" + IP_PATTERN + "\"\\}"});
+        parameterSets.add(new Object[] {"pct-a-peer", TEXT_TYPE, "/", 
"%{peer}a", IP_PATTERN});
+        parameterSets.add(new Object[] {"pct-a-peer", JSON_TYPE, "/", 
"%{peer}a", "\\{\"remoteAddr-peer\":\"" + IP_PATTERN + "\"\\}"});
+        parameterSets.add(new Object[] {"pct-p-local", TEXT_TYPE, "/", 
"%{local}p", "\\d+"});
+        parameterSets.add(new Object[] {"pct-p-local", JSON_TYPE, "/", 
"%{local}p", "\\{\"port-local\":\"\\d+\"\\}"});
+        parameterSets.add(new Object[] {"pct-p-remote", TEXT_TYPE, "/", 
"%{remote}p", "\\d+"});
+        parameterSets.add(new Object[] {"pct-p-remote", JSON_TYPE, "/", 
"%{remote}p", "\\{\"port-remote\":\"\\d+\"\\}"});
+        parameterSets.add(new Object[] {"pct-t-sec", TEXT_TYPE, "/", 
"%{sec}t", "\\d{10}"});
+        parameterSets.add(new Object[] {"pct-t-sec", JSON_TYPE, "/", 
"%{sec}t", "\\{\"time-sec\":\"\\d{10}\"\\}"});
+        parameterSets.add(new Object[] {"pct-t-msec", TEXT_TYPE, "/", 
"%{msec}t", "\\d{13}"});
+        parameterSets.add(new Object[] {"pct-t-msec", JSON_TYPE, "/", 
"%{msec}t", "\\{\"time-msec\":\"\\d{13}\"\\}"});
+        parameterSets.add(new Object[] {"pct-t-msec_frac", TEXT_TYPE, "/", 
"%{msec_frac}t", "\\d{3}"});
+        parameterSets.add(new Object[] {"pct-t-msec_frac", JSON_TYPE, "/", 
"%{msec_frac}t", "\\{\"time-msec_frac\":\"\\d{3}\"\\}"});
+        parameterSets.add(new Object[] {"pct-t-begin:sec", TEXT_TYPE, "/", 
"%{begin:sec}t", "\\d{10}"});
+        parameterSets.add(new Object[] {"pct-t-begin:sec", JSON_TYPE, "/", 
"%{begin:sec}t", "\\{\"time-begin:sec\":\"\\d{10}\"\\}"});
+        parameterSets.add(new Object[] {"pct-t-end:sec", TEXT_TYPE, "/", 
"%{end:sec}t", "\\d{10}"});
+        parameterSets.add(new Object[] {"pct-t-end:sec", JSON_TYPE, "/", 
"%{end:sec}t", "\\{\"time-end:sec\":\"\\d{10}\"\\}"});
         parameterSets.add(new Object[] {"common", TEXT_TYPE, "/", "common",
-            IP_PATTERN + " - - " + DATE_PATTERN + " \"GET / HTTP/1.1\" 404 
[67]\\d\\d"});
+            IP_PATTERN + " - - " + DATE_PATTERN + " \"GET / HTTP/1.1\" 200 
3"});
         parameterSets.add(new Object[] {"common", JSON_TYPE, "/", "common",
             "\\{\"host\":\"" + IP_PATTERN + 
"\",\"logicalUserName\":\"-\",\"user\":\"-\",\"time\":\"" + DATE_PATTERN +
-            "\",\"request\":\"GET / 
HTTP/1.1\",\"statusCode\":\"404\",\"size\":\"[67]\\d\\d\"\\}"});
+            "\",\"request\":\"GET / 
HTTP/1.1\",\"statusCode\":\"200\",\"size\":\"3\"\\}"});
         parameterSets.add(new Object[] {"combined", TEXT_TYPE, "/", "combined",
-            IP_PATTERN + " - - " + DATE_PATTERN + " \"GET / HTTP/1.1\" 404 
[67]\\d\\d \"-\" \"" + UA_PATTERN + "\""});
+            IP_PATTERN + " - - " + DATE_PATTERN + " \"GET / HTTP/1.1\" 200 3 
\"-\" \"" + UA_PATTERN + "\""});
         parameterSets.add(new Object[] {"combined", JSON_TYPE, "/", "combined",
             "\\{\"host\":\"" + IP_PATTERN + 
"\",\"logicalUserName\":\"-\",\"user\":\"-\",\"time\":\"" + DATE_PATTERN +
-            "\",\"request\":\"GET / 
HTTP/1.1\",\"statusCode\":\"404\",\"size\":\"[67]\\d\\d\"" +
+            "\",\"request\":\"GET / 
HTTP/1.1\",\"statusCode\":\"200\",\"size\":\"3\"" +
             ",\"requestHeaders\": \\{\"Referer\":\"-\",\"User-Agent\":\"" + 
UA_PATTERN + "\"\\}\\}"});
 
         return parameterSets;
@@ -142,10 +213,32 @@ public class TestAccessLogValve extends TomcatBaseTest {
         }
     }
 
+    private static class TesterServlet extends HttpServlet {
+
+        private static final long serialVersionUID = 1L;
+
+        @Override
+        protected void doGet(HttpServletRequest req, HttpServletResponse resp)
+                throws ServletException, IOException {
+            req.getSession();
+            resp.setContentType("text/plain");
+            resp.setCharacterEncoding("UTF-8");
+            PrintWriter pw = resp.getWriter();
+            pw.println("OK");
+        }
+    }
+
     @Test
-    public void Test() {
-        Tomcat tomcat = null;
-        tomcat = getTomcatInstance();
+    public void Test() throws LifecycleException, IOException {
+        Tomcat tomcat = getTomcatInstance();
+
+        // No file system docBase required
+        StandardContext ctx = (StandardContext) tomcat.addContext("", null);
+
+        // Map the test Servlet
+        TesterServlet servlet = new TesterServlet();
+        Tomcat.addServlet(ctx, "servlet", servlet);
+        ctx.addServletMappingDecoded("/", "servlet");
 
         CharArrayWriter writer = new CharArrayWriter();
         if (TEXT_TYPE.equals(type)) {
@@ -161,19 +254,14 @@ public class TestAccessLogValve extends TomcatBaseTest {
             Assert.fail("Unknown AccessLogValve type " + type);
         }
 
-        try {
-            tomcat.start();
-        } catch (LifecycleException ex) {
-            log.error("Exception starting tomcat", ex);
-        }
+        tomcat.start();
 
-        ByteChunk res = null;
-        try {
-            res = getUrl("http://localhost:"; + getPort() + path);
-        } catch (IOException ex) {
-            log.error("Exception retrieving response", ex);
-            Assert.fail("Could not retrieve response");
-        }
+        String url = "http://localhost:"; + getPort() + path;
+        ByteChunk out = new ByteChunk();
+        Map<String, List<String>> reqHead = new HashMap<>();
+        Map<String, List<String>> resHead = new HashMap<>();
+        int status = getUrl(url, out, reqHead, resHead);
+        Assert.assertEquals(HttpServletResponse.SC_OK, status);
         try {
             Thread.currentThread().sleep(SLEEP);
         } catch (InterruptedException ex) {


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

Reply via email to