From 790a976957b73152db8e3e4ada9ebef36dcec4d2 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Thu, 10 Dec 2020 12:41:08 -0500 Subject: [PATCH 1/3] - adds android api version in telemetry handler --- .../graph/httpcore/TelemetryHandler.java | 42 ++++++++++++--- .../graph/httpcore/TelemetryHandlerTest.java | 54 +++++++++---------- 2 files changed, 63 insertions(+), 33 deletions(-) diff --git a/src/main/java/com/microsoft/graph/httpcore/TelemetryHandler.java b/src/main/java/com/microsoft/graph/httpcore/TelemetryHandler.java index 51d3569c5..889b91f68 100644 --- a/src/main/java/com/microsoft/graph/httpcore/TelemetryHandler.java +++ b/src/main/java/com/microsoft/graph/httpcore/TelemetryHandler.java @@ -1,6 +1,7 @@ package com.microsoft.graph.httpcore; import java.io.IOException; +import java.lang.reflect.Field; import com.microsoft.graph.httpcore.middlewareoption.TelemetryOptions; @@ -13,21 +14,23 @@ public class TelemetryHandler implements Interceptor{ public static final String SDK_VERSION = "SdkVersion"; public static final String VERSION = "v1.0.5"; public static final String GRAPH_VERSION_PREFIX = "graph-java-core"; - public static final String JAVA_VERSION_PREFIX = "java"; + public static final String JAVA_VERSION_PREFIX = "java"; + public static final String ANDROID_VERSION_PREFIX = "android"; public static final String CLIENT_REQUEST_ID = "client-request-id"; @Override public Response intercept(Chain chain) throws IOException { - Request request = chain.request(); - Request.Builder telemetryAddedBuilder = request.newBuilder(); + final Request request = chain.request(); + final Request.Builder telemetryAddedBuilder = request.newBuilder(); TelemetryOptions telemetryOptions = request.tag(TelemetryOptions.class); if(telemetryOptions == null) telemetryOptions = new TelemetryOptions(); - String featureUsage = "(featureUsage=" + telemetryOptions.getFeatureUsage() + ")"; - String javaVersion = System.getProperty("java.version"); - String sdkversion_value = GRAPH_VERSION_PREFIX + "/" + VERSION + " " + featureUsage + " " + JAVA_VERSION_PREFIX + "/" + javaVersion; + final String featureUsage = "(featureUsage=" + telemetryOptions.getFeatureUsage() + ")"; + final String javaVersion = System.getProperty("java.version"); + final String androidVersion = getAndroidAPILevel(); + final String sdkversion_value = GRAPH_VERSION_PREFIX + "/" + VERSION + " " + featureUsage + " " + JAVA_VERSION_PREFIX + "/" + javaVersion + " " + ANDROID_VERSION_PREFIX + "/" + androidVersion; telemetryAddedBuilder.addHeader(SDK_VERSION, sdkversion_value); if(request.header(CLIENT_REQUEST_ID) == null) { @@ -37,4 +40,31 @@ public Response intercept(Chain chain) throws IOException { return chain.proceed(telemetryAddedBuilder.build()); } + private String androidAPILevel; + private String getAndroidAPILevel() { + if(androidAPILevel == null) { + androidAPILevel = getAndroidAPILevelInternal(); + } + return androidAPILevel; + } + private String getAndroidAPILevelInternal() { + try { + final Class buildClass = Class.forName("android.os.Build"); + final Class[] subclasses = buildClass.getDeclaredClasses(); + Class versionClass = null; + for(final Class subclass : subclasses) { + if(subclass.getName().endsWith("VERSION")) { + versionClass = subclass; + break; + } + } + final Field sdkVersionField = versionClass.getField("SDK_INT"); + final Object value = sdkVersionField.get(null); + final String valueStr = String.valueOf(value); + return valueStr == null || valueStr == "" ? "0" : valueStr; + } catch (IllegalAccessException | ClassNotFoundException | NoSuchFieldException ex) { + // we're not on android and return "0" to align with java version which returns "0" when running on android + return "0"; + } + } } diff --git a/src/test/java/com/microsoft/graph/httpcore/TelemetryHandlerTest.java b/src/test/java/com/microsoft/graph/httpcore/TelemetryHandlerTest.java index deab260a4..036cc18e4 100644 --- a/src/test/java/com/microsoft/graph/httpcore/TelemetryHandlerTest.java +++ b/src/test/java/com/microsoft/graph/httpcore/TelemetryHandlerTest.java @@ -5,7 +5,6 @@ import java.io.IOException; -import org.junit.Ignore; import org.junit.Test; import okhttp3.Interceptor; @@ -13,60 +12,61 @@ import okhttp3.Request; import okhttp3.Response; -@Ignore public class TelemetryHandlerTest { @Test public void telemetryInitTest() { - TelemetryHandler telemetryHandler = new TelemetryHandler(); + final TelemetryHandler telemetryHandler = new TelemetryHandler(); assertNotNull(telemetryHandler); } - + @Test public void interceptTest() throws IOException { - String expectedHeader = TelemetryHandler.SDK_VERSION + TelemetryHandler.GRAPH_VERSION_PREFIX +"/" + final String expectedHeader = TelemetryHandler.GRAPH_VERSION_PREFIX +"/" +TelemetryHandler.VERSION; - OkHttpClient client = HttpClients.createDefault(new ICoreAuthenticationProvider() { + final OkHttpClient client = HttpClients.createDefault(new ICoreAuthenticationProvider() { @Override public Request authenticateRequest(Request request) { return request; } }); - Request request = new Request.Builder().url("https://graph.microsoft.com/v1.0/users/").build(); - Response response = client.newCall(request).execute(); + final Request request = new Request.Builder().url("https://graph.microsoft.com/v1.0/users/").build(); + final Response response = client.newCall(request).execute(); assertNotNull(response); - assertTrue(response.request().header("SdkVersion").contains(expectedHeader)); + assertTrue(response.request().header(TelemetryHandler.SDK_VERSION).contains(expectedHeader)); + assertTrue(response.request().header(TelemetryHandler.SDK_VERSION).contains(TelemetryHandler.ANDROID_VERSION_PREFIX)); + assertTrue(response.request().header(TelemetryHandler.SDK_VERSION).contains(TelemetryHandler.JAVA_VERSION_PREFIX)); } - + @Test public void arrayInterceptorsTest() throws IOException { - - AuthenticationHandler authenticationHandler = new AuthenticationHandler(new ICoreAuthenticationProvider() { - + + final AuthenticationHandler authenticationHandler = new AuthenticationHandler(new ICoreAuthenticationProvider() { + @Override public Request authenticateRequest(Request request) { return request; } }); - Interceptor[] interceptors = {new RetryHandler(), new RedirectHandler(), authenticationHandler}; - OkHttpClient client = HttpClients.createFromInterceptors(interceptors); - String expectedHeader = TelemetryHandler.SDK_VERSION + TelemetryHandler.GRAPH_VERSION_PREFIX +"/" + final Interceptor[] interceptors = {new RetryHandler(), new RedirectHandler(), authenticationHandler}; + final OkHttpClient client = HttpClients.createFromInterceptors(interceptors); + final String expectedHeader = TelemetryHandler.GRAPH_VERSION_PREFIX +"/" +TelemetryHandler.VERSION; - Request request = new Request.Builder().url("https://graph.microsoft.com/v1.0/users/").build(); - Response response = client.newCall(request).execute(); + final Request request = new Request.Builder().url("https://graph.microsoft.com/v1.0/users/").build(); + final Response response = client.newCall(request).execute(); assertNotNull(response); - assertTrue(response.request().header("SdkVersion").contains(expectedHeader)); + assertTrue(response.request().header(TelemetryHandler.SDK_VERSION).contains(expectedHeader)); } - + @Test public void arrayInterceptorEmptyTest() throws IOException { - Interceptor[] interceptors = null; - OkHttpClient client = HttpClients.createFromInterceptors(interceptors); - String expectedHeader = TelemetryHandler.SDK_VERSION + TelemetryHandler.GRAPH_VERSION_PREFIX +"/" + final Interceptor[] interceptors = null; + final OkHttpClient client = HttpClients.createFromInterceptors(interceptors); + final String expectedHeader = TelemetryHandler.GRAPH_VERSION_PREFIX +"/" +TelemetryHandler.VERSION; - Request request = new Request.Builder().url("https://graph.microsoft.com/v1.0/users/").build(); - Response response = client.newCall(request).execute(); + final Request request = new Request.Builder().url("https://graph.microsoft.com/v1.0/users/").build(); + final Response response = client.newCall(request).execute(); assertNotNull(response); - assertTrue(response.request().header("SdkVersion").contains(expectedHeader)); + assertTrue(response.request().header(TelemetryHandler.SDK_VERSION).contains(expectedHeader)); } - + } From 61ae79b2c1add59ac6980f660b0e52a8527a134e Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Thu, 10 Dec 2020 12:43:20 -0500 Subject: [PATCH 2/3] - bumps patch --- gradle.properties | 2 +- pom.xml | 2 +- readme.md | 4 ++-- .../java/com/microsoft/graph/httpcore/TelemetryHandler.java | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/gradle.properties b/gradle.properties index 74406c825..17a8f7ac8 100644 --- a/gradle.properties +++ b/gradle.properties @@ -25,7 +25,7 @@ mavenGroupId = com.microsoft.graph mavenArtifactId = microsoft-graph-core mavenMajorVersion = 1 mavenMinorVersion = 0 -mavenPatchVersion = 5 +mavenPatchVersion = 6 mavenArtifactSuffix = nightliesUrl = http://dl.bintray.com/MicrosoftGraph/Maven diff --git a/pom.xml b/pom.xml index b86d28dbe..dc77c1858 100644 --- a/pom.xml +++ b/pom.xml @@ -8,7 +8,7 @@ com.microsoft.graph microsoft-graph-core - 1.0.5 + 1.0.6 pom diff --git a/readme.md b/readme.md index a706ea649..b280482d9 100644 --- a/readme.md +++ b/readme.md @@ -20,7 +20,7 @@ repositories { dependencies { // Include the sdk as a dependency - implementation 'com.microsoft.graph:microsoft-graph-core:1.0.5' + implementation 'com.microsoft.graph:microsoft-graph-core:1.0.6' } ``` @@ -32,7 +32,7 @@ Add the dependency in `dependencies` in pom.xml com.microsoft.graph microsoft-graph-core - 1.0.5 + 1.0.6 ``` diff --git a/src/main/java/com/microsoft/graph/httpcore/TelemetryHandler.java b/src/main/java/com/microsoft/graph/httpcore/TelemetryHandler.java index 889b91f68..3729b5256 100644 --- a/src/main/java/com/microsoft/graph/httpcore/TelemetryHandler.java +++ b/src/main/java/com/microsoft/graph/httpcore/TelemetryHandler.java @@ -12,7 +12,7 @@ public class TelemetryHandler implements Interceptor{ public static final String SDK_VERSION = "SdkVersion"; - public static final String VERSION = "v1.0.5"; + public static final String VERSION = "v1.0.6"; public static final String GRAPH_VERSION_PREFIX = "graph-java-core"; public static final String JAVA_VERSION_PREFIX = "java"; public static final String ANDROID_VERSION_PREFIX = "android"; From 49a107bc78922f8b05723dd18cf75bf80f4ae248 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Mon, 14 Dec 2020 10:31:26 -0500 Subject: [PATCH 3/3] - space/tabs fix to make @zengin happy :) --- .../graph/httpcore/TelemetryHandler.java | 42 ++++---- .../graph/httpcore/TelemetryHandlerTest.java | 100 +++++++++--------- 2 files changed, 71 insertions(+), 71 deletions(-) diff --git a/src/main/java/com/microsoft/graph/httpcore/TelemetryHandler.java b/src/main/java/com/microsoft/graph/httpcore/TelemetryHandler.java index 3729b5256..b5da60c3f 100644 --- a/src/main/java/com/microsoft/graph/httpcore/TelemetryHandler.java +++ b/src/main/java/com/microsoft/graph/httpcore/TelemetryHandler.java @@ -11,34 +11,34 @@ public class TelemetryHandler implements Interceptor{ - public static final String SDK_VERSION = "SdkVersion"; - public static final String VERSION = "v1.0.6"; - public static final String GRAPH_VERSION_PREFIX = "graph-java-core"; + public static final String SDK_VERSION = "SdkVersion"; + public static final String VERSION = "v1.0.6"; + public static final String GRAPH_VERSION_PREFIX = "graph-java-core"; public static final String JAVA_VERSION_PREFIX = "java"; public static final String ANDROID_VERSION_PREFIX = "android"; - public static final String CLIENT_REQUEST_ID = "client-request-id"; + public static final String CLIENT_REQUEST_ID = "client-request-id"; - @Override - public Response intercept(Chain chain) throws IOException { - final Request request = chain.request(); - final Request.Builder telemetryAddedBuilder = request.newBuilder(); + @Override + public Response intercept(Chain chain) throws IOException { + final Request request = chain.request(); + final Request.Builder telemetryAddedBuilder = request.newBuilder(); - TelemetryOptions telemetryOptions = request.tag(TelemetryOptions.class); - if(telemetryOptions == null) - telemetryOptions = new TelemetryOptions(); + TelemetryOptions telemetryOptions = request.tag(TelemetryOptions.class); + if(telemetryOptions == null) + telemetryOptions = new TelemetryOptions(); - final String featureUsage = "(featureUsage=" + telemetryOptions.getFeatureUsage() + ")"; - final String javaVersion = System.getProperty("java.version"); - final String androidVersion = getAndroidAPILevel(); - final String sdkversion_value = GRAPH_VERSION_PREFIX + "/" + VERSION + " " + featureUsage + " " + JAVA_VERSION_PREFIX + "/" + javaVersion + " " + ANDROID_VERSION_PREFIX + "/" + androidVersion; - telemetryAddedBuilder.addHeader(SDK_VERSION, sdkversion_value); + final String featureUsage = "(featureUsage=" + telemetryOptions.getFeatureUsage() + ")"; + final String javaVersion = System.getProperty("java.version"); + final String androidVersion = getAndroidAPILevel(); + final String sdkversion_value = GRAPH_VERSION_PREFIX + "/" + VERSION + " " + featureUsage + " " + JAVA_VERSION_PREFIX + "/" + javaVersion + " " + ANDROID_VERSION_PREFIX + "/" + androidVersion; + telemetryAddedBuilder.addHeader(SDK_VERSION, sdkversion_value); - if(request.header(CLIENT_REQUEST_ID) == null) { - telemetryAddedBuilder.addHeader(CLIENT_REQUEST_ID, telemetryOptions.getClientRequestId()); - } + if(request.header(CLIENT_REQUEST_ID) == null) { + telemetryAddedBuilder.addHeader(CLIENT_REQUEST_ID, telemetryOptions.getClientRequestId()); + } - return chain.proceed(telemetryAddedBuilder.build()); - } + return chain.proceed(telemetryAddedBuilder.build()); + } private String androidAPILevel; private String getAndroidAPILevel() { diff --git a/src/test/java/com/microsoft/graph/httpcore/TelemetryHandlerTest.java b/src/test/java/com/microsoft/graph/httpcore/TelemetryHandlerTest.java index 036cc18e4..8fcffc3df 100644 --- a/src/test/java/com/microsoft/graph/httpcore/TelemetryHandlerTest.java +++ b/src/test/java/com/microsoft/graph/httpcore/TelemetryHandlerTest.java @@ -13,60 +13,60 @@ import okhttp3.Response; public class TelemetryHandlerTest { - @Test - public void telemetryInitTest() { - final TelemetryHandler telemetryHandler = new TelemetryHandler(); - assertNotNull(telemetryHandler); - } + @Test + public void telemetryInitTest() { + final TelemetryHandler telemetryHandler = new TelemetryHandler(); + assertNotNull(telemetryHandler); + } - @Test - public void interceptTest() throws IOException { - final String expectedHeader = TelemetryHandler.GRAPH_VERSION_PREFIX +"/" - +TelemetryHandler.VERSION; - final OkHttpClient client = HttpClients.createDefault(new ICoreAuthenticationProvider() { - @Override - public Request authenticateRequest(Request request) { - return request; - } - }); - final Request request = new Request.Builder().url("https://graph.microsoft.com/v1.0/users/").build(); - final Response response = client.newCall(request).execute(); - assertNotNull(response); - assertTrue(response.request().header(TelemetryHandler.SDK_VERSION).contains(expectedHeader)); - assertTrue(response.request().header(TelemetryHandler.SDK_VERSION).contains(TelemetryHandler.ANDROID_VERSION_PREFIX)); - assertTrue(response.request().header(TelemetryHandler.SDK_VERSION).contains(TelemetryHandler.JAVA_VERSION_PREFIX)); - } + @Test + public void interceptTest() throws IOException { + final String expectedHeader = TelemetryHandler.GRAPH_VERSION_PREFIX +"/" + +TelemetryHandler.VERSION; + final OkHttpClient client = HttpClients.createDefault(new ICoreAuthenticationProvider() { + @Override + public Request authenticateRequest(Request request) { + return request; + } + }); + final Request request = new Request.Builder().url("https://graph.microsoft.com/v1.0/users/").build(); + final Response response = client.newCall(request).execute(); + assertNotNull(response); + assertTrue(response.request().header(TelemetryHandler.SDK_VERSION).contains(expectedHeader)); + assertTrue(response.request().header(TelemetryHandler.SDK_VERSION).contains(TelemetryHandler.ANDROID_VERSION_PREFIX)); + assertTrue(response.request().header(TelemetryHandler.SDK_VERSION).contains(TelemetryHandler.JAVA_VERSION_PREFIX)); + } - @Test - public void arrayInterceptorsTest() throws IOException { + @Test + public void arrayInterceptorsTest() throws IOException { - final AuthenticationHandler authenticationHandler = new AuthenticationHandler(new ICoreAuthenticationProvider() { + final AuthenticationHandler authenticationHandler = new AuthenticationHandler(new ICoreAuthenticationProvider() { - @Override - public Request authenticateRequest(Request request) { - return request; - } - }); - final Interceptor[] interceptors = {new RetryHandler(), new RedirectHandler(), authenticationHandler}; - final OkHttpClient client = HttpClients.createFromInterceptors(interceptors); - final String expectedHeader = TelemetryHandler.GRAPH_VERSION_PREFIX +"/" - +TelemetryHandler.VERSION; - final Request request = new Request.Builder().url("https://graph.microsoft.com/v1.0/users/").build(); - final Response response = client.newCall(request).execute(); - assertNotNull(response); - assertTrue(response.request().header(TelemetryHandler.SDK_VERSION).contains(expectedHeader)); - } + @Override + public Request authenticateRequest(Request request) { + return request; + } + }); + final Interceptor[] interceptors = {new RetryHandler(), new RedirectHandler(), authenticationHandler}; + final OkHttpClient client = HttpClients.createFromInterceptors(interceptors); + final String expectedHeader = TelemetryHandler.GRAPH_VERSION_PREFIX +"/" + +TelemetryHandler.VERSION; + final Request request = new Request.Builder().url("https://graph.microsoft.com/v1.0/users/").build(); + final Response response = client.newCall(request).execute(); + assertNotNull(response); + assertTrue(response.request().header(TelemetryHandler.SDK_VERSION).contains(expectedHeader)); + } - @Test - public void arrayInterceptorEmptyTest() throws IOException { - final Interceptor[] interceptors = null; - final OkHttpClient client = HttpClients.createFromInterceptors(interceptors); - final String expectedHeader = TelemetryHandler.GRAPH_VERSION_PREFIX +"/" - +TelemetryHandler.VERSION; - final Request request = new Request.Builder().url("https://graph.microsoft.com/v1.0/users/").build(); - final Response response = client.newCall(request).execute(); - assertNotNull(response); - assertTrue(response.request().header(TelemetryHandler.SDK_VERSION).contains(expectedHeader)); - } + @Test + public void arrayInterceptorEmptyTest() throws IOException { + final Interceptor[] interceptors = null; + final OkHttpClient client = HttpClients.createFromInterceptors(interceptors); + final String expectedHeader = TelemetryHandler.GRAPH_VERSION_PREFIX +"/" + +TelemetryHandler.VERSION; + final Request request = new Request.Builder().url("https://graph.microsoft.com/v1.0/users/").build(); + final Response response = client.newCall(request).execute(); + assertNotNull(response); + assertTrue(response.request().header(TelemetryHandler.SDK_VERSION).contains(expectedHeader)); + } }