diff --git a/CHANGELOG.md b/CHANGELOG.md index 630b8583..7093b89b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,7 @@ ## Unreleased +* Updating to latest version of OkHttp3 ([3.9.0](https://github.com/square/okhttp/blob/master/CHANGELOG.md#version-390)) + ## 2.14.1 (July 27, 2017) * Switch to an internal implementation of `isEmptyString` instead of Android TextUtils. diff --git a/pom.xml b/pom.xml index 099a66b0..d4c90a1b 100644 --- a/pom.xml +++ b/pom.xml @@ -20,12 +20,12 @@ com.squareup.okhttp3 okhttp - 3.0.1 + 3.9.0 com.squareup.okhttp3 mockwebserver - 3.0.1 + 3.9.0 test diff --git a/test/com/amplitude/api/AmplitudeClientTest.java b/test/com/amplitude/api/AmplitudeClientTest.java index 21ad5093..07a1c7e9 100644 --- a/test/com/amplitude/api/AmplitudeClientTest.java +++ b/test/com/amplitude/api/AmplitudeClientTest.java @@ -10,16 +10,23 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.Matchers; +import org.powermock.api.mockito.PowerMockito; +import org.powermock.core.classloader.annotations.PrepareForTest; import org.robolectric.Robolectric; import org.robolectric.RobolectricTestRunner; import org.robolectric.Shadows; import org.robolectric.annotation.Config; import org.robolectric.shadows.ShadowLooper; +import java.io.IOException; import java.util.Arrays; import java.util.List; import java.util.UUID; +import okhttp3.Call; +import okhttp3.OkHttpClient; +import okhttp3.Request; import okhttp3.mockwebserver.MockResponse; import okhttp3.mockwebserver.RecordedRequest; @@ -1519,4 +1526,33 @@ public void testSendNullEvents() throws JSONException { assertEquals(events.length(), 1); assertEquals(events.optJSONObject(0).optString("event_type"), "test event"); } + + @Test + @PrepareForTest(OkHttpClient.class) + public void testHandleUploadExceptions() throws Exception { + ShadowLooper logLooper = Shadows.shadowOf(amplitude.logThread.getLooper()); + ShadowLooper httpLooper = Shadows.shadowOf(amplitude.httpThread.getLooper()); + IOException error = new IOException("test IO Exception"); + + // mock out client + OkHttpClient oldClient = amplitude.httpClient; + OkHttpClient mockClient = PowerMockito.mock(OkHttpClient.class); + + // need to have mock client return mock call that throws exception + Call mockCall = PowerMockito.mock(Call.class); + PowerMockito.when(mockCall.execute()).thenThrow(error); + PowerMockito.when(mockClient.newCall(Matchers.any(Request.class))).thenReturn(mockCall); + + // attach mock client to amplitude + amplitude.httpClient = mockClient; + amplitude.logEvent("test event"); + logLooper.runToEndOfTasks(); + logLooper.runToEndOfTasks(); + httpLooper.runToEndOfTasks(); + + assertEquals(amplitude.lastError, error); + + // restore old client + amplitude.httpClient = oldClient; + } }