|
21 | 21 | import java.util.HashMap; |
22 | 22 | import java.util.concurrent.CompletableFuture; |
23 | 23 | import java.util.concurrent.ExecutionException; |
| 24 | +import java.util.concurrent.TimeUnit; |
24 | 25 |
|
25 | 26 |
|
26 | 27 | @TestInstance(TestInstance.Lifecycle.PER_CLASS) |
@@ -157,15 +158,31 @@ void testTokenRefreshReasons() throws Exception { |
157 | 158 | assertRefreshedToken(result, "nearlyExpiredToken", CacheRefreshReason.EXPIRED, cca.tokenCache.accessTokens.size()); |
158 | 159 |
|
159 | 160 | //Attempt to retrieve the cached token, however it is within the 5-minute buffer and should be refreshed. |
160 | | - // In this test, it will be replaced with a token that expires in 1 hour |
| 161 | + // In this test, it will be replaced with a token that expires in 1 hour but has a refresh_in time of 1 second |
| 162 | + responseParameters.put("access_token", "refreshInToken"); |
| 163 | + responseParameters.put("expires_in", "3600"); |
| 164 | + responseParameters.put("refresh_in", "1"); |
| 165 | + TestHelper.createTokenRequestMock(httpClientMock, TestHelper.getSuccessfulTokenResponse(responseParameters), 200); |
| 166 | + |
| 167 | + silentParameters = SilentParameters.builder(Collections.singleton("someScopes"), result.account()).build(); |
| 168 | + result = cca.acquireTokenSilently(silentParameters).get(); |
| 169 | + |
| 170 | + assertRefreshedToken(result, "refreshInToken", CacheRefreshReason.EXPIRED, cca.tokenCache.accessTokens.size()); |
| 171 | + |
| 172 | + //Attempt to retrieve the cached token, however it is within the 5-minute buffer and should be refreshed. |
| 173 | + // In this test, it will be replaced with a token that expires in 1 hour (and does not have a valid refresh_in time) |
161 | 174 | responseParameters.put("access_token", "normalToken"); |
162 | 175 | responseParameters.put("expires_in", "3600"); |
| 176 | + responseParameters.put("refresh_in", "0"); |
163 | 177 | TestHelper.createTokenRequestMock(httpClientMock, TestHelper.getSuccessfulTokenResponse(responseParameters), 200); |
164 | 178 |
|
| 179 | + //refresh_in values are in seconds, so we must wait to guarantee it is past the proactive refresh time |
| 180 | + TimeUnit.SECONDS.sleep(2); |
| 181 | + |
165 | 182 | silentParameters = SilentParameters.builder(Collections.singleton("someScopes"), result.account()).build(); |
166 | 183 | result = cca.acquireTokenSilently(silentParameters).get(); |
167 | 184 |
|
168 | | - assertRefreshedToken(result, "normalToken", CacheRefreshReason.EXPIRED, cca.tokenCache.accessTokens.size()); |
| 185 | + assertRefreshedToken(result, "normalToken", CacheRefreshReason.PROACTIVE_REFRESH, cca.tokenCache.accessTokens.size()); |
169 | 186 |
|
170 | 187 | //Force the token to be refreshed |
171 | 188 | responseParameters.put("access_token", "forcedRefreshToken"); |
|
0 commit comments