Skip to content

Commit c202344

Browse files
[Java] Test accessTokenProvider usage (#23751)
1 parent bbc1162 commit c202344

File tree

2 files changed

+67
-0
lines changed

2 files changed

+67
-0
lines changed

src/SignalR/clients/java/signalr/src/test/java/com/microsoft/signalr/HubConnectionTest.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2118,6 +2118,37 @@ public void accessTokenProviderIsUsedForNegotiate() {
21182118
assertEquals("Bearer secretToken", token.get());
21192119
}
21202120

2121+
@Test
2122+
public void AccessTokenProviderCanProvideDifferentValues() {
2123+
AtomicReference<String> token = new AtomicReference<>();
2124+
TestHttpClient client = new TestHttpClient()
2125+
.on("POST", "http://example.com/negotiate?negotiateVersion=1",
2126+
(req) -> {
2127+
token.set(req.getHeaders().get("Authorization"));
2128+
return Single.just(new HttpResponse(200, "", "{\"connectionId\":\"bVOiRPG8-6YiJ6d7ZcTOVQ\",\""
2129+
+ "availableTransports\":[{\"transport\":\"WebSockets\",\"transferFormats\":[\"Text\",\"Binary\"]}]}"));
2130+
});
2131+
2132+
AtomicInteger i = new AtomicInteger(0);
2133+
MockTransport transport = new MockTransport(true);
2134+
HubConnection hubConnection = HubConnectionBuilder
2135+
.create("http://example.com")
2136+
.withTransportImplementation(transport)
2137+
.withHttpClient(client)
2138+
.withAccessTokenProvider(Single.defer(() -> Single.just("secret" + i.getAndIncrement())))
2139+
.build();
2140+
2141+
hubConnection.start().timeout(1, TimeUnit.SECONDS).blockingAwait();
2142+
assertEquals(HubConnectionState.CONNECTED, hubConnection.getConnectionState());
2143+
hubConnection.stop().timeout(1, TimeUnit.SECONDS).blockingAwait();
2144+
assertEquals("Bearer secret0", token.get());
2145+
2146+
hubConnection.start().timeout(1, TimeUnit.SECONDS).blockingAwait();
2147+
assertEquals(HubConnectionState.CONNECTED, hubConnection.getConnectionState());
2148+
hubConnection.stop().timeout(1, TimeUnit.SECONDS).blockingAwait();
2149+
assertEquals("Bearer secret1", token.get());
2150+
}
2151+
21212152
@Test
21222153
public void accessTokenProviderIsOverriddenFromRedirectNegotiate() {
21232154
AtomicReference<String> token = new AtomicReference<>();

src/SignalR/clients/java/signalr/src/test/java/com/microsoft/signalr/LongPollingTransportTest.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,42 @@ public void LongPollingTransportSetsAuthorizationHeader() {
263263
close.onComplete();
264264
}
265265

266+
@Test
267+
public void LongPollingTransportRunsAccessTokenProviderEveryRequest() {
268+
AtomicInteger requestCount = new AtomicInteger();
269+
AtomicReference<String> headerValue = new AtomicReference<>();
270+
CompletableSubject secondGet = CompletableSubject.create();
271+
CompletableSubject close = CompletableSubject.create();
272+
TestHttpClient client = new TestHttpClient()
273+
.on("GET", (req) -> {
274+
if (requestCount.get() == 0) {
275+
requestCount.incrementAndGet();
276+
return Single.just(new HttpResponse(200, "", ""));
277+
}
278+
assertEquals("Bearer TOKEN1", req.getHeaders().get("Authorization"));
279+
secondGet.onComplete();
280+
assertTrue(close.blockingAwait(1, TimeUnit.SECONDS));
281+
return Single.just(new HttpResponse(204, "", ""));
282+
})
283+
.on("POST", (req) -> {
284+
assertFalse(req.getHeaders().isEmpty());
285+
headerValue.set(req.getHeaders().get("Authorization"));
286+
return Single.just(new HttpResponse(200, "", ""));
287+
});
288+
289+
AtomicInteger i = new AtomicInteger(0);
290+
Map<String, String> headers = new HashMap<>();
291+
Single<String> tokenProvider = Single.defer(() -> Single.just("TOKEN" + i.getAndIncrement()));
292+
LongPollingTransport transport = new LongPollingTransport(headers, client, tokenProvider);
293+
transport.setOnClose((error) -> {});
294+
295+
transport.start("http://example.com").timeout(1, TimeUnit.SECONDS).blockingAwait();
296+
secondGet.blockingAwait(1, TimeUnit.SECONDS);
297+
assertTrue(transport.send("TEST").blockingAwait(1, TimeUnit.SECONDS));
298+
assertEquals("Bearer TOKEN2", headerValue.get());
299+
close.onComplete();
300+
}
301+
266302
@Test
267303
public void After204StopDoesNotTriggerOnClose() {
268304
AtomicBoolean firstPoll = new AtomicBoolean(true);

0 commit comments

Comments
 (0)