diff --git a/clients/java/signalr/src/main/java/com/microsoft/aspnet/signalr/HubConnection.java b/clients/java/signalr/src/main/java/com/microsoft/aspnet/signalr/HubConnection.java index 9c6f72fae4..97dcc5d412 100644 --- a/clients/java/signalr/src/main/java/com/microsoft/aspnet/signalr/HubConnection.java +++ b/clients/java/signalr/src/main/java/com/microsoft/aspnet/signalr/HubConnection.java @@ -137,6 +137,9 @@ public class HubConnection { request.setHeaders(this.headers); return httpClient.post(Negotiate.resolveNegotiateUrl(url), request).thenCompose((response) -> { + if (response.getStatusCode() != 200) { + throw new RuntimeException(String.format("Unexpected status code returned from negotiate: %d %s.", response.getStatusCode(), response.getStatusText())); + } NegotiateResponse negotiateResponse; try { negotiateResponse = new NegotiateResponse(response.getContent()); diff --git a/clients/java/signalr/src/test/java/com/microsoft/aspnet/signalr/HubConnectionTest.java b/clients/java/signalr/src/test/java/com/microsoft/aspnet/signalr/HubConnectionTest.java index 0813066e46..f9f1dfa2c8 100644 --- a/clients/java/signalr/src/test/java/com/microsoft/aspnet/signalr/HubConnectionTest.java +++ b/clients/java/signalr/src/test/java/com/microsoft/aspnet/signalr/HubConnectionTest.java @@ -1064,4 +1064,21 @@ class HubConnectionTest { hubConnection.stop().get(1000, TimeUnit.MILLISECONDS); assertEquals(HubConnectionState.DISCONNECTED, hubConnection.getConnectionState()); } + + @Test + public void non200FromNegotiateThrowsError() { + TestHttpClient client = new TestHttpClient() + .on("POST", "http://example.com/negotiate", + (req) -> CompletableFuture + .completedFuture(new HttpResponse(500, "Internal server error", ""))); + + MockTransport transport = new MockTransport(); + HttpConnectionOptions options = new HttpConnectionOptions(); + options.setTransport(transport); + HubConnection hubConnection = new HubConnectionBuilder().withUrl("http://example.com", options) + .configureHttpClient(client).build(); + + ExecutionException exception = assertThrows(ExecutionException.class, () -> hubConnection.start().get(1000, TimeUnit.MILLISECONDS)); + assertEquals("Unexpected status code returned from negotiate: 500 Internal server error.", exception.getCause().getMessage()); + } } \ No newline at end of file