[Java] Test accessTokenProvider usage (#23751)

This commit is contained in:
Brennan 2020-07-08 19:18:25 -07:00 committed by GitHub
parent bbc116254a
commit c202344d27
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 67 additions and 0 deletions

View File

@ -2118,6 +2118,37 @@ class HubConnectionTest {
assertEquals("Bearer secretToken", token.get());
}
@Test
public void AccessTokenProviderCanProvideDifferentValues() {
AtomicReference<String> token = new AtomicReference<>();
TestHttpClient client = new TestHttpClient()
.on("POST", "http://example.com/negotiate?negotiateVersion=1",
(req) -> {
token.set(req.getHeaders().get("Authorization"));
return Single.just(new HttpResponse(200, "", "{\"connectionId\":\"bVOiRPG8-6YiJ6d7ZcTOVQ\",\""
+ "availableTransports\":[{\"transport\":\"WebSockets\",\"transferFormats\":[\"Text\",\"Binary\"]}]}"));
});
AtomicInteger i = new AtomicInteger(0);
MockTransport transport = new MockTransport(true);
HubConnection hubConnection = HubConnectionBuilder
.create("http://example.com")
.withTransportImplementation(transport)
.withHttpClient(client)
.withAccessTokenProvider(Single.defer(() -> Single.just("secret" + i.getAndIncrement())))
.build();
hubConnection.start().timeout(1, TimeUnit.SECONDS).blockingAwait();
assertEquals(HubConnectionState.CONNECTED, hubConnection.getConnectionState());
hubConnection.stop().timeout(1, TimeUnit.SECONDS).blockingAwait();
assertEquals("Bearer secret0", token.get());
hubConnection.start().timeout(1, TimeUnit.SECONDS).blockingAwait();
assertEquals(HubConnectionState.CONNECTED, hubConnection.getConnectionState());
hubConnection.stop().timeout(1, TimeUnit.SECONDS).blockingAwait();
assertEquals("Bearer secret1", token.get());
}
@Test
public void accessTokenProviderIsOverriddenFromRedirectNegotiate() {
AtomicReference<String> token = new AtomicReference<>();

View File

@ -263,6 +263,42 @@ public class LongPollingTransportTest {
close.onComplete();
}
@Test
public void LongPollingTransportRunsAccessTokenProviderEveryRequest() {
AtomicInteger requestCount = new AtomicInteger();
AtomicReference<String> headerValue = new AtomicReference<>();
CompletableSubject secondGet = CompletableSubject.create();
CompletableSubject close = CompletableSubject.create();
TestHttpClient client = new TestHttpClient()
.on("GET", (req) -> {
if (requestCount.get() == 0) {
requestCount.incrementAndGet();
return Single.just(new HttpResponse(200, "", ""));
}
assertEquals("Bearer TOKEN1", req.getHeaders().get("Authorization"));
secondGet.onComplete();
assertTrue(close.blockingAwait(1, TimeUnit.SECONDS));
return Single.just(new HttpResponse(204, "", ""));
})
.on("POST", (req) -> {
assertFalse(req.getHeaders().isEmpty());
headerValue.set(req.getHeaders().get("Authorization"));
return Single.just(new HttpResponse(200, "", ""));
});
AtomicInteger i = new AtomicInteger(0);
Map<String, String> headers = new HashMap<>();
Single<String> tokenProvider = Single.defer(() -> Single.just("TOKEN" + i.getAndIncrement()));
LongPollingTransport transport = new LongPollingTransport(headers, client, tokenProvider);
transport.setOnClose((error) -> {});
transport.start("http://example.com").timeout(1, TimeUnit.SECONDS).blockingAwait();
secondGet.blockingAwait(1, TimeUnit.SECONDS);
assertTrue(transport.send("TEST").blockingAwait(1, TimeUnit.SECONDS));
assertEquals("Bearer TOKEN2", headerValue.get());
close.onComplete();
}
@Test
public void After204StopDoesNotTriggerOnClose() {
AtomicBoolean firstPoll = new AtomicBoolean(true);