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

Reply via email to