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
commit b985f94a2786a6dc344999d04f77a4ba3abbd20d Author: Mark Thomas <ma...@apache.org> AuthorDate: Fri Jul 25 09:06:25 2025 +0100 Fix failing TCK tests now clients don't send unsupported extensions The WebSocket TCK assumes that clients (but not servers) support a number of extensions that are defined only by name. Add support for these extensions to the WebSocket clients implemented as NO-OP extensions. --- .../websocket/TomcatWebSocketTckConfiguration.java | 100 +++++++++++++++++++++ 1 file changed, 100 insertions(+) diff --git a/websocket-tck/src/test/java/org/apache/tomcat/tck/websocket/TomcatWebSocketTckConfiguration.java b/websocket-tck/src/test/java/org/apache/tomcat/tck/websocket/TomcatWebSocketTckConfiguration.java index e1025f6..0e5ae3a 100644 --- a/websocket-tck/src/test/java/org/apache/tomcat/tck/websocket/TomcatWebSocketTckConfiguration.java +++ b/websocket-tck/src/test/java/org/apache/tomcat/tck/websocket/TomcatWebSocketTckConfiguration.java @@ -16,8 +16,12 @@ */ package org.apache.tomcat.tck.websocket; +import java.io.IOException; import java.lang.reflect.Field; import java.net.URL; +import java.nio.ByteBuffer; +import java.util.Collections; +import java.util.List; import org.apache.catalina.Container; import org.apache.catalina.Host; @@ -28,6 +32,11 @@ import org.apache.tomcat.util.net.SSLHostConfig; import org.apache.tomcat.util.net.SSLHostConfigCertificate; import org.apache.tomcat.util.net.SSLHostConfigCertificate.Type; import org.apache.tomcat.util.scan.StandardJarScanner; +import org.apache.tomcat.websocket.MessagePart; +import org.apache.tomcat.websocket.Transformation; +import org.apache.tomcat.websocket.TransformationBuilder; +import org.apache.tomcat.websocket.TransformationFactory; +import org.apache.tomcat.websocket.TransformationResult; import org.jboss.arquillian.container.spi.client.protocol.metadata.HTTPContext; import org.jboss.arquillian.container.spi.client.protocol.metadata.ProtocolMetaData; import org.jboss.arquillian.container.spi.client.protocol.metadata.Servlet; @@ -37,6 +46,11 @@ import org.jboss.arquillian.core.api.Instance; import org.jboss.arquillian.core.api.annotation.Inject; import org.jboss.arquillian.core.api.annotation.Observes; import org.jboss.arquillian.core.spi.LoadableExtension; +import org.jboss.arquillian.test.spi.event.suite.BeforeClass; + +import jakarta.websocket.Extension; +import jakarta.websocket.Extension.Parameter; + import org.jboss.arquillian.container.tomcat.embedded.EmbeddedContextConfig; import org.jboss.arquillian.container.tomcat.embedded.Tomcat10EmbeddedContainer; @@ -164,6 +178,16 @@ public class TomcatWebSocketTckConfiguration implements LoadableExtension { throw new RuntimeException(e); } } + + + public void configureTestClients(@SuppressWarnings("unused") @Observes final BeforeClass event) { + // Configure the NO-OP extensions required by the TCK + TransformationFactory.getInstance().registerExtension("ext1", new NoOpTransformationBuilder("ext1")); + TransformationFactory.getInstance().registerExtension("ext2", new NoOpTransformationBuilder("ext2")); + TransformationFactory.getInstance().registerExtension("firstExtName", new NoOpTransformationBuilder("firstExtName")); + TransformationFactory.getInstance().registerExtension("secondExtName", new NoOpTransformationBuilder("secondExtName")); + TransformationFactory.getInstance().registerExtension("thirdExtName", new NoOpTransformationBuilder("thirdExtName")); + } } @@ -186,4 +210,80 @@ public class TomcatWebSocketTckConfiguration implements LoadableExtension { super.beforeStart(); } } + + + static class NoOpTransformationBuilder implements TransformationBuilder { + + private final String name; + + NoOpTransformationBuilder(String name) { + this.name = name; + } + + @Override + public Transformation build(List<List<Parameter>> preferences, boolean isServer) { + return new Transformation() { + + private Transformation next; + + @Override + public boolean validateRsvBits(int i) { + if (next == null) { + return true; + } else { + return next.validateRsvBits(i); + } + } + + @Override + public boolean validateRsv(int rsv, byte opCode) { + if (next == null) { + return true; + } else { + return next.validateRsv(rsv, opCode); + } + } + + @Override + public void setNext(Transformation t) { + if (next == null) { + this.next = t; + } else { + next.setNext(t); + } + } + + @Override + public List<MessagePart> sendMessagePart(List<MessagePart> messageParts) throws IOException { + return next.sendMessagePart(messageParts); + } + + @Override + public TransformationResult getMoreData(byte opCode, boolean fin, int rsv, ByteBuffer dest) throws IOException { + return next.getMoreData(opCode, fin, rsv, dest); + } + + @Override + public Extension getExtensionResponse() { + return new Extension() { + + @Override + public String getName() { + return name; + } + + @Override + public List<Parameter> getParameters() { + return Collections.emptyList(); + } + }; + } + + @Override + public void close() { + next.close(); + } + }; + } + } } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org