Skip to content

Commit b51e14c

Browse files
committed
Add test for onOpen exception on WS Next
1 parent 04ffd18 commit b51e14c

File tree

1 file changed

+86
-0
lines changed

1 file changed

+86
-0
lines changed
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
package io.quarkus.websockets.next.test.telemetry;
2+
3+
import io.quarkus.builder.Version;
4+
import io.quarkus.logging.Log;
5+
import io.quarkus.maven.dependency.Dependency;
6+
import io.quarkus.test.QuarkusUnitTest;
7+
import io.quarkus.test.common.http.TestHTTPResource;
8+
import io.quarkus.websockets.next.OnOpen;
9+
import io.quarkus.websockets.next.WebSocket;
10+
import io.quarkus.websockets.next.WebSocketClient;
11+
import io.quarkus.websockets.next.WebSocketClientConnection;
12+
import io.quarkus.websockets.next.WebSocketConnector;
13+
import io.restassured.RestAssured;
14+
import io.restassured.response.ValidatableResponse;
15+
import jakarta.inject.Inject;
16+
import org.awaitility.Awaitility;
17+
import org.jboss.shrinkwrap.api.asset.StringAsset;
18+
import org.junit.jupiter.api.Test;
19+
import org.junit.jupiter.api.extension.RegisterExtension;
20+
21+
import java.net.URI;
22+
import java.time.Duration;
23+
import java.util.List;
24+
25+
import static io.quarkus.websockets.next.test.telemetry.MetricsAsserter.assertServerConnectionOpeningFailedTotal;
26+
import static org.junit.jupiter.api.Assertions.assertFalse;
27+
28+
public class MicrometerWebSocketsStandaloneTest {
29+
30+
@RegisterExtension
31+
public static final QuarkusUnitTest test = new QuarkusUnitTest()
32+
.withApplicationRoot(root -> root
33+
.addClasses(MetricsAsserter.class)
34+
.addAsResource(new StringAsset("""
35+
bounce-endpoint.prefix-responses=true
36+
quarkus.websockets-next.server.metrics.enabled=true
37+
quarkus.websockets-next.client.metrics.enabled=true
38+
"""), "application.properties"))
39+
.setForcedDependencies(
40+
List.of(Dependency.of("io.quarkus", "quarkus-micrometer-registry-prometheus-deployment",
41+
Version.getVersion())));
42+
43+
@Inject
44+
WebSocketConnector<ErroneousClient_OnConnectError> onConnectErrorClient;
45+
46+
@TestHTTPResource("/")
47+
URI baseUri;
48+
49+
static ValidatableResponse getMetrics() {
50+
return RestAssured.given().get("/q/metrics").then().statusCode(200);
51+
}
52+
53+
@Test
54+
public void testServerEndpoint_OnConnectionError() {
55+
WebSocketClientConnection connection = onConnectErrorClient.baseUri(baseUri).connectAndAwait();
56+
Awaitility.await().atMost(Duration.ofSeconds(2)).untilAsserted(() -> {
57+
// Connection closing is async and takes some time
58+
assertFalse(connection.isOpen(),
59+
"Runtime exception happened on server side and connection is still open");
60+
});
61+
62+
Awaitility.await().atMost(Duration.ofSeconds(5)).untilAsserted(() -> {
63+
getMetrics()
64+
.body(assertServerConnectionOpeningFailedTotal("/on-connect-error", 1));
65+
});
66+
}
67+
68+
@WebSocket(path = "/on-connect-error")
69+
public static class OnConnectErrorEndpoint {
70+
71+
@OnOpen()
72+
public void onOpen() {
73+
Log.info("onOpen throwing exception");
74+
throw new RuntimeException("Crafted exception - Websocket failed to open");
75+
}
76+
}
77+
78+
@WebSocketClient(path = "/on-connect-error")
79+
public static class ErroneousClient_OnConnectError {
80+
81+
@OnOpen()
82+
public void onOpen() {
83+
Log.info("client onOpen");
84+
}
85+
}
86+
}

0 commit comments

Comments
 (0)