You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@unomi.apache.org by sh...@apache.org on 2026/09/04 10:38:22 UTC
(unomi) branch backport/graphql-websocket-auth-3.0.x updated: Keep Jetty client types out of GraphQLWebSocketIT method signatures
This is an automated email from the ASF dual-hosted git repository.
asf-gitbox-commits pushed a commit to branch backport/graphql-websocket-auth-3.0.x
in repository https://gitbox.apache.org/repos/asf/unomi.git
The following commit(s) were added to refs/heads/backport/graphql-websocket-auth-3.0.x by this push:
new b9b38b132 Keep Jetty client types out of GraphQLWebSocketIT method signatures
b9b38b132 is described below
commit b9b38b132944c2294a833cdcb060d093f3e567d4
Author: Serge Huber <sh...@apache.org>
AuthorDate: Fri Sep 4 12:38:18 2026 +0200
Keep Jetty client types out of GraphQLWebSocketIT method signatures
JUnit resolves the types in a test class's method signatures when it scans the
class, which happens at probe start, before the test's setup has waited for the
container to finish provisioning. A helper that took a websocket-client type as
a parameter therefore made every test in the class fail to load whenever the
class ran early, as it does when selected on its own. Build the upgrade request
inside the helper instead, so the client bundle is only needed once the tests
actually run.
Co-Authored-By: Claude Opus 4.8 <no...@anthropic.com>
---
.../unomi/itests/graphql/GraphQLWebSocketIT.java | 27 +++++++++++++---------
1 file changed, 16 insertions(+), 11 deletions(-)
diff --git a/itests/src/test/java/org/apache/unomi/itests/graphql/GraphQLWebSocketIT.java b/itests/src/test/java/org/apache/unomi/itests/graphql/GraphQLWebSocketIT.java
index 4a88b765d..18c4e9c6c 100644
--- a/itests/src/test/java/org/apache/unomi/itests/graphql/GraphQLWebSocketIT.java
+++ b/itests/src/test/java/org/apache/unomi/itests/graphql/GraphQLWebSocketIT.java
@@ -185,36 +185,41 @@ public class GraphQLWebSocketIT extends BaseGraphQLIT {
@Test
public void testWebSocketUpgrade_withWrongJaasPassword_returns401() throws Exception {
- ClientUpgradeRequest request = new ClientUpgradeRequest();
- request.setHeader("Authorization", basicAuthHeader(BASIC_AUTH_USER_NAME, "definitely-not-the-password"));
- assertWebSocketUpgradeRejected(request, 401);
+ assertWebSocketUpgradeRejected(basicAuthHeader(BASIC_AUTH_USER_NAME, "definitely-not-the-password"), null, 401);
}
@Test
public void testWebSocketUpgrade_withMalformedBasic_returns401() throws Exception {
- ClientUpgradeRequest request = new ClientUpgradeRequest();
- request.setHeader("Authorization", "Basic !!!");
- assertWebSocketUpgradeRejected(request, 401);
+ assertWebSocketUpgradeRejected("Basic !!!", null, 401);
}
/** A WebSocket handshake bypasses CORS, so a foreign origin is refused before anything else. */
@Test
public void testWebSocketUpgrade_fromForeignOrigin_returns403() throws Exception {
- ClientUpgradeRequest request = new ClientUpgradeRequest();
- request.setHeader("Origin", "http://attacker.example");
- request.setHeader("Authorization", basicAuthHeader(BASIC_AUTH_USER_NAME, BASIC_AUTH_PASSWORD));
- assertWebSocketUpgradeRejected(request, 403);
+ assertWebSocketUpgradeRejected(basicAuthHeader(BASIC_AUTH_USER_NAME, BASIC_AUTH_PASSWORD), "http://attacker.example", 403);
}
private URI graphqlWebSocketUri() throws Exception {
return new URI("ws://localhost:" + getHttpPort() + "/graphql");
}
- private void assertWebSocketUpgradeRejected(ClientUpgradeRequest request, int expectedStatus) throws Exception {
+ /**
+ * Jetty's websocket-client types are kept out of method signatures on purpose: JUnit resolves
+ * signature types when it scans the class, before {@code @Before} has waited for the container,
+ * and that bundle is not necessarily wired yet at that point.
+ */
+ private void assertWebSocketUpgradeRejected(String authorization, String origin, int expectedStatus) throws Exception {
WebSocketClient client = new WebSocketClient();
Socket socket = new Socket();
try {
client.start();
+ ClientUpgradeRequest request = new ClientUpgradeRequest();
+ if (authorization != null) {
+ request.setHeader("Authorization", authorization);
+ }
+ if (origin != null) {
+ request.setHeader("Origin", origin);
+ }
Future<Session> onConnected = client.connect(socket, graphqlWebSocketUri(), request);
try {
onConnected.get(10, TimeUnit.SECONDS);