From e91b8465b8307a7dcca26c20b02e61db6c2c51cb Mon Sep 17 00:00:00 2001 From: olly Date: Wed, 10 Mar 2021 17:48:48 +0000 Subject: [PATCH] Make CacheDataSourceContractTest use FakeDataSource for upstream It's more flexible to use FakeDataSource, since it allows to testing different upstream behaviors (e.g., upstream not being able to resolve the content length). PiperOrigin-RevId: 362072899 --- .../upstream/CacheDataSourceContractTest.java | 47 ++++++++++++------- 1 file changed, 31 insertions(+), 16 deletions(-) diff --git a/library/core/src/test/java/com/google/android/exoplayer2/upstream/CacheDataSourceContractTest.java b/library/core/src/test/java/com/google/android/exoplayer2/upstream/CacheDataSourceContractTest.java index fc2f364124..360bc37c59 100644 --- a/library/core/src/test/java/com/google/android/exoplayer2/upstream/CacheDataSourceContractTest.java +++ b/library/core/src/test/java/com/google/android/exoplayer2/upstream/CacheDataSourceContractTest.java @@ -20,6 +20,8 @@ import androidx.annotation.Nullable; 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.FakeDataSet; +import com.google.android.exoplayer2.testutil.FakeDataSource; import com.google.android.exoplayer2.testutil.TestUtil; import com.google.android.exoplayer2.upstream.cache.CacheDataSource; import com.google.android.exoplayer2.upstream.cache.NoOpCacheEvictor; @@ -28,28 +30,36 @@ import com.google.android.exoplayer2.util.Util; import com.google.common.collect.ImmutableList; import java.io.File; import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Paths; import org.junit.Before; -import org.junit.Rule; -import org.junit.rules.TemporaryFolder; import org.junit.runner.RunWith; /** {@link DataSource} contract tests for {@link CacheDataSource}. */ @RunWith(AndroidJUnit4.class) public class CacheDataSourceContractTest extends DataSourceContractTest { - private static final byte[] DATA = TestUtil.buildTestData(20); - - @Rule public final TemporaryFolder tempFolder = new TemporaryFolder(); private Uri simpleUri; - private FileDataSource fileDataSource; + private Uri unknownLengthUri; + private byte[] simpleData; + private byte[] unknownLengthData; + private FakeDataSet fakeDataSet; + + private FakeDataSource upstreamDataSource; @Before public void setUp() throws IOException { - File file = tempFolder.newFile(); - Files.write(Paths.get(file.getAbsolutePath()), DATA); - simpleUri = Uri.fromFile(file); + simpleUri = Uri.parse("test://simple.test"); + unknownLengthUri = Uri.parse("test://unknown-length.test"); + simpleData = TestUtil.buildTestData(/* length= */ 20); + unknownLengthData = TestUtil.buildTestData(/* length= */ 40); + fakeDataSet = + new FakeDataSet() + .newData(simpleUri) + .appendReadData(simpleData) + .endData() + .newData(unknownLengthUri) + .setSimulateUnknownLength(true) + .appendReadData(unknownLengthData) + .endData(); } @Override @@ -58,13 +68,18 @@ public class CacheDataSourceContractTest extends DataSourceContractTest { new TestResource.Builder() .setName("simple") .setUri(simpleUri) - .setExpectedBytes(DATA) + .setExpectedBytes(simpleData) + .build(), + new TestResource.Builder() + .setName("unknown length") + .setUri(unknownLengthUri) + .setExpectedBytes(unknownLengthData) .build()); } @Override protected Uri getNotFoundUri() { - return Uri.fromFile(tempFolder.getRoot().toPath().resolve("nonexistent").toFile()); + return Uri.parse("test://not-found.test"); } @Override @@ -73,13 +88,13 @@ public class CacheDataSourceContractTest extends DataSourceContractTest { Util.createTempDirectory(ApplicationProvider.getApplicationContext(), "ExoPlayerTest"); SimpleCache cache = new SimpleCache(tempFolder, new NoOpCacheEvictor(), TestUtil.getInMemoryDatabaseProvider()); - fileDataSource = new FileDataSource(); - return new CacheDataSource(cache, fileDataSource); + upstreamDataSource = new FakeDataSource(fakeDataSet); + return new CacheDataSource(cache, upstreamDataSource); } @Override @Nullable protected DataSource getTransferListenerDataSource() { - return fileDataSource; + return upstreamDataSource; } }