Am 11.05.26 um 15:18 schrieb Dimitris Soumis:
On Sat, May 2, 2026 at 8:37 PM Rainer Jung <[email protected]> wrote:

Am 02.05.26 um 09:29 schrieb Rainer Jung:
Hi Dimitris,

some of the new tests fail for me consistently. For details please see
below.

Should be fixed by bea9b2a46ac41a459d03c5e2a9af0a536ca8c287. I took the
code from StandardHost and adjusted it. Other places use "instanceof"
instead of comparing class names. I hope the fix is OK for you.

Best regards,

Rainer


Am 08.04.26 um 14:20 schrieb [email protected]:
This is an automated email from the ASF dual-hosted git repository.

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

commit 48343a64f24258be7e273d49849ee866463be67c
Author: Dimitris Soumis <[email protected]>
AuthorDate: Wed Apr 8 14:52:53 2026 +0300

      Add more tests and minor fixes for FilterValve,
ProxyErrorReportValve and SemaphoreValve
---
   .../apache/catalina/valves/TestFilterValve.java    |  99 ++++----
   .../catalina/valves/TestProxyErrorReportValve.java | 121 +++++-----
   .../apache/catalina/valves/TestSemaphoreValve.java | 254 +++++++++++
+++++++---
   3 files changed, 333 insertions(+), 141 deletions(-)


diff --git a/test/org/apache/catalina/valves/
TestProxyErrorReportValve.java b/test/org/apache/catalina/valves/
TestProxyErrorReportValve.java
index 98a92fe84f..8829fa2d63 100644
--- a/test/org/apache/catalina/valves/TestProxyErrorReportValve.java
+++ b/test/org/apache/catalina/valves/TestProxyErrorReportValve.java
...

@@ -54,28 +50,49 @@ public class TestProxyErrorReportValve extends
TomcatBaseTest {
                   HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
"Server broke"));
           ctx.addServletMappingDecoded("/", "error");
-        // Register an error page that the valve will redirect to
+        // Register an error page at the Host's error report valve
level
+        // so findErrorPage() returns a URL for the redirect
+        Tomcat.addServlet(ctx, "errorPage", new ErrorPageServlet());
+        ctx.addServletMappingDecoded("/error-page", "errorPage");
+
+        tomcat.start();
+
+        ProxyErrorReportValve valve = (ProxyErrorReportValve)
host.getPipeline().getFirst();

I get an exception here:

class org.apache.catalina.valves.AccessLogValve cannot be cast to class
org.apache.catalina.valves.ProxyErrorReportValve
(org.apache.catalina.valves.AccessLogValve and
org.apache.catalina.valves.ProxyErrorReportValve are in unnamed module
of loader 'app')
java.lang.ClassCastException: class
org.apache.catalina.valves.AccessLogValve cannot be cast to class
org.apache.catalina.valves.ProxyErrorReportValve
(org.apache.catalina.valves.AccessLogValve and
org.apache.catalina.valves.ProxyErrorReportValve are in unnamed module
of loader 'app')
          at

org.apache.catalina.valves.TestProxyErrorReportValve.testRedirectMode(TestProxyErrorReportValve.java:60)
          at java.base/
jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
          at java.base/

jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
          at java.base/

jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)


...

+    @Test
+    public void testProxyMode() throws Exception {
+        Tomcat tomcat = getTomcatInstance();
+        StandardHost host = (StandardHost) tomcat.getHost();
+        host.setErrorReportValveClass(PROXY_VALVE);
+
+        Context ctx = getProgrammaticRootContext();
+
+        Tomcat.addServlet(ctx, "error", new SendErrorServlet(
+                HttpServletResponse.SC_NOT_FOUND, "Not found"));
+        ctx.addServletMappingDecoded("/", "error");
+
           Tomcat.addServlet(ctx, "errorPage", new ErrorPageServlet());
           ctx.addServletMappingDecoded("/error-page", "errorPage");
-        ErrorPage errorPage = new ErrorPage();
-
errorPage.setErrorCode(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
-        errorPage.setLocation("/error-page");
-        ctx.addErrorPage(errorPage);
           tomcat.start();
+        ProxyErrorReportValve valve = (ProxyErrorReportValve)
host.getPipeline().getFirst();

and here

class org.apache.catalina.valves.AccessLogValve cannot be cast to class
org.apache.catalina.valves.ProxyErrorReportValve
(org.apache.catalina.valves.AccessLogValve and
org.apache.catalina.valves.ProxyErrorReportValve are in unnamed module
of loader 'app')
java.lang.ClassCastException: class
org.apache.catalina.valves.AccessLogValve cannot be cast to class
org.apache.catalina.valves.ProxyErrorReportValve
(org.apache.catalina.valves.AccessLogValve and
org.apache.catalina.valves.ProxyErrorReportValve are in unnamed module
of loader 'app')
          at

org.apache.catalina.valves.TestProxyErrorReportValve.testProxyMode(TestProxyErrorReportValve.java:86)
          at java.base/
jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
          at java.base/

jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
          at java.base/

jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

Maybe this is due to running the tests here with test.accesslog=true? I
turn the access log on during tests so that I can find out failure
reasons more quickly.

Best regards,

Rainer

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]


Hi Rainer,

Thanks for the fix.
Apologies for the late reply, I took time off the previous week.

No problem at all. Thanks for improving the tests!

Regards,

Rainer


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to