Commit 0a3542e5 by christosts Committed by Ian Baker

Add contract test for CronetDataSource

PiperOrigin-RevId: 353290124
parent abccbcf2
...@@ -13,12 +13,25 @@ ...@@ -13,12 +13,25 @@
// limitations under the License. // limitations under the License.
apply from: "$gradle.ext.exoplayerSettingsDir/common_library_config.gradle" apply from: "$gradle.ext.exoplayerSettingsDir/common_library_config.gradle"
android {
defaultConfig {
multiDexEnabled true
}
}
dependencies { dependencies {
api "com.google.android.gms:play-services-cronet:17.0.0" api "com.google.android.gms:play-services-cronet:17.0.0"
implementation project(modulePrefix + 'library-core') implementation project(modulePrefix + 'library-core')
implementation 'androidx.annotation:annotation:' + androidxAnnotationVersion implementation 'androidx.annotation:annotation:' + androidxAnnotationVersion
compileOnly 'org.checkerframework:checker-qual:' + checkerframeworkVersion compileOnly 'org.checkerframework:checker-qual:' + checkerframeworkVersion
compileOnly 'org.jetbrains.kotlin:kotlin-annotations-jvm:' + kotlinAnnotationsVersion compileOnly 'org.jetbrains.kotlin:kotlin-annotations-jvm:' + kotlinAnnotationsVersion
androidTestImplementation 'androidx.test:rules:' + androidxTestRulesVersion
androidTestImplementation 'androidx.test:runner:' + androidxTestRunnerVersion
androidTestImplementation 'androidx.multidex:multidex:' + androidxMultidexVersion
// Emulator tests assume that an app-packaged version of cronet is
// available.
androidTestImplementation 'org.chromium.net:cronet-embedded:76.3809.111'
androidTestImplementation(project(modulePrefix + 'testutils'))
testImplementation project(modulePrefix + 'library') testImplementation project(modulePrefix + 'library')
testImplementation project(modulePrefix + 'testutils') testImplementation project(modulePrefix + 'testutils')
testImplementation 'com.squareup.okhttp3:mockwebserver:' + mockWebServerVersion testImplementation 'com.squareup.okhttp3:mockwebserver:' + mockWebServerVersion
......
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2021 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.google.android.exoplayer2.ext.cronet">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-sdk/>
<application
android:allowBackup="false"
android:usesCleartextTraffic="true"
tools:ignore="MissingApplicationIcon,HardcodedDebugMode"/>
<instrumentation
android:targetPackage="com.google.android.exoplayer2.ext.cronet"
android:name="androidx.test.runner.AndroidJUnitRunner"/>
</manifest>
/*
* Copyright (C) 2020 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.android.exoplayer2.ext.cronet;
import static com.google.common.truth.Truth.assertThat;
import android.net.Uri;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.google.android.exoplayer2.testutil.DataSourceContractTest;
import com.google.android.exoplayer2.testutil.HttpDataSourceTestEnv;
import com.google.android.exoplayer2.upstream.DataSource;
import com.google.android.exoplayer2.upstream.HttpDataSource;
import com.google.common.collect.ImmutableList;
import java.util.Map;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import org.junit.After;
import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
/** {@link DataSource} contract tests for {@link CronetDataSource}. */
@RunWith(AndroidJUnit4.class)
public class CronetDataSourceContractTest extends DataSourceContractTest {
@Rule public HttpDataSourceTestEnv httpDataSourceTestEnv = new HttpDataSourceTestEnv();
private final ExecutorService executorService = Executors.newSingleThreadExecutor();
@After
public void tearDown() {
executorService.shutdown();
}
@Override
protected DataSource createDataSource() {
CronetEngineWrapper cronetEngineWrapper =
new CronetEngineWrapper(
ApplicationProvider.getApplicationContext(),
/* userAgent= */ "test-agent",
/* preferGMSCoreCronet= */ false);
assertThat(cronetEngineWrapper.getCronetEngineSource())
.isEqualTo(CronetEngineWrapper.SOURCE_NATIVE);
return new CronetDataSource.Factory(cronetEngineWrapper, executorService)
.setFallbackFactory(new InvalidDataSourceFactory())
.createDataSource();
}
@Override
protected ImmutableList<TestResource> getTestResources() {
return httpDataSourceTestEnv.getServedResources();
}
@Override
protected Uri getNotFoundUri() {
return Uri.parse(httpDataSourceTestEnv.getNonexistentUrl());
}
@Override
@Test
@Ignore
public void dataSpecWithLength_readExpectedRange() {}
@Override
@Test
@Ignore
public void dataSpecWithPositionAndLength_readExpectedRange() {}
/**
* An {@link HttpDataSource.Factory} that throws {@link UnsupportedOperationException} on every
* interaction.
*/
private static class InvalidDataSourceFactory implements HttpDataSource.Factory {
@Override
public HttpDataSource createDataSource() {
throw new UnsupportedOperationException();
}
@Override
public HttpDataSource.RequestProperties getDefaultRequestProperties() {
throw new UnsupportedOperationException();
}
@Override
public HttpDataSource.Factory setDefaultRequestProperties(
Map<String, String> defaultRequestProperties) {
throw new UnsupportedOperationException();
}
}
}
...@@ -85,7 +85,6 @@ public class HttpDataSourceTestEnv extends ExternalResource { ...@@ -85,7 +85,6 @@ public class HttpDataSourceTestEnv extends ExternalResource {
createTestResource("range supported", RANGE_SUPPORTED), createTestResource("range supported", RANGE_SUPPORTED),
createTestResource("range supported, length unknown", RANGE_SUPPORTED_LENGTH_UNKNOWN), createTestResource("range supported, length unknown", RANGE_SUPPORTED_LENGTH_UNKNOWN),
createTestResource("range not supported", RANGE_NOT_SUPPORTED), createTestResource("range not supported", RANGE_NOT_SUPPORTED),
createTestResource("range not supported", RANGE_NOT_SUPPORTED),
createTestResource( createTestResource(
"range not supported, length unknown", RANGE_NOT_SUPPORTED_LENGTH_UNKNOWN), "range not supported, length unknown", RANGE_NOT_SUPPORTED_LENGTH_UNKNOWN),
createTestResource("gzip enabled", GZIP_ENABLED), createTestResource("gzip enabled", GZIP_ENABLED),
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment