diff --git a/extensions/okhttp/build.gradle b/extensions/okhttp/build.gradle index 220522b9d9..a44e62e0e5 100644 --- a/extensions/okhttp/build.gradle +++ b/extensions/okhttp/build.gradle @@ -37,6 +37,7 @@ dependencies { compileOnly 'org.checkerframework:checker-qual:' + checkerframeworkVersion compileOnly 'org.jetbrains.kotlin:kotlin-annotations-jvm:' + kotlinAnnotationsVersion testImplementation project(modulePrefix + 'testutils') + testImplementation 'com.squareup.okhttp3:mockwebserver:' + mockWebServerVersion testImplementation 'org.robolectric:robolectric:' + robolectricVersion // Do not update to 3.13.X or later until minSdkVersion is increased to 21: // https://cashapp.github.io/2019-02-05/okhttp-3-13-requires-android-5 diff --git a/extensions/okhttp/src/test/java/com/google/android/exoplayer2/ext/okhttp/OkHttpDataSourceTest.java b/extensions/okhttp/src/test/java/com/google/android/exoplayer2/ext/okhttp/OkHttpDataSourceTest.java index d39e836869..73e9909a8d 100644 --- a/extensions/okhttp/src/test/java/com/google/android/exoplayer2/ext/okhttp/OkHttpDataSourceTest.java +++ b/extensions/okhttp/src/test/java/com/google/android/exoplayer2/ext/okhttp/OkHttpDataSourceTest.java @@ -17,28 +17,21 @@ package com.google.android.exoplayer2.ext.okhttp; import static com.google.common.truth.Truth.assertThat; +import static java.util.concurrent.TimeUnit.SECONDS; import static org.junit.Assert.assertThrows; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; import androidx.test.ext.junit.runners.AndroidJUnit4; -import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.upstream.DataSpec; import com.google.android.exoplayer2.upstream.HttpDataSource; -import java.io.IOException; +import com.google.common.base.Charsets; import java.util.HashMap; import java.util.Map; -import okhttp3.Call; -import okhttp3.MediaType; -import okhttp3.Protocol; -import okhttp3.Request; -import okhttp3.Response; -import okhttp3.ResponseBody; +import okhttp3.Headers; +import okhttp3.OkHttpClient; +import okhttp3.mockwebserver.MockResponse; +import okhttp3.mockwebserver.MockWebServer; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.ArgumentMatchers; -import org.mockito.Mockito; /** Unit tests for {@link OkHttpDataSource}. */ @RunWith(AndroidJUnit4.class) @@ -50,114 +43,76 @@ public class OkHttpDataSourceTest { * below. Values wrapped in '*' are the ones that should be set in the connection request. * *
{@code - * +-----------------------+---+-----+-----+-----+-----+-----+ - * | | Header Key | - * +-----------------------+---+-----+-----+-----+-----+-----+ - * | Location | 0 | 1 | 2 | 3 | 4 | 5 | - * +-----------------------+---+-----+-----+-----+-----+-----+ - * | Default |*Y*| Y | Y | | | | - * | OkHttpDataSource | | *Y* | Y | Y | *Y* | | - * | DataSpec | | | *Y* | *Y* | | *Y* | - * +-----------------------+---+-----+-----+-----+-----+-----+ + * +---------------+-----+-----+-----+-----+-----+-----+-----+ + * | | Header Key | + * +---------------+-----+-----+-----+-----+-----+-----+-----+ + * | Location | 0 | 1 | 2 | 3 | 4 | 5 | 6 | + * +---------------+-----+-----+-----+-----+-----+-----+-----+ + * | Constructor | *Y* | Y | Y | | Y | | | + * | Setter | | *Y* | Y | Y | | *Y* | | + * | DataSpec | | | *Y* | *Y* | *Y* | | *Y* | + * +---------------+-----+-----+-----+-----+-----+-----+-----+ * }*/ @Test - public void open_setsCorrectHeaders() throws HttpDataSource.HttpDataSourceException { - String defaultValue = "Default"; - String okHttpDataSourceValue = "OkHttpDataSource"; - String dataSpecValue = "DataSpec"; + public void open_setsCorrectHeaders() throws Exception { + MockWebServer mockWebServer = new MockWebServer(); + mockWebServer.enqueue(new MockResponse()); - // 1. Default properties on OkHttpDataSource - HttpDataSource.RequestProperties defaultRequestProperties = - new HttpDataSource.RequestProperties(); - defaultRequestProperties.set("0", defaultValue); - defaultRequestProperties.set("1", defaultValue); - defaultRequestProperties.set("2", defaultValue); - - Call.Factory mockCallFactory = mock(Call.Factory.class); - OkHttpDataSource okHttpDataSource = + String propertyFromConstructor = "fromConstructor"; + HttpDataSource.RequestProperties constructorProperties = new HttpDataSource.RequestProperties(); + constructorProperties.set("0", propertyFromConstructor); + constructorProperties.set("1", propertyFromConstructor); + constructorProperties.set("2", propertyFromConstructor); + constructorProperties.set("4", propertyFromConstructor); + OkHttpDataSource dataSource = new OkHttpDataSource( - mockCallFactory, "testAgent", /* cacheControl= */ null, defaultRequestProperties); + new OkHttpClient(), "testAgent", /* cacheControl= */ null, constructorProperties); - // 2. Additional properties set with setRequestProperty(). - okHttpDataSource.setRequestProperty("1", okHttpDataSourceValue); - okHttpDataSource.setRequestProperty("2", okHttpDataSourceValue); - okHttpDataSource.setRequestProperty("3", okHttpDataSourceValue); - okHttpDataSource.setRequestProperty("4", okHttpDataSourceValue); + String propertyFromSetter = "fromSetter"; + dataSource.setRequestProperty("1", propertyFromSetter); + dataSource.setRequestProperty("2", propertyFromSetter); + dataSource.setRequestProperty("3", propertyFromSetter); + dataSource.setRequestProperty("5", propertyFromSetter); - // 3. DataSpec properties + String propertyFromDataSpec = "fromDataSpec"; Map