### Question:
AbstractOAuth2TokenService implements OAuth2TokenService, Cacheable { @Override public OAuth2TokenResponse retrieveAccessTokenViaRefreshToken(@Nonnull URI tokenEndpointUri, @Nonnull ClientCredentials clientCredentials, @Nonnull String refreshToken, String subdomain, boolean disableCacheForRequest) throws OAuth2ServiceException { assertNotNull(tokenEndpointUri, "tokenEndpointUri is required"); assertNotNull(clientCredentials, "clientCredentials is required"); assertNotNull(refreshToken, "refreshToken is required"); Map<String, String> parameters = new RequestParameterBuilder() .withGrantType(GRANT_TYPE_REFRESH_TOKEN) .withRefreshToken(refreshToken) .withClientCredentials(clientCredentials) .buildAsMap(); HttpHeaders headers = HttpHeadersFactory.createWithoutAuthorizationHeader(); return getOAuth2TokenResponse(tokenEndpointUri, headers, parameters, subdomain, disableCacheForRequest); } AbstractOAuth2TokenService();  AbstractOAuth2TokenService(TokenCacheConfiguration tokenCacheConfiguration);   AbstractOAuth2TokenService(TokenCacheConfiguration tokenCacheConfiguration, Ticker cacheTicker,
			boolean sameThreadCache); @Override void clearCache(); @Override @Nonnull TokenCacheConfiguration getCacheConfiguration(); @Override OAuth2TokenResponse retrieveAccessTokenViaClientCredentialsGrant(@Nonnull URI tokenEndpointUri,
			@Nonnull ClientCredentials clientCredentials,
			@Nullable String subdomain, @Nullable Map<String, String> optionalParameters,
			boolean disableCacheForRequest); @Override OAuth2TokenResponse retrieveAccessTokenViaUserTokenGrant(@Nonnull URI tokenEndpointUri,
			@Nonnull ClientCredentials clientCredentials, @Nonnull String token, @Nullable String subdomain,
			@Nullable Map<String, String> optionalParameters); @Override OAuth2TokenResponse retrieveAccessTokenViaRefreshToken(@Nonnull URI tokenEndpointUri,
			@Nonnull ClientCredentials clientCredentials,
			@Nonnull String refreshToken, String subdomain, boolean disableCacheForRequest); @Override OAuth2TokenResponse retrieveAccessTokenViaPasswordGrant(@Nonnull URI tokenEndpoint,
			@Nonnull ClientCredentials clientCredentials, @Nonnull String username, @Nonnull String password,
			@Nullable String subdomain, @Nullable Map<String, String> optionalParameters,
			boolean disableCacheForRequest); @Override OAuth2TokenResponse retrieveAccessTokenViaJwtBearerTokenGrant(URI tokenEndpoint,
			ClientCredentials clientCredentials, String token, @Nullable String subdomain,
			@Nullable Map<String, String> optionalParameters, boolean disableCacheForRequest); @Override Object getCacheStatistics();  }### Answer:
@Test public void retrieveAccessTokenViaRefreshToken_twoDistinctRequests_onlyTwoRequestCalls() throws OAuth2ServiceException { retrieveAccessTokenViaRefreshToken("refreshToken"); retrieveAccessTokenViaRefreshToken("another refreshToken"); retrieveAccessTokenViaRefreshToken("refreshToken"); assertThat(cut.tokenRequestCallCount).isEqualTo(2); }
@Test public void requestAccessToken_differentSubdomain_requestsFreshToken() throws OAuth2ServiceException { retrieveAccessTokenViaRefreshToken("token", "subdomain1"); retrieveAccessTokenViaRefreshToken("token", "subdomain2"); assertThat(cut.tokenRequestCallCount).isEqualTo(2); }