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

remm pushed a commit to branch 9.0.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git


The following commit(s) were added to refs/heads/9.0.x by this push:
     new 772c39df53 Fix detailed view of a connector with auto port
772c39df53 is described below

commit 772c39df5372edfb305e4537851963f77c2e38f3
Author: remm <r...@apache.org>
AuthorDate: Thu Jun 27 13:05:33 2024 +0200

    Fix detailed view of a connector with auto port
    
    Using the port in the mbean name for request processor is not
    necessarily a bad idea, but this is only added after binding so there's
    a difference with the connector mbean name.
---
 .../apache/catalina/manager/StatusTransformer.java | 17 ++++++-
 .../catalina/manager/TestStatusTransformer.java    | 54 +++++++++++++++++++---
 webapps/docs/changelog.xml                         |  8 ++++
 3 files changed, 71 insertions(+), 8 deletions(-)

diff --git a/java/org/apache/catalina/manager/StatusTransformer.java 
b/java/org/apache/catalina/manager/StatusTransformer.java
index b968e1dced..6efe96e4d7 100644
--- a/java/org/apache/catalina/manager/StatusTransformer.java
+++ b/java/org/apache/catalina/manager/StatusTransformer.java
@@ -451,7 +451,7 @@ public class StatusTransformer {
                     "</th><th>" + args[17] + "</th></tr>");
 
             for (ObjectName objectName : requestProcessors) {
-                if (name.equals(objectName.getKeyProperty("worker"))) {
+                if 
(name.equals(getConnectorName(objectName.getKeyProperty("worker")))) {
                     writer.print("<tr>");
                     writeProcessorState(writer, objectName, mBeanServer, mode);
                     writer.print("</tr>");
@@ -494,7 +494,7 @@ public class StatusTransformer {
 
                 writer.write("<workers>");
                 for (ObjectName objectName : requestProcessors) {
-                    if (name.equals(objectName.getKeyProperty("worker"))) {
+                    if 
(name.equals(getConnectorName(objectName.getKeyProperty("worker")))) {
                         writeProcessorState(writer, objectName, mBeanServer, 
mode);
                     }
                 }
@@ -550,6 +550,19 @@ public class StatusTransformer {
     }
 
 
+    /**
+     * Return the connector name without the port, for auto port connectors.
+     * @param name the connector name
+     * @return the name without the port for the auto connectors
+     */
+    protected static String getConnectorName(String name) {
+        if (name.indexOf("-auto-") > 0) {
+            return name.substring(0, name.lastIndexOf("-")) + "\"";
+        } else {
+            return name;
+        }
+    }
+
     /**
      * Write processor state.
      *
diff --git a/test/org/apache/catalina/manager/TestStatusTransformer.java 
b/test/org/apache/catalina/manager/TestStatusTransformer.java
index 3cd772fdd4..1a7ecfa4fc 100644
--- a/test/org/apache/catalina/manager/TestStatusTransformer.java
+++ b/test/org/apache/catalina/manager/TestStatusTransformer.java
@@ -17,6 +17,9 @@
 package org.apache.catalina.manager;
 
 import java.io.File;
+import java.io.StringReader;
+
+import javax.xml.parsers.DocumentBuilderFactory;
 
 import org.junit.Assert;
 import org.junit.Test;
@@ -28,11 +31,32 @@ import org.apache.catalina.startup.SimpleHttpClient;
 import org.apache.catalina.startup.Tomcat;
 import org.apache.catalina.startup.TomcatBaseTest;
 import org.apache.tomcat.util.json.JSONParser;
+import org.w3c.dom.Document;
+import org.w3c.dom.ls.DOMImplementationLS;
+import org.xml.sax.InputSource;
 
 public class TestStatusTransformer extends TomcatBaseTest {
 
+    enum Mode {
+        HTML, XML, JSON
+    }
+
     @Test
     public void testJSON() throws Exception {
+        testStatusServlet(Mode.JSON);
+    }
+
+    @Test
+    public void testXML() throws Exception {
+        testStatusServlet(Mode.XML);
+    }
+
+    @Test
+    public void testHTML() throws Exception {
+        testStatusServlet(Mode.HTML);
+    }
+
+    protected void testStatusServlet(Mode mode) throws Exception {
         Tomcat tomcat = getTomcatInstance();
 
         // Add default servlet to make some requests
@@ -65,17 +89,35 @@ public class TestStatusTransformer extends TomcatBaseTest {
         client.connect();
         client.processRequest(true);
 
+        String requestline = null;
+        switch (mode) {
+            case XML -> requestline = "GET /status/all?XML=true HTTP/1.1";
+            case JSON -> requestline = "GET /status/all?JSON=true HTTP/1.1";
+            default -> requestline = "GET /status/all HTTP/1.1";
+        }
         client.setRequest(new String[] {
-                "GET /status/all?JSON=true HTTP/1.1" + CRLF +
+                requestline + CRLF +
                 "Host: localhost" + CRLF +
                 "Connection: Close" + CRLF + CRLF });
         client.connect();
         client.processRequest(true);
-        String json = client.getResponseBody();
-        System.out.println(json);
-        JSONParser parser = new JSONParser(json);
-        String result = parser.parse().toString();
-        Assert.assertTrue(result.contains("name=localhost/"));
+        String body = client.getResponseBody();
+        if (mode.equals(Mode.JSON)) {
+            JSONParser parser = new JSONParser(body);
+            String result = parser.parse().toString();
+            Assert.assertTrue(result.contains("name=localhost/"));
+        } else if (mode.equals(Mode.XML)) {
+            try (StringReader reader = new StringReader(body)) {
+                Document xmlDocument = 
DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new 
InputSource(reader));
+                String serialized = ((DOMImplementationLS) 
xmlDocument.getImplementation()).createLSSerializer().writeToString(xmlDocument);
+                
Assert.assertTrue(serialized.contains("http-nio-127.0.0.1-auto-"));
+                Assert.assertTrue(serialized.contains("stage=\"S\""));
+            }
+        } else {
+            Assert.assertTrue(body.contains("http-nio-127.0.0.1-auto-"));
+            // Verify that a request is being processed
+            Assert.assertTrue(body.contains("<strong>S</strong>"));
+        }
     }
 
 }
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index 09827edf15..3d226551fd 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -165,6 +165,14 @@
       </add>
     </changelog>
   </subsection>
+  <subsection name="Web applications">
+    <changelog>
+      <fix>
+        Fix status servlet detailed view of the connectors when using automatic
+        port. (remm)
+      </fix>
+    </changelog>
+  </subsection>
   <subsection name="Other">
     <changelog>
       <update>


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

Reply via email to