This is an automated email from the ASF dual-hosted git repository. lihan pushed a commit to branch 10.0.x in repository https://gitbox.apache.org/repos/asf/tomcat.git
The following commit(s) were added to refs/heads/10.0.x by this push: new 62136a2e82 Fix BZ66210 https://bz.apache.org/bugzilla/show_bug.cgi?id=66210 Use StringManager to retrieve the expected txt in the current locale and then compare the actual output to the locale specific expected text. 62136a2e82 is described below commit 62136a2e8222a6a111c2495010faff8ed62b412b Author: lihan <aooo...@gmail.com> AuthorDate: Wed Aug 17 13:58:14 2022 +0800 Fix BZ66210 https://bz.apache.org/bugzilla/show_bug.cgi?id=66210 Use StringManager to retrieve the expected txt in the current locale and then compare the actual output to the locale specific expected text. --- .../tribes/group/TestGroupChannelOptionFlag.java | 24 ++++++++++++++++------ .../catalina/valves/TestErrorReportValve.java | 20 ++++++++---------- .../coyote/ajp/TestAbstractAjpProcessor.java | 14 ++++++++++--- test/org/apache/coyote/ajp/TesterAjpMessage.java | 21 ++++++++++++------- test/org/apache/coyote/http2/TestFlowControl.java | 6 ++++-- test/org/apache/coyote/http2/TestHttp2Limits.java | 5 ++++- 6 files changed, 59 insertions(+), 31 deletions(-) diff --git a/test/org/apache/catalina/tribes/group/TestGroupChannelOptionFlag.java b/test/org/apache/catalina/tribes/group/TestGroupChannelOptionFlag.java index f90dd6e24e..3fa7e4839c 100644 --- a/test/org/apache/catalina/tribes/group/TestGroupChannelOptionFlag.java +++ b/test/org/apache/catalina/tribes/group/TestGroupChannelOptionFlag.java @@ -16,6 +16,7 @@ */ package org.apache.catalina.tribes.group; +import org.apache.tomcat.util.res.StringManager; import org.junit.After; import org.junit.Assert; import org.junit.Before; @@ -26,6 +27,7 @@ import org.apache.catalina.tribes.ChannelException; import org.apache.catalina.tribes.ChannelInterceptor; public class TestGroupChannelOptionFlag { + private final StringManager sm = StringManager.getManager(TestGroupChannelOptionFlag.class); private GroupChannel channel = null; @Before @@ -47,6 +49,8 @@ public class TestGroupChannelOptionFlag { @Test public void testOptionConflict() throws Exception { + String errorMsgRegx = getTestOptionErrorMsgRegx(); + boolean error = false; channel.setOptionCheck(true); ChannelInterceptor i = new TestInterceptor(); @@ -57,9 +61,9 @@ public class TestGroupChannelOptionFlag { channel.addInterceptor(i); try { channel.start(Channel.DEFAULT); - }catch ( ChannelException x ) { - if (x.getMessage().contains("option flag conflict")) { - error = true; + } catch (ChannelException x) { + if (x.getMessage().matches(errorMsgRegx)) { + error = true; } } Assert.assertTrue(error); @@ -67,6 +71,8 @@ public class TestGroupChannelOptionFlag { @Test public void testOptionNoConflict() throws Exception { + String errorMsgRegx = getTestOptionErrorMsgRegx(); + boolean error = false; channel.setOptionCheck(true); ChannelInterceptor i = new TestInterceptor(); @@ -80,14 +86,20 @@ public class TestGroupChannelOptionFlag { channel.addInterceptor(i); try { channel.start(Channel.DEFAULT); - }catch ( ChannelException x ) { - if (x.getMessage().contains("option flag conflict")) { - error = true; + } catch (ChannelException x) { + if (x.getMessage().matches(errorMsgRegx)) { + error = true; } } Assert.assertFalse(error); } + private String getTestOptionErrorMsgRegx() { + String errorMsgRegx = sm.getString("groupChannel.optionFlag.conflict", ".+").replace("[", "\\["); + errorMsgRegx += "; No faulty members identified."; + return errorMsgRegx; + } + public static class TestInterceptor extends ChannelInterceptorBase { // Just use base class } diff --git a/test/org/apache/catalina/valves/TestErrorReportValve.java b/test/org/apache/catalina/valves/TestErrorReportValve.java index 5de7f9ac5e..cee135304f 100644 --- a/test/org/apache/catalina/valves/TestErrorReportValve.java +++ b/test/org/apache/catalina/valves/TestErrorReportValve.java @@ -17,10 +17,7 @@ package org.apache.catalina.valves; import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.nio.charset.StandardCharsets; import jakarta.servlet.AsyncContext; import jakarta.servlet.RequestDispatcher; @@ -31,6 +28,7 @@ import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; +import org.apache.tomcat.util.res.StringManager; import org.junit.Assert; import org.junit.Test; @@ -43,6 +41,8 @@ import org.apache.tomcat.util.descriptor.web.ErrorPage; public class TestErrorReportValve extends TomcatBaseTest { + private static final StringManager sm = StringManager.getManager(TestErrorReportValve.class); + @Test public void testBug53071() throws Exception { Tomcat tomcat = getTomcatInstance(); @@ -56,14 +56,10 @@ public class TestErrorReportValve extends TomcatBaseTest { tomcat.start(); ByteChunk res = new ByteChunk(); - List<String> values = new ArrayList<>(); - values.add("en"); - Map<String, List<String>> reqHead = new HashMap<>(); - reqHead.put("Accept-Language", values); - getUrl("http://localhost:" + getPort(), res, reqHead, null); - - Assert.assertTrue(res.toString().contains("<p><b>Message</b> " + - ErrorServlet.ERROR_TEXT + "</p>")); + res.setCharset(StandardCharsets.UTF_8); + getUrl("http://localhost:" + getPort(), res, null); + Assert.assertTrue(res.toString().contains("<p><b>" + sm.getString("errorReportValve.message") + "</b> " + + ErrorServlet.ERROR_TEXT + "</p>")); } diff --git a/test/org/apache/coyote/ajp/TestAbstractAjpProcessor.java b/test/org/apache/coyote/ajp/TestAbstractAjpProcessor.java index 21f5e53fda..5096cfafd8 100644 --- a/test/org/apache/coyote/ajp/TestAbstractAjpProcessor.java +++ b/test/org/apache/coyote/ajp/TestAbstractAjpProcessor.java @@ -32,6 +32,7 @@ import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; +import org.apache.tomcat.util.res.StringManager; import org.junit.Assert; import org.junit.Before; import org.junit.Test; @@ -512,6 +513,10 @@ public class TestAbstractAjpProcessor extends TomcatBaseTest { Tomcat.addServlet(ctx, "helloWorld", new HelloWorldServlet()); ctx.addServletMappingDecoded("/", "helloWorld"); + StringManager smClient = StringManager.getManager("org.apache.catalina.valves"); + String expectedBody = "<p><b>" + smClient.getString("errorReportValve.type") + "</b> " + + smClient.getString("errorReportValve.statusReport") + "</p>"; + SimpleAjpClient ajpClient = new SimpleAjpClient(); ajpClient.setPort(getPort()); @@ -526,7 +531,7 @@ public class TestAbstractAjpProcessor extends TomcatBaseTest { // Expect 3 packets: headers, body, end validateResponseHeaders(responseHeaders, 403, "403"); TesterAjpMessage responseBody = ajpClient.readMessage(); - validateResponseBody(responseBody, "<p><b>Type</b> Status Report</p>"); + validateResponseBody(responseBody, expectedBody); validateResponseEnd(ajpClient.readMessage(), false); ajpClient.connect(); @@ -540,7 +545,7 @@ public class TestAbstractAjpProcessor extends TomcatBaseTest { // Expect 3 packets: headers, body, end validateResponseHeaders(responseHeaders, 403, "403"); responseBody = ajpClient.readMessage(); - validateResponseBody(responseBody, "<p><b>Type</b> Status Report</p>"); + validateResponseBody(responseBody, expectedBody); validateResponseEnd(ajpClient.readMessage(), false); ajpClient.connect(); @@ -655,8 +660,11 @@ public class TestAbstractAjpProcessor extends TomcatBaseTest { validateCpong(ajpClient.cping()); } else { // Expect 3 messages: headers, error report body, end for an invalid request + StringManager smClient = StringManager.getManager("org.apache.catalina.valves"); + String expectedBody = "<p><b>" + smClient.getString("errorReportValve.type") + "</b> " + + smClient.getString("errorReportValve.statusReport") + "</p>"; TesterAjpMessage responseBody = ajpClient.readMessage(); - validateResponseBody(responseBody, "<p><b>Type</b> Status Report</p>"); + validateResponseBody(responseBody, expectedBody); validateResponseEnd(ajpClient.readMessage(), false); } diff --git a/test/org/apache/coyote/ajp/TesterAjpMessage.java b/test/org/apache/coyote/ajp/TesterAjpMessage.java index 1e09ae9b4e..7fde97cdd2 100644 --- a/test/org/apache/coyote/ajp/TesterAjpMessage.java +++ b/test/org/apache/coyote/ajp/TesterAjpMessage.java @@ -16,6 +16,9 @@ */ package org.apache.coyote.ajp; +import java.nio.ByteBuffer; +import java.nio.CharBuffer; +import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; @@ -30,6 +33,7 @@ public class TesterAjpMessage extends AjpMessage { private final List<Header> headers = new ArrayList<>(); private final List<Attribute> attributes = new ArrayList<>(); + private transient Charset charset = StandardCharsets.UTF_8; public TesterAjpMessage(int packetSize) { @@ -52,16 +56,12 @@ public class TesterAjpMessage extends AjpMessage { } public String readString(int len) { - StringBuilder buffer = new StringBuilder(len); - - for (int i = 0; i < len; i++) { - char c = (char) buf[pos++]; - buffer.append(c); - } + CharBuffer buf = getCharset().decode(ByteBuffer.wrap(this.buf, pos, len)); + pos += len; // Read end of string marker readByte(); - return buffer.toString(); + return new String(buf.array(), buf.arrayOffset(), buf.length()); } public String readHeaderName() { @@ -96,6 +96,13 @@ public class TesterAjpMessage extends AjpMessage { attributes.add(new Attribute(name, value)); } + public Charset getCharset() { + return charset; + } + + public void setCharset(Charset charset) { + this.charset = charset; + } @Override public void end() { diff --git a/test/org/apache/coyote/http2/TestFlowControl.java b/test/org/apache/coyote/http2/TestFlowControl.java index e087641bc7..4ea1a074d5 100644 --- a/test/org/apache/coyote/http2/TestFlowControl.java +++ b/test/org/apache/coyote/http2/TestFlowControl.java @@ -18,10 +18,10 @@ package org.apache.coyote.http2; import java.io.IOException; import java.nio.ByteBuffer; -import java.util.Locale; import java.util.logging.Level; import java.util.logging.LogManager; +import org.apache.tomcat.util.res.StringManager; import org.junit.Assert; import org.junit.Test; @@ -29,6 +29,8 @@ import org.apache.tomcat.util.http.MimeHeaders; public class TestFlowControl extends Http2TestBase { + private static final StringManager sm = StringManager.getManager(TestFlowControl.class); + /* * https://tomcat.markmail.org/thread/lijsebphms7hr3zj */ @@ -95,7 +97,7 @@ public class TestFlowControl extends Http2TestBase { int end = trace.indexOf("]", start); String contentLength = trace.substring(start, end); // Language will depend on locale - String language = Locale.getDefault().getLanguage(); + String language = sm.getLocale().toLanguageTag(); Assert.assertEquals( "3-HeadersStart\n" + diff --git a/test/org/apache/coyote/http2/TestHttp2Limits.java b/test/org/apache/coyote/http2/TestHttp2Limits.java index 7605160d67..1697c7c39b 100644 --- a/test/org/apache/coyote/http2/TestHttp2Limits.java +++ b/test/org/apache/coyote/http2/TestHttp2Limits.java @@ -43,6 +43,9 @@ public class TestHttp2Limits extends Http2TestBase { @Test public void testSettingsOverheadLimits() throws Exception { http2Connect(); + String errMsg = sm.getString("upgradeHandler.tooMuchOverhead", "\\p{XDigit}++") + .replace("[", "\\["); + String overHeadMsgRegx = "0-Goaway-\\[1]-\\[11]-\\[" + errMsg + "]"; for (int i = 0; i < 100; i++) { try { @@ -57,7 +60,7 @@ public class TestHttp2Limits extends Http2TestBase { if (trace.equals("0-Settings-Ack\n")) { // Test continues output.clearTrace(); - } else if (trace.startsWith("0-Goaway-[1]-[11]-[Connection [")) { + } else if (trace.matches(overHeadMsgRegx)) { // Test passed return; } else { --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org