[Java] Test accessTokenProvider usage (#23751)
This commit is contained in:
parent
bbc116254a
commit
c202344d27
|
|
@ -2118,6 +2118,37 @@ class HubConnectionTest {
|
||||||
assertEquals("Bearer secretToken", token.get());
|
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
|
@Test
|
||||||
public void accessTokenProviderIsOverriddenFromRedirectNegotiate() {
|
public void accessTokenProviderIsOverriddenFromRedirectNegotiate() {
|
||||||
AtomicReference<String> token = new AtomicReference<>();
|
AtomicReference<String> token = new AtomicReference<>();
|
||||||
|
|
|
||||||
|
|
@ -263,6 +263,42 @@ public class LongPollingTransportTest {
|
||||||
close.onComplete();
|
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
|
@Test
|
||||||
public void After204StopDoesNotTriggerOnClose() {
|
public void After204StopDoesNotTriggerOnClose() {
|
||||||
AtomicBoolean firstPoll = new AtomicBoolean(true);
|
AtomicBoolean firstPoll = new AtomicBoolean(true);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue