This is an automated email from the ASF dual-hosted git repository. ddekany pushed a commit to branch 2.3-gae in repository https://gitbox.apache.org/repos/asf/freemarker.git
commit 763e67522374a916bf38439d86e68a0dd5d70f54 Author: ddekany <[email protected]> AuthorDate: Fri Dec 8 13:55:13 2023 +0100 Updated Jetty version used in JUnit tests, because the old one can't run on Java 16. Also some adjustments in Jetty setup was needed. --- ivy.xml | 9 +- .../ext/jsp/RealServletContainertTest.java | 4 +- .../freemarker/template/MockServletContext.java | 143 +++++++++++++++++++++ .../freemarker/test/servlet/WebAppTestCase.java | 23 +++- src/test/resources/logback-test.xml | 2 + 5 files changed, 174 insertions(+), 7 deletions(-) diff --git a/ivy.xml b/ivy.xml index 8a5afead..b379f16f 100644 --- a/ivy.xml +++ b/ivy.xml @@ -21,7 +21,7 @@ AFTER CHANGING THIS FILE don't forget to issue: ant update-deps --> <!DOCTYPE ivy-module [ - <!ENTITY jetty.version "7.6.21.v20160908"> + <!ENTITY jetty.version "9.4.53.v20231009"> <!ENTITY slf4j.version "1.6.1"> <!ENTITY spring.version "2.5.6.SEC03"> ]> @@ -143,9 +143,12 @@ <dependency org="org.eclipse.jetty" name="jetty-server" rev="&jetty.version;" conf="test->default" /> <dependency org="org.eclipse.jetty" name="jetty-webapp" rev="&jetty.version;" conf="test->default" /> - <dependency org="org.eclipse.jetty" name="jetty-jsp" rev="&jetty.version;" conf="test->default" /> <dependency org="org.eclipse.jetty" name="jetty-util" rev="&jetty.version;" conf="test->default" /> - + <dependency org="org.eclipse.jetty" name="apache-jsp" rev="&jetty.version;" conf="test->default" /> + <!-- JPS JSTL: --> + <dependency org="org.apache.taglibs" name="taglibs-standard-impl" rev="1.2.5" conf="test->default" /> + <dependency org="org.apache.taglibs" name="taglibs-standard-spec" rev="1.2.5" conf="test->default" /> + <dependency org="displaytag" name="displaytag" rev="1.2" conf="test->default"> <exclude org="com.lowagie" name="itext" /> <exclude org="org.slf4j" name="slf4j-log4j12" /> diff --git a/src/test/java/freemarker/ext/jsp/RealServletContainertTest.java b/src/test/java/freemarker/ext/jsp/RealServletContainertTest.java index ad0c7b6e..8c3982e7 100644 --- a/src/test/java/freemarker/ext/jsp/RealServletContainertTest.java +++ b/src/test/java/freemarker/ext/jsp/RealServletContainertTest.java @@ -207,15 +207,13 @@ public class RealServletContainertTest extends WebAppTestCase { public void tldDiscoveryRelative() throws Exception { assertExpectedEqualsOutput(WEBAPP_TLD_DISCOVERY, "subdir/test-rel.txt", "tester?view=subdir/test-rel.ftl"); } - + @Test public void errorStatusCodes() throws Exception { assertEquals(404, getResponseStatusCode(WEBAPP_ERRORS, "missing.jsp")); assertEquals(500, getResponseStatusCode(WEBAPP_ERRORS, "failing-runtime.jsp")); assertEquals(500, getResponseStatusCode(WEBAPP_ERRORS, "failing-parsetime.jsp")); - assertEquals(200, getResponseStatusCode(WEBAPP_ERRORS, - "tester?view=not-failing.ftl&viewServlet=freemarker-default-dev")); assertEquals(404, getResponseStatusCode(WEBAPP_ERRORS, "tester?view=missing.ftl&viewServlet=freemarker-default-dev")); assertEquals(200, getResponseStatusCode(WEBAPP_ERRORS, diff --git a/src/test/java/freemarker/template/MockServletContext.java b/src/test/java/freemarker/template/MockServletContext.java index f833bec4..0ed47ec0 100644 --- a/src/test/java/freemarker/template/MockServletContext.java +++ b/src/test/java/freemarker/template/MockServletContext.java @@ -22,12 +22,20 @@ import java.io.InputStream; import java.net.MalformedURLException; import java.net.URL; import java.util.Enumeration; +import java.util.EventListener; +import java.util.Map; import java.util.Set; +import javax.servlet.Filter; +import javax.servlet.FilterRegistration; import javax.servlet.RequestDispatcher; import javax.servlet.Servlet; import javax.servlet.ServletContext; import javax.servlet.ServletException; +import javax.servlet.ServletRegistration; +import javax.servlet.SessionCookieConfig; +import javax.servlet.SessionTrackingMode; +import javax.servlet.descriptor.JspConfigDescriptor; public class MockServletContext implements ServletContext { @@ -55,6 +63,11 @@ public class MockServletContext implements ServletContext { return null; } + @Override + public boolean setInitParameter(String s, String s1) { + return false; + } + public int getMajorVersion() { return 0; } @@ -67,6 +80,16 @@ public class MockServletContext implements ServletContext { return 0; } + @Override + public int getEffectiveMajorVersion() { + return 0; + } + + @Override + public int getEffectiveMinorVersion() { + return 0; + } + public RequestDispatcher getNamedDispatcher(String arg0) { return null; } @@ -103,6 +126,126 @@ public class MockServletContext implements ServletContext { return "MyApp"; } + @Override + public ServletRegistration.Dynamic addServlet(String s, String s1) { + return null; + } + + @Override + public ServletRegistration.Dynamic addServlet(String s, Servlet servlet) { + return null; + } + + @Override + public ServletRegistration.Dynamic addServlet(String s, Class<? extends Servlet> aClass) { + return null; + } + + @Override + public <T extends Servlet> T createServlet(Class<T> aClass) throws ServletException { + return null; + } + + @Override + public ServletRegistration getServletRegistration(String s) { + return null; + } + + @Override + public Map<String, ? extends ServletRegistration> getServletRegistrations() { + return null; + } + + @Override + public FilterRegistration.Dynamic addFilter(String s, String s1) { + return null; + } + + @Override + public FilterRegistration.Dynamic addFilter(String s, Filter filter) { + return null; + } + + @Override + public FilterRegistration.Dynamic addFilter(String s, Class<? extends Filter> aClass) { + return null; + } + + @Override + public <T extends Filter> T createFilter(Class<T> aClass) throws ServletException { + return null; + } + + @Override + public FilterRegistration getFilterRegistration(String s) { + return null; + } + + @Override + public Map<String, ? extends FilterRegistration> getFilterRegistrations() { + return null; + } + + @Override + public SessionCookieConfig getSessionCookieConfig() { + return null; + } + + @Override + public void setSessionTrackingModes(Set<SessionTrackingMode> set) { + + } + + @Override + public Set<SessionTrackingMode> getDefaultSessionTrackingModes() { + return null; + } + + @Override + public Set<SessionTrackingMode> getEffectiveSessionTrackingModes() { + return null; + } + + @Override + public void addListener(String s) { + + } + + @Override + public <T extends EventListener> void addListener(T t) { + + } + + @Override + public void addListener(Class<? extends EventListener> aClass) { + + } + + @Override + public <T extends EventListener> T createListener(Class<T> aClass) throws ServletException { + return null; + } + + @Override + public JspConfigDescriptor getJspConfigDescriptor() { + return null; + } + + @Override + public ClassLoader getClassLoader() { + return null; + } + + @Override + public void declareRoles(String... strings) { + + } + + @Override + public String getVirtualServerName() { + return null; + } + public Enumeration getServletNames() { return null; } diff --git a/src/test/java/freemarker/test/servlet/WebAppTestCase.java b/src/test/java/freemarker/test/servlet/WebAppTestCase.java index 0366bde7..ab14fb28 100644 --- a/src/test/java/freemarker/test/servlet/WebAppTestCase.java +++ b/src/test/java/freemarker/test/servlet/WebAppTestCase.java @@ -34,6 +34,10 @@ import java.util.regex.Pattern; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; +import org.eclipse.jetty.annotations.ServletContainerInitializersStarter; +import org.eclipse.jetty.apache.jsp.JettyJasperInitializer; +import org.eclipse.jetty.plus.annotation.ContainerInitializer; +import org.eclipse.jetty.server.NetworkConnector; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.handler.ContextHandlerCollection; import org.eclipse.jetty.webapp.WebAppContext; @@ -111,7 +115,7 @@ public class WebAppTestCase { ensureWebAppIsDeployed(webAppName); - final URI uri = new URI("http://localhost:" + server.getConnectors()[0].getLocalPort() + final URI uri = new URI("http://localhost:" + ((NetworkConnector) server.getConnectors()[0]).getLocalPort() + "/" + webAppName + "/" + webAppRelURL); final HttpURLConnection httpCon = (HttpURLConnection) uri.toURL().openConnection(); @@ -234,6 +238,9 @@ public class WebAppTestCase { context.setAttribute( ATTR_JETTY_CONTAINER_INCLUDE_JAR_PATTERN, ".*taglib.*\\.jar$"); + + addJasperInitializer(context); + contextHandlers.addHandler(context); // As we add this after the Server was started, it has to be started manually: context.start(); @@ -242,6 +249,20 @@ public class WebAppTestCase { LOG.info("Deployed web app.: {}", webAppName); } + /** + * Without this, we will have this error when loading a taglib: + * NullPointerException: Cannot invoke "org.apache.jasper.compiler.TldCache.getTldResourcePath(String)" because the + * return value of "org.apache.jasper.Options.getTldCache()" is null + */ + private static void addJasperInitializer(WebAppContext context) { + JettyJasperInitializer jettyJasperInitializer = new JettyJasperInitializer(); + ServletContainerInitializersStarter servletContainerInitializersStarter + = new ServletContainerInitializersStarter(context); + ContainerInitializer containerInitializer = new ContainerInitializer(jettyJasperInitializer, null); + context.setAttribute("org.eclipse.jetty.containerInitializers", List.of(containerInitializer)); + context.addBean(servletContainerInitializersStarter, true); + } + private static void deleteTemporaryDirectories() throws IOException { if (testTempDirectory.getParentFile() == null) { throw new IOException("Won't delete the root directory"); diff --git a/src/test/resources/logback-test.xml b/src/test/resources/logback-test.xml index e3876ec4..2ddfb821 100644 --- a/src/test/resources/logback-test.xml +++ b/src/test/resources/logback-test.xml @@ -26,6 +26,8 @@ </appender> <logger name="org.eclipse.jetty" level="INFO" /> + <logger name="org.apache.tomcat" level="INFO" /> + <logger name="org.apache.jasper" level="INFO" /> <root level="debug"> <appender-ref ref="STDOUT" />
