Update HubConnection url in Java client (#11010)

This commit is contained in:
Mikael Mengistu 2019-06-11 11:00:26 -07:00 committed by GitHub
parent 7e92e4c280
commit eeaba9252f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 98 additions and 1 deletions

View File

@ -29,7 +29,7 @@ public class HubConnection {
private static final List<Class<?>> emptyArray = new ArrayList<>();
private static final int MAX_NEGOTIATE_ATTEMPTS = 100;
private final String baseUrl;
private String baseUrl;
private Transport transport;
private OnReceiveCallBack callback;
private final CallbackMap handlers = new CallbackMap();
@ -288,6 +288,27 @@ public class HubConnection {
return hubConnectionState;
}
// For testing only
String getBaseUrl() {
return this.baseUrl;
}
/**
* Sets a new url for the HubConnection.
* @param url The url to connect to.
*/
public void setBaseUrl(String url) {
if (url == null || url.isEmpty()) {
throw new IllegalArgumentException("The HubConnection url must be a valid url.");
}
if (hubConnectionState != HubConnectionState.DISCONNECTED) {
throw new IllegalStateException("The HubConnection must be in the disconnected state to change the url.");
}
this.baseUrl = url;
}
/**
* Starts a connection to the server.
*

View File

@ -106,6 +106,82 @@ class HubConnectionTest {
assertEquals(HubConnectionState.DISCONNECTED, hubConnection.getConnectionState());
}
@Test
public void hubConnectionUrlCanBeChanged() {
MockTransport mockTransport = new MockTransport();
HubConnection hubConnection = TestUtils.createHubConnection("http://example.com", mockTransport);
hubConnection.start().timeout(1, TimeUnit.SECONDS).blockingAwait();
assertEquals(HubConnectionState.CONNECTED, hubConnection.getConnectionState());
assertEquals("http://example.com", hubConnection.getBaseUrl());
hubConnection.stop().timeout(1, TimeUnit.SECONDS).blockingAwait();
assertEquals(HubConnectionState.DISCONNECTED, hubConnection.getConnectionState());
hubConnection.setBaseUrl("http://newurl.com");
hubConnection.start().timeout(1, TimeUnit.SECONDS).blockingAwait();
assertEquals("http://newurl.com", hubConnection.getBaseUrl());
hubConnection.stop().timeout(1, TimeUnit.SECONDS).blockingAwait();
}
@Test
public void canUpdateUrlInOnClosed() {
MockTransport mockTransport = new MockTransport();
HubConnection hubConnection = TestUtils.createHubConnection("http://example.com", mockTransport);
hubConnection.start().timeout(1, TimeUnit.SECONDS).blockingAwait();
assertEquals(HubConnectionState.CONNECTED, hubConnection.getConnectionState());
assertEquals("http://example.com", hubConnection.getBaseUrl());
hubConnection.onClosed((error) -> {
hubConnection.setBaseUrl("http://newurl.com");
});
hubConnection.stop().timeout(1, TimeUnit.SECONDS).blockingAwait();
assertEquals(HubConnectionState.DISCONNECTED, hubConnection.getConnectionState());
hubConnection.start().timeout(1, TimeUnit.SECONDS).blockingAwait();
assertEquals("http://newurl.com", hubConnection.getBaseUrl());
hubConnection.stop().timeout(1, TimeUnit.SECONDS).blockingAwait();
}
@Test
public void changingUrlWhenConnectedThrows() {
MockTransport mockTransport = new MockTransport();
HubConnection hubConnection = TestUtils.createHubConnection("http://example.com", mockTransport);
hubConnection.start().timeout(1, TimeUnit.SECONDS).blockingAwait();
assertEquals(HubConnectionState.CONNECTED, hubConnection.getConnectionState());
assertEquals("http://example.com", hubConnection.getBaseUrl());
Throwable exception = assertThrows(IllegalStateException.class, () -> hubConnection.setBaseUrl("http://newurl.com"));
assertEquals("The HubConnection must be in the disconnected state to change the url.",exception.getMessage());
}
@Test
public void settingNewUrlToNullThrows() {
MockTransport mockTransport = new MockTransport();
HubConnection hubConnection = TestUtils.createHubConnection("http://example.com", mockTransport);
hubConnection.start().timeout(1, TimeUnit.SECONDS).blockingAwait();
assertEquals(HubConnectionState.CONNECTED, hubConnection.getConnectionState());
assertEquals("http://example.com", hubConnection.getBaseUrl());
Throwable exception = assertThrows(IllegalArgumentException.class, () -> hubConnection.setBaseUrl(null));
assertEquals("The HubConnection url must be a valid url.",exception.getMessage());
}
@Test
public void invalidHandShakeResponse() {
MockTransport mockTransport = new MockTransport(false);