This is an automated email from the ASF dual-hosted git repository. markt pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/tomcat-tck.git
The following commit(s) were added to refs/heads/main by this push: new 3a57d71 Add h2c support. Refactor a little. 3a57d71 is described below commit 3a57d71beb2c15f23e0bdf6f01713521bfbac086 Author: Mark Thomas <ma...@apache.org> AuthorDate: Tue Mar 19 17:52:02 2024 +0000 Add h2c support. Refactor a little. --- .../tck/servlet/TomcatServletTckConfiguration.java | 43 +++++++++++++++------- 1 file changed, 30 insertions(+), 13 deletions(-) diff --git a/servlet-tck/src/test/java/org/apache/tomcat/tck/servlet/TomcatServletTckConfiguration.java b/servlet-tck/src/test/java/org/apache/tomcat/tck/servlet/TomcatServletTckConfiguration.java index 27be6bf..4b043da 100644 --- a/servlet-tck/src/test/java/org/apache/tomcat/tck/servlet/TomcatServletTckConfiguration.java +++ b/servlet-tck/src/test/java/org/apache/tomcat/tck/servlet/TomcatServletTckConfiguration.java @@ -17,14 +17,19 @@ package org.apache.tomcat.tck.servlet; import java.lang.reflect.Field; +import java.lang.reflect.Method; import java.util.Locale; import org.apache.catalina.Container; import org.apache.catalina.connector.Connector; import org.apache.catalina.core.StandardContext; import org.apache.catalina.startup.Tomcat; +import org.apache.coyote.UpgradeProtocol; +import org.apache.coyote.http11.AbstractHttp11Protocol; +import org.apache.coyote.http2.Http2Protocol; import org.jboss.arquillian.container.spi.event.container.AfterDeploy; -import org.jboss.arquillian.container.spi.event.container.BeforeDeploy; +import org.jboss.arquillian.container.spi.event.container.AfterStart; +import org.jboss.arquillian.container.spi.event.container.BeforeStart; import org.jboss.arquillian.core.api.annotation.Observes; import org.jboss.arquillian.core.spi.LoadableExtension; import org.jboss.arquillian.container.tomcat.embedded.Tomcat10EmbeddedContainer; @@ -38,23 +43,14 @@ public class TomcatServletTckConfiguration implements LoadableExtension { public static class ServletObserver { - public void configureTomcat(@Observes final BeforeDeploy beforeDeploy) { - Tomcat10EmbeddedContainer container = (Tomcat10EmbeddedContainer) beforeDeploy.getDeployableContainer(); + public void configureTomcat(@Observes final AfterStart afterStart) { + Tomcat10EmbeddedContainer container = (Tomcat10EmbeddedContainer) afterStart.getDeployableContainer(); try { // Obtain reference to Tomcat instance Field tomcatField = Tomcat10EmbeddedContainer.class.getDeclaredField("tomcat"); tomcatField.setAccessible(true); Tomcat tomcat = (Tomcat) tomcatField.get(container); - - // Update Arquillian configuration with port being used by Tomcat Connector connector = tomcat.getConnector(); - int localPort = connector.getLocalPort(); - Field configurationField = Tomcat10EmbeddedContainer.class.getDeclaredField("configuration"); - configurationField.setAccessible(true); - Object configuration = configurationField.get(container); - Field portField = container.getConfigurationClass().getDeclaredField("bindHttpPort"); - portField.setAccessible(true); - portField.set(configuration, Integer.valueOf(localPort)); // Add trailer headers used in TCK to allow list connector.setProperty("allowedTrailerHeaders", "myTrailer,myTrailer2"); @@ -66,7 +62,28 @@ public class TomcatServletTckConfiguration implements LoadableExtension { tomcat.addUser("javajoe", "javajoe"); tomcat.addRole("javajoe", "VP"); tomcat.addRole("javajoe", "Manager"); - } catch (ReflectiveOperationException e) { + + // Update Arquillian configuration with port being used by Tomcat + int localPort = connector.getLocalPort(); + Field configurationField = Tomcat10EmbeddedContainer.class.getDeclaredField("configuration"); + configurationField.setAccessible(true); + Object configuration = configurationField.get(container); + Field portField = container.getConfigurationClass().getDeclaredField("bindHttpPort"); + portField.setAccessible(true); + portField.set(configuration, Integer.valueOf(localPort)); + + // Add HTTP/2 support + Http2Protocol http2Protocol = new Http2Protocol(); + AbstractHttp11Protocol<?> httpProtocol = (AbstractHttp11Protocol<?>) connector.getProtocolHandler(); + http2Protocol.setHttp11Protocol(httpProtocol); + connector.addUpgradeProtocol(http2Protocol); + // Upgrade protocols need to be added before Connector.init(). + // Can't do that so use reflection to achieve the same aim. + Method m = AbstractHttp11Protocol.class.getDeclaredMethod( + "configureUpgradeProtocol", UpgradeProtocol.class); + m.setAccessible(true); + m.invoke(httpProtocol, http2Protocol); + } catch (Exception e) { throw new RuntimeException(e); } } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org