Skip to content

Commit

Permalink
fix issue where user specified interceptors where being overridden by…
Browse files Browse the repository at this point in the history
… default interceptors
  • Loading branch information
raghusammeta committed Sep 30, 2024
1 parent c07b4b3 commit 253d4f5
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -75,13 +75,13 @@ public static OkHttpClient.Builder create(@Nonnull BaseBearerTokenAuthentication
*/
@Nonnull
public static OkHttpClient.Builder create(@Nonnull GraphClientOption graphClientOption, @Nonnull Interceptor... interceptors) {
final OkHttpClient.Builder builder = create(graphClientOption);
final OkHttpClient.Builder builder = KiotaClientFactory.create(interceptors);
//Skip adding interceptor if that class of interceptor already exist.
final List<String> appliedInterceptors = new ArrayList<>();
for(Interceptor interceptor: builder.interceptors()) {
appliedInterceptors.add(interceptor.getClass().toString());
}
for (Interceptor interceptor:interceptors){
for (Interceptor interceptor:createDefaultGraphInterceptors(graphClientOption)){
if(appliedInterceptors.contains(interceptor.getClass().toString())) {
continue;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,15 @@
import com.microsoft.kiota.http.middleware.RedirectHandler;
import com.microsoft.kiota.http.middleware.RetryHandler;

import com.microsoft.kiota.http.middleware.options.RetryHandlerOption;
import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import org.jetbrains.annotations.NotNull;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;

Expand All @@ -30,22 +34,35 @@ void telemetryHandlerDefaultTests() throws IOException {

assertNotNull(response);
assertTrue(response.request().header(CoreConstants.Headers.SDK_VERSION_HEADER_NAME).contains(expectedCore));
assertTrue(!response.request().header(CoreConstants.Headers.SDK_VERSION_HEADER_NAME).contains(CoreConstants.Headers.ANDROID_VERSION_PREFIX)); // Android version is not going to be present on unit tests running on java platform
assertTrue(response.request().header(CoreConstants.Headers.SDK_VERSION_HEADER_NAME).contains(defaultSDKVersion));
assertTrue(!response.request().header(CoreConstants.Headers.SDK_VERSION_HEADER_NAME).contains(
CoreConstants.Headers.ANDROID_VERSION_PREFIX)); // Android version is not going to be present on unit tests running on java platform
assertTrue(
response.request().header(CoreConstants.Headers.SDK_VERSION_HEADER_NAME).contains(defaultSDKVersion));
}

@Test
void arrayInterceptorsTest() throws IOException {
final String expectedCore = CoreConstants.Headers.GRAPH_VERSION_PREFIX + "/" + CoreConstants.Headers.VERSION;

final Interceptor[] interceptors = {new GraphTelemetryHandler(), new RetryHandler(), new RedirectHandler()};
final Interceptor[] interceptors = {new GraphTelemetryHandler(), getDisabledRetryHandler(),
new RedirectHandler()};
final OkHttpClient client = GraphClientFactory.create(interceptors).build();
final Request request = new Request.Builder().url("https://graph.microsoft.com/v1.0/users/").build();
final Response response = client.newCall(request).execute();

for (Interceptor clientInterceptor : client.interceptors()) {
if (clientInterceptor instanceof RetryHandler) {
RetryHandlerOption retryOptions = ((RetryHandler) clientInterceptor).getRetryOptions();
Assertions.assertEquals(0, retryOptions.maxRetries());
Assertions.assertEquals(0, retryOptions.delay());

}
}

assertNotNull(response);
assertTrue(response.request().header(CoreConstants.Headers.SDK_VERSION_HEADER_NAME).contains(expectedCore));
assertTrue(response.request().header(CoreConstants.Headers.SDK_VERSION_HEADER_NAME).contains(defaultSDKVersion));
assertTrue(
response.request().header(CoreConstants.Headers.SDK_VERSION_HEADER_NAME).contains(defaultSDKVersion));
}

@Test
Expand All @@ -59,7 +76,8 @@ void arrayInterceptorEmptyTest() throws IOException {

assertNotNull(response);
assertTrue(response.request().header(CoreConstants.Headers.SDK_VERSION_HEADER_NAME).contains(expectedCore));
assertTrue(response.request().header(CoreConstants.Headers.SDK_VERSION_HEADER_NAME).contains(defaultSDKVersion));
assertTrue(
response.request().header(CoreConstants.Headers.SDK_VERSION_HEADER_NAME).contains(defaultSDKVersion));
}

@Test
Expand All @@ -76,7 +94,7 @@ void testClientOptions() throws IOException {
graphClientOption.setGraphServiceTargetVersion(serviceLibVer);

final String expectedCoreVer =
CoreConstants.Headers.GRAPH_VERSION_PREFIX + "/" +coreLibVer;
CoreConstants.Headers.GRAPH_VERSION_PREFIX + "/" + coreLibVer;
final String expectedClientEndpoint =
CoreConstants.Headers.JAVA_VERSION_PREFIX + "-" + serviceLibVer + "/" + clientLibVer;

Expand All @@ -85,9 +103,17 @@ void testClientOptions() throws IOException {
final Response response = client.newCall(request).execute();

assertTrue(response.request().header(CoreConstants.Headers.SDK_VERSION_HEADER_NAME).contains(expectedCoreVer));
assertTrue(response.request().header(CoreConstants.Headers.SDK_VERSION_HEADER_NAME).contains(expectedClientEndpoint));
assertTrue(
response.request().header(CoreConstants.Headers.SDK_VERSION_HEADER_NAME).contains(expectedClientEndpoint));
assertTrue(response.request().header(CoreConstants.Headers.CLIENT_REQUEST_ID).contains(requestId));
}

private static @NotNull RetryHandler getDisabledRetryHandler() {
RetryHandlerOption retryHandlerOption = new RetryHandlerOption(
(delay, executionCount, request, response) -> false, 0, 0);
RetryHandler retryHandler = new RetryHandler(retryHandlerOption);
return retryHandler;
}
}


0 comments on commit 253d4f5

Please sign in to comment.