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 9d2ec8c7f5 Improve and fix new AccessLogValve unit test
     new c658727f65 Merge branch 'main' of 
https://gitbox.apache.org/repos/asf/tomcat
9d2ec8c7f5 is described below

commit 9d2ec8c7f53da156794f47f0c5fab0ff7e68ba52
Author: Rainer Jung <rainer.j...@kippdata.de>
AuthorDate: Fri Apr 28 10:15:17 2023 +0200

    Improve and fix new AccessLogValve unit test
---
 .../apache/catalina/valves/TestAccessLogValve.java | 97 ++++++++++++++++------
 1 file changed, 72 insertions(+), 25 deletions(-)

diff --git a/test/org/apache/catalina/valves/TestAccessLogValve.java 
b/test/org/apache/catalina/valves/TestAccessLogValve.java
index 907b8f4b66..140b967596 100644
--- a/test/org/apache/catalina/valves/TestAccessLogValve.java
+++ b/test/org/apache/catalina/valves/TestAccessLogValve.java
@@ -30,6 +30,7 @@ import jakarta.servlet.ServletException;
 import jakarta.servlet.http.HttpServlet;
 import jakarta.servlet.http.HttpServletRequest;
 import jakarta.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpSession;
 
 import org.junit.Assert;
 import org.junit.Test;
@@ -59,40 +60,60 @@ public class TestAccessLogValve extends TomcatBaseTest {
     private static final String TEXT_TYPE = "text";
     private static final String JSON_TYPE = "json";
 
+    private static final String RESPONSE = "OK\n";
+    private static final String BYTES = Integer.toString(RESPONSE.length());
+
+    private static final String REQUEST_HEADER = "myRequestHeader";
+    private static final String REQUEST_HEADER_VALUE = "1 2 3 4 5 6 7 8 9";
+    private static final String REQUEST_HEADER_VALUE_ENCODED = "1 2 3 4 5 6 7 
8 9";
+
+    private static final String RESPONSE_HEADER = "myResponseHeader";
+    private static final String RESPONSE_HEADER_VALUE = 
"864\u00e4\u00f6\u00fc642";
+    private static final String RESPONSE_HEADER_VALUE_ENCODED = 
"864\\\\u00e4\\\\u00f6\\\\u00fc642";
+
+    private static final String REQUEST_ATTRIBUTE = "myRequestAttribute";
+    private static final String REQUEST_ATTRIBUTE_VALUE = 
"987\u00e4\u00f6\u00fc654";
+    private static final String REQUEST_ATTRIBUTE_VALUE_ENCODED = 
"987\\\\u00e4\\\\u00f6\\\\u00fc654";
+
+    private static final String SESSION_ATTRIBUTE = "mySessionAttribute";
+    private static final String SESSION_ATTRIBUTE_VALUE = 
"123\u00e4\u00f6\u00fc456";
+    private static final String SESSION_ATTRIBUTE_VALUE_ENCODED = 
"123\\\\u00e4\\\\u00f6\\\\u00fc456";
+
     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\\.\\d\\.\\d+|\\[::1\\])";
+    private static final String LOCAL_IP_PATTERN = 
"(127\\.0\\.\\d\\.\\d+|\\[::1\\])";
+    private static final String IP_PATTERN = 
"(\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}|([0-9a-fA-F]){1,4}(:([0-9a-fA-F]){1,4}){7})";
     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", 
LOCAL_IP_PATTERN});
+        parameterSets.add(new Object[] {"pct-a", JSON_TYPE, "/", "%a", 
"\\{\"remoteAddr\":\"" + LOCAL_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-b", TEXT_TYPE, "/", "%b", BYTES});
+        parameterSets.add(new Object[] {"pct-b", JSON_TYPE, "/", "%b", 
"\\{\"size\":\"" + BYTES + "\"\\}"});
+        parameterSets.add(new Object[] {"pct-B", TEXT_TYPE, "/", "%B", BYTES});
+        parameterSets.add(new Object[] {"pct-B", JSON_TYPE, "/", "%B", 
"\\{\"byteSentNC\":\"" + BYTES + "\"\\}"});
         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", 
LOCAL_IP_PATTERN});
+        parameterSets.add(new Object[] {"pct-h", JSON_TYPE, "/", "%h", 
"\\{\"host\":\"" + LOCAL_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-I", TEXT_TYPE, "/", "%I", 
"http-nio2?-" + LOCAL_IP_PATTERN + "-auto-\\d+-exec-\\d+"});
+        parameterSets.add(new Object[] {"pct-I", JSON_TYPE, "/", "%I", 
"\\{\"threadName\":\"http-nio2?-" + LOCAL_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-q", TEXT_TYPE, "/?data=123", 
"%q", "\\?data=123"});
+        parameterSets.add(new Object[] {"pct-q", JSON_TYPE, "/?data=123", 
"%q", "\\{\"query\":\"\\?data=123\"\\}"});
         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"});
@@ -111,10 +132,10 @@ public class TestAccessLogValve extends TomcatBaseTest {
         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-a-remote", TEXT_TYPE, "/", 
"%{remote}a", LOCAL_IP_PATTERN});
+        parameterSets.add(new Object[] {"pct-a-remote", JSON_TYPE, "/", 
"%{remote}a", "\\{\"remoteAddr-remote\":\"" + LOCAL_IP_PATTERN + "\"\\}"});
+        parameterSets.add(new Object[] {"pct-a-peer", TEXT_TYPE, "/", 
"%{peer}a", LOCAL_IP_PATTERN});
+        parameterSets.add(new Object[] {"pct-a-peer", JSON_TYPE, "/", 
"%{peer}a", "\\{\"remoteAddr-peer\":\"" + LOCAL_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+"});
@@ -129,17 +150,33 @@ public class TestAccessLogValve extends TomcatBaseTest {
         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[] {"pct-t-begin:umlaut_time_S", 
TEXT_TYPE, "/", "%{begin:'\u00c4'HH '\u00e4' mm '\u00f6' ss '\u00fc' 
SSS'\u00dc'}t", "\\\\u00c4\\d\\d \\\\u00e4 \\d\\d \\\\u00f6 \\d\\d \\\\u00fc 
\\d\\d\\d\\\\u00dc"});
+        parameterSets.add(new Object[] {"pct-t-begin:umlaut_time_S", 
JSON_TYPE, "/", "%{begin:'\u00c4'HH '\u00e4' mm '\u00f6' ss '\u00fc' 
SSS'\u00dc'}t", "\\{\"time-begin:'\u00c4'HH '\u00e4' mm '\u00f6' ss '\u00fc' 
SSS'\u00dc'\":\"\\\\u00c4\\d\\d \\\\u00e4 \\d\\d \\\\u00f6 \\d\\d \\\\u00fc 
\\d\\d\\d\\\\u00dc\"\\}"});
         parameterSets.add(new Object[] {"common", TEXT_TYPE, "/", "common",
-            IP_PATTERN + " - - " + DATE_PATTERN + " \"GET / HTTP/1.1\" 200 
3"});
+            LOCAL_IP_PATTERN + " - - " + DATE_PATTERN + " \"GET / HTTP/1.1\" 
200 " + BYTES});
         parameterSets.add(new Object[] {"common", JSON_TYPE, "/", "common",
-            "\\{\"host\":\"" + IP_PATTERN + 
"\",\"logicalUserName\":\"-\",\"user\":\"-\",\"time\":\"" + DATE_PATTERN +
-            "\",\"request\":\"GET / 
HTTP/1.1\",\"statusCode\":\"200\",\"size\":\"3\"\\}"});
+            "\\{\"host\":\"" + LOCAL_IP_PATTERN + 
"\",\"logicalUserName\":\"-\",\"user\":\"-\",\"time\":\"" + DATE_PATTERN +
+            "\",\"request\":\"GET / 
HTTP/1.1\",\"statusCode\":\"200\",\"size\":\"" + BYTES + "\"\\}"});
         parameterSets.add(new Object[] {"combined", TEXT_TYPE, "/", "combined",
-            IP_PATTERN + " - - " + DATE_PATTERN + " \"GET / HTTP/1.1\" 200 3 
\"-\" \"" + UA_PATTERN + "\""});
+            LOCAL_IP_PATTERN + " - - " + DATE_PATTERN + " \"GET / HTTP/1.1\" 
200 " + BYTES + " \"-\" \"" + UA_PATTERN + "\""});
         parameterSets.add(new Object[] {"combined", JSON_TYPE, "/", "combined",
-            "\\{\"host\":\"" + IP_PATTERN + 
"\",\"logicalUserName\":\"-\",\"user\":\"-\",\"time\":\"" + DATE_PATTERN +
-            "\",\"request\":\"GET / 
HTTP/1.1\",\"statusCode\":\"200\",\"size\":\"3\"" +
+            "\\{\"host\":\"" + LOCAL_IP_PATTERN + 
"\",\"logicalUserName\":\"-\",\"user\":\"-\",\"time\":\"" + DATE_PATTERN +
+            "\",\"request\":\"GET / 
HTTP/1.1\",\"statusCode\":\"200\",\"size\":\"" + BYTES + "\"" +
             ",\"requestHeaders\": \\{\"Referer\":\"-\",\"User-Agent\":\"" + 
UA_PATTERN + "\"\\}\\}"});
+        parameterSets.add(new Object[] {"verbatim-text", TEXT_TYPE, "/", 
"123\u00e4\u00f6%s\u00fc%b%D\u00dc456", "123\u00e4\u00f6200\u00fc" + BYTES + 
"\\d+\u00dc456"});
+        parameterSets.add(new Object[] {"verbatim-text", JSON_TYPE, "/", 
"123\u00e4\u00f6%s\u00fc%b%D\u00dc456", "\\{\"statusCode\":\"200\",\"size\":\"" 
+ BYTES + "\",\"elapsedTime\":\"\\d+\"\\}"});
+        parameterSets.add(new Object[] {"merged-cookies", TEXT_TYPE, "/", 
"%{Cookie}i", "COOKIE-1_1=1_1; COOKIE-1_2=1_2; 
COOKIE-1_3=1_3,COOKIE-2_1=2_1;COOKIE-2_2=2_2;COOKIE-2_3=2_3"});
+        parameterSets.add(new Object[] {"merged-cookies", JSON_TYPE, "/", 
"%{Cookie}i", "\\{\"requestHeaders\": \\{\"Cookie\":\"COOKIE-1_1=1_1; 
COOKIE-1_2=1_2; 
COOKIE-1_3=1_3,COOKIE-2_1=2_1;COOKIE-2_2=2_2;COOKIE-2_3=2_3\"\\}\\}"});
+        parameterSets.add(new Object[] {"cookie", TEXT_TYPE, "/", 
"%{COOKIE-2_2}c", "2_2"});
+        parameterSets.add(new Object[] {"cookie", JSON_TYPE, "/", 
"%{COOKIE-2_2}c", "\\{\"cookies\": \\{\"COOKIE-2_2\":\"2_2\"\\}\\}"});
+        parameterSets.add(new Object[] {"request-header", TEXT_TYPE, "/", "%{" 
+ REQUEST_HEADER + "}i", REQUEST_HEADER_VALUE_ENCODED});
+        parameterSets.add(new Object[] {"request-header", JSON_TYPE, "/", "%{" 
+ REQUEST_HEADER + "}i", "\\{\"requestHeaders\": \\{\"" + REQUEST_HEADER + 
"\":\"" + REQUEST_HEADER_VALUE_ENCODED + "\"\\}\\}"});
+        parameterSets.add(new Object[] {"response-header", TEXT_TYPE, "/", 
"%{" + RESPONSE_HEADER + "}o", RESPONSE_HEADER_VALUE_ENCODED});
+        parameterSets.add(new Object[] {"response-header", JSON_TYPE, "/", 
"%{" + RESPONSE_HEADER + "}o", "\\{\"responseHeaders\": \\{\"" + 
RESPONSE_HEADER + "\":\"" + RESPONSE_HEADER_VALUE_ENCODED + "\"\\}\\}"});
+        parameterSets.add(new Object[] {"request-attribute", TEXT_TYPE, "/", 
"%{" + REQUEST_ATTRIBUTE + "}r", REQUEST_ATTRIBUTE_VALUE_ENCODED});
+        parameterSets.add(new Object[] {"request-attribute", JSON_TYPE, "/", 
"%{" + REQUEST_ATTRIBUTE + "}r", "\\{\"requestAttributes\": \\{\"" + 
REQUEST_ATTRIBUTE + "\":\"" + REQUEST_ATTRIBUTE_VALUE_ENCODED + "\"\\}\\}"});
+        parameterSets.add(new Object[] {"session-attribute", TEXT_TYPE, "/", 
"%{" + SESSION_ATTRIBUTE + "}s", SESSION_ATTRIBUTE_VALUE_ENCODED});
+        parameterSets.add(new Object[] {"session-attribute", JSON_TYPE, "/", 
"%{" + SESSION_ATTRIBUTE + "}s", "\\{\"sessionAttributes\": \\{\"" + 
SESSION_ATTRIBUTE + "\":\"" + SESSION_ATTRIBUTE_VALUE_ENCODED + "\"\\}\\}"});
 
         return parameterSets;
     }
@@ -220,11 +257,14 @@ public class TestAccessLogValve extends TomcatBaseTest {
         @Override
         protected void doGet(HttpServletRequest req, HttpServletResponse resp)
                 throws ServletException, IOException {
-            req.getSession();
+            req.setAttribute(REQUEST_ATTRIBUTE, REQUEST_ATTRIBUTE_VALUE);
+            HttpSession session = req.getSession();
+            session.setAttribute(SESSION_ATTRIBUTE, SESSION_ATTRIBUTE_VALUE);
             resp.setContentType("text/plain");
             resp.setCharacterEncoding("UTF-8");
+            resp.setHeader(RESPONSE_HEADER, RESPONSE_HEADER_VALUE);
             PrintWriter pw = resp.getWriter();
-            pw.println("OK");
+            pw.print(RESPONSE);
         }
     }
 
@@ -260,6 +300,13 @@ public class TestAccessLogValve extends TomcatBaseTest {
         ByteChunk out = new ByteChunk();
         Map<String, List<String>> reqHead = new HashMap<>();
         Map<String, List<String>> resHead = new HashMap<>();
+        List<String> cookieHeaders = new ArrayList<>();
+        cookieHeaders.add("COOKIE-1_1=1_1; COOKIE-1_2=1_2; COOKIE-1_3=1_3");
+        cookieHeaders.add("COOKIE-2_1=2_1;COOKIE-2_2=2_2;COOKIE-2_3=2_3");
+        reqHead.put("Cookie", cookieHeaders);
+        List<String> testHeaders = new ArrayList<>();
+        testHeaders.add(REQUEST_HEADER_VALUE);
+        reqHead.put(REQUEST_HEADER, testHeaders);
         int status = getUrl(url, out, reqHead, resHead);
         Assert.assertEquals(HttpServletResponse.SC_OK, status);
         try {


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

Reply via email to