Refine status code in WebSocket client transport

See gh-10
This commit is contained in:
rstoyanchev
2022-03-11 16:53:24 +00:00
parent dcb752dde4
commit eb3c8d1a7e
2 changed files with 9 additions and 8 deletions

View File

@@ -275,7 +275,7 @@ final class WebSocketGraphQlTransport implements GraphQlTransport {
graphQlSession.handleComplete(message);
break;
default:
return Mono.error(new IllegalStateException("Unexpected message: " + message));
return session.close(new CloseStatus(4400, "Invalid message"));
}
}
return Mono.empty();
@@ -448,7 +448,8 @@ final class WebSocketGraphQlTransport implements GraphQlTransport {
logger.error("Closing " + this.connection.getDescription() +
" after failure to send 'complete' for subscription id='" + id + "'.");
}
this.connection.close().subscribe();
// No other suitable status (like server error but there is none for client)
this.connection.close(CloseStatus.PROTOCOL_ERROR).subscribe();
}
}
}
@@ -541,7 +542,7 @@ final class WebSocketGraphQlTransport implements GraphQlTransport {
* Close the underlying connection.
*/
public Mono<Void> close() {
return this.connection.close();
return this.connection.close(CloseStatus.GOING_AWAY);
}
/**
@@ -568,7 +569,7 @@ final class WebSocketGraphQlTransport implements GraphQlTransport {
*/
private interface DisposableConnection {
Mono<Void> close();
Mono<Void> close(CloseStatus status);
Mono<Void> notifyWhenClosed();
@@ -580,8 +581,8 @@ final class WebSocketGraphQlTransport implements GraphQlTransport {
return new DisposableConnection() {
@Override
public Mono<Void> close() {
return session.close();
public Mono<Void> close(CloseStatus status) {
return session.close(status);
}
@Override

View File

@@ -216,7 +216,7 @@ public class MockWebSocketGraphQlTransportTests {
// Stop
this.transport.stop().block(TIMEOUT);
assertThat(this.webSocketClient.getConnection(0).isOpen()).isFalse();
assertThat(this.webSocketClient.getConnection(0).closeStatus().block(TIMEOUT)).isEqualTo(CloseStatus.NORMAL);
assertThat(this.webSocketClient.getConnection(0).closeStatus().block(TIMEOUT)).isEqualTo(CloseStatus.GOING_AWAY);
// New requests are rejected
GraphQlRequest request = this.mockServer.expectOperation("{Query1}").andRespond(this.response1);
@@ -300,7 +300,7 @@ public class MockWebSocketGraphQlTransportTests {
TestWebSocketClient client = new TestWebSocketClient(new UnexpectedResponseHandler());
WebSocketGraphQlTransport transport = createTransport(client);
String expectedMessage = "disconnected with CloseStatus[code=1002, reason=null]";
String expectedMessage = "disconnected with CloseStatus[code=4400, reason=Invalid message]";
StepVerifier.create(transport.execute(new GraphQlRequest("{Query1}")))
.expectErrorSatisfies(ex -> assertThat(ex).hasMessageEndingWith(expectedMessage))