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 e065a89 Enable running Servlet TCK tests in parallel
e065a89 is described below
commit e065a8919e1ea187485a1e6d2105bc40a54f421a
Author: Mark Thomas <[email protected]>
AuthorDate: Mon Mar 18 12:14:55 2024 +0000
Enable running Servlet TCK tests in parallel
This is achieved as follows:
- configure Tomcat to listen on port 0 in arquillian.xml
- on deployment, extract the actual port being used from Tomcat
- then inject the correct port into the arquillian configuration
This ensures that arquillian generates the correct URLs for the clients
to use during the tests.
---
servlet-tck/pom.xml | 4 +-
.../tck/servlet/TomcatServletTckConfiguration.java | 57 ++++++++++++++++++++++
...org.jboss.arquillian.core.spi.LoadableExtension | 1 +
servlet-tck/src/test/resources/arquillian.xml | 7 +++
4 files changed, 66 insertions(+), 3 deletions(-)
diff --git a/servlet-tck/pom.xml b/servlet-tck/pom.xml
index 8b24483..0157c03 100644
--- a/servlet-tck/pom.xml
+++ b/servlet-tck/pom.xml
@@ -104,11 +104,9 @@
<include>**/*Test.java</include>
<include>**/*Tests.java</include>
</includes>
+ <forkCount>5</forkCount>
<reuseForks>false</reuseForks>
<systemPropertyVariables>
- <webServerHost>localhost</webServerHost>
- <webServerPort>8080</webServerPort>
-
<securedWebServicePort>8443</securedWebServicePort>
<ws_wait>5</ws_wait>
<junit.log.traceflag>true</junit.log.traceflag>
</systemPropertyVariables>
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
new file mode 100644
index 0000000..4cbe69a
--- /dev/null
+++
b/servlet-tck/src/test/java/org/apache/tomcat/tck/servlet/TomcatServletTckConfiguration.java
@@ -0,0 +1,57 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.tomcat.tck.servlet;
+
+import java.lang.reflect.Field;
+
+import org.apache.catalina.startup.Tomcat;
+import org.jboss.arquillian.container.spi.event.container.BeforeDeploy;
+import org.jboss.arquillian.core.api.annotation.Observes;
+import org.jboss.arquillian.core.spi.LoadableExtension;
+import
org.jboss.arquillian.container.tomcat.embedded.Tomcat10EmbeddedContainer;
+
+public class TomcatServletTckConfiguration implements LoadableExtension {
+
+ @Override
+ public void register(ExtensionBuilder builder) {
+ builder.observer(ServletObserver.class);
+ }
+
+ public static class ServletObserver {
+
+ public void configurePorts(@Observes final BeforeDeploy beforeDeploy) {
+ Tomcat10EmbeddedContainer container = (Tomcat10EmbeddedContainer)
beforeDeploy.getDeployableContainer();
+ try {
+ Field tomcatField =
Tomcat10EmbeddedContainer.class.getDeclaredField("tomcat");
+ tomcatField.setAccessible(true);
+ Tomcat tomcat = (Tomcat) tomcatField.get(container);
+ int localPort = tomcat.getConnector().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));
+
+ } catch (ReflectiveOperationException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ }
+}
diff --git
a/servlet-tck/src/test/resources/META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension
b/servlet-tck/src/test/resources/META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension
new file mode 100644
index 0000000..3a5794f
--- /dev/null
+++
b/servlet-tck/src/test/resources/META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension
@@ -0,0 +1 @@
+org.apache.tomcat.tck.servlet.TomcatServletTckConfiguration
\ No newline at end of file
diff --git a/servlet-tck/src/test/resources/arquillian.xml
b/servlet-tck/src/test/resources/arquillian.xml
new file mode 100644
index 0000000..a0554f4
--- /dev/null
+++ b/servlet-tck/src/test/resources/arquillian.xml
@@ -0,0 +1,7 @@
+<arquillian>
+ <container qualifier="tomcat" default="true">
+ <configuration>
+ <property name="bindHttpPort">0</property>
+ </configuration>
+ </container>
+</arquillian>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]