[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());
|
||||
}
|
||||
|
||||
@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<>();
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue