Commit dd2cba04 by olly Committed by Oliver Woodman

Offline refactor step 1b - Consolidate tests

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=222529260
parent fd2f8eab
...@@ -149,6 +149,7 @@ public class ActionFileTest { ...@@ -149,6 +149,7 @@ public class ActionFileTest {
assertThat(actionFile.load()).isEqualTo(actions); assertThat(actionFile.load()).isEqualTo(actions);
} }
// TODO: Remove this method and add assets for invalid and legacy serialized action files.
private DownloadAction[] loadActions(Object[] values) throws IOException { private DownloadAction[] loadActions(Object[] values) throws IOException {
FileOutputStream fileOutputStream = new FileOutputStream(tempFile); FileOutputStream fileOutputStream = new FileOutputStream(tempFile);
DataOutputStream dataOutputStream = new DataOutputStream(fileOutputStream); DataOutputStream dataOutputStream = new DataOutputStream(fileOutputStream);
......
/*
* Copyright (C) 2017 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.offline;
import static com.google.common.truth.Truth.assertThat;
import android.net.Uri;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.util.Collections;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
// TODO: Merge into DownloadActionTest
/** Unit tests for progressive {@link DownloadAction}s. */
@RunWith(RobolectricTestRunner.class)
public class ProgressiveDownloadActionTest {
private Uri uri1;
private Uri uri2;
@Before
public void setUp() {
uri1 = Uri.parse("http://test1.uri");
uri2 = Uri.parse("http://test2.uri");
}
@Test
public void testDownloadActionIsNotRemoveAction() throws Exception {
DownloadAction action = createDownloadAction(uri1, null);
assertThat(action.isRemoveAction).isFalse();
}
@Test
public void testRemoveActionisRemoveAction() throws Exception {
DownloadAction action2 = createRemoveAction(uri1, null);
assertThat(action2.isRemoveAction).isTrue();
}
@Test
public void testSameUriCacheKeyDifferentAction_IsSameMedia() throws Exception {
DownloadAction action1 = createRemoveAction(uri1, null);
DownloadAction action2 = createDownloadAction(uri1, null);
assertSameMedia(action1, action2);
}
@Test
public void testNullCacheKeyDifferentUriAction_IsNotSameMedia() throws Exception {
DownloadAction action3 = createRemoveAction(uri2, null);
DownloadAction action4 = createDownloadAction(uri1, null);
assertNotSameMedia(action3, action4);
}
@Test
public void testSameCacheKeyDifferentUriAction_IsSameMedia() throws Exception {
DownloadAction action5 = createRemoveAction(uri2, "key");
DownloadAction action6 = createDownloadAction(uri1, "key");
assertSameMedia(action5, action6);
}
@Test
public void testSameUriDifferentCacheKeyAction_IsNotSameMedia() throws Exception {
DownloadAction action7 = createRemoveAction(uri1, "key");
DownloadAction action8 = createDownloadAction(uri1, "key2");
assertNotSameMedia(action7, action8);
}
@Test
public void testSameUriNullCacheKeyAction_IsNotSameMedia() throws Exception {
DownloadAction action1 = createRemoveAction(uri1, "key");
DownloadAction action2 = createDownloadAction(uri1, null);
assertNotSameMedia(action1, action2);
}
@Test
public void testEquals() throws Exception {
DownloadAction action1 = createRemoveAction(uri1, null);
assertThat(action1.equals(action1)).isTrue();
DownloadAction action2 = createRemoveAction(uri1, null);
DownloadAction action3 = createRemoveAction(uri1, null);
assertThat(action2.equals(action3)).isTrue();
DownloadAction action4 = createRemoveAction(uri1, null);
DownloadAction action5 = createDownloadAction(uri1, null);
assertThat(action4.equals(action5)).isFalse();
DownloadAction action6 = createRemoveAction(uri1, null);
DownloadAction action7 = createRemoveAction(uri1, "key");
assertThat(action6.equals(action7)).isFalse();
DownloadAction action8 = createRemoveAction(uri1, "key2");
DownloadAction action9 = createRemoveAction(uri1, "key");
assertThat(action8.equals(action9)).isFalse();
DownloadAction action10 = createRemoveAction(uri1, null);
DownloadAction action11 = createRemoveAction(uri2, null);
assertThat(action10.equals(action11)).isFalse();
}
@Test
public void testSerializerGetType() throws Exception {
DownloadAction action = createDownloadAction(uri1, null);
assertThat(action.type).isNotNull();
}
@Test
public void testSerializerWriteRead() throws Exception {
doTestSerializationRoundTrip(createDownloadAction(uri1, null));
doTestSerializationRoundTrip(createRemoveAction(uri2, "key"));
}
@Test
public void testSerializerVersion0() throws Exception {
doTestLegacySerializationRoundTrip(createDownloadAction(uri1, "key"));
doTestLegacySerializationRoundTrip(createRemoveAction(uri1, "key"));
doTestLegacySerializationRoundTrip(createDownloadAction(uri2, "key"));
}
private void assertSameMedia(DownloadAction action1, DownloadAction action2) {
assertThat(action1.isSameMedia(action2)).isTrue();
assertThat(action2.isSameMedia(action1)).isTrue();
}
private void assertNotSameMedia(DownloadAction action1, DownloadAction action2) {
assertThat(action1.isSameMedia(action2)).isFalse();
assertThat(action2.isSameMedia(action1)).isFalse();
}
private static void assertEqual(DownloadAction action1, DownloadAction action2) {
assertThat(action1).isEqualTo(action2);
assertThat(action2).isEqualTo(action1);
}
private static void doTestSerializationRoundTrip(DownloadAction action) throws IOException {
ByteArrayOutputStream out = new ByteArrayOutputStream();
DataOutputStream output = new DataOutputStream(out);
action.serializeToStream(output);
ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
DataInputStream input = new DataInputStream(in);
DownloadAction action2 = DownloadAction.deserializeFromStream(input);
assertThat(action2).isEqualTo(action);
}
private static void doTestLegacySerializationRoundTrip(DownloadAction action) throws IOException {
ByteArrayOutputStream out = new ByteArrayOutputStream();
DataOutputStream output = new DataOutputStream(out);
DataOutputStream dataOutputStream = new DataOutputStream(output);
dataOutputStream.writeUTF(action.type);
dataOutputStream.writeInt(/* version= */ 0);
dataOutputStream.writeUTF(action.uri.toString());
dataOutputStream.writeBoolean(action.isRemoveAction);
dataOutputStream.writeInt(action.data.length);
dataOutputStream.write(action.data);
boolean customCacheKeySet = action.customCacheKey != null;
output.writeBoolean(customCacheKeySet);
if (customCacheKeySet) {
output.writeUTF(action.customCacheKey);
}
dataOutputStream.flush();
assertEqual(action, deserializeActionFromStream(out));
}
private static DownloadAction deserializeActionFromStream(ByteArrayOutputStream out)
throws IOException {
ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
DataInputStream input = new DataInputStream(in);
return DownloadAction.deserializeFromStream(input);
}
private static DownloadAction createDownloadAction(Uri uri1, String customCacheKey) {
return DownloadAction.createDownloadAction(
DownloadAction.TYPE_PROGRESSIVE,
uri1,
/* keys= */ Collections.emptyList(),
customCacheKey,
/* data= */ null);
}
private static DownloadAction createRemoveAction(Uri uri1, String customCacheKey) {
return DownloadAction.createRemoveAction(
DownloadAction.TYPE_PROGRESSIVE, uri1, customCacheKey, /* data= */ null);
}
}
/*
* Copyright (C) 2017 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.source.dash.offline;
import static com.google.common.truth.Truth.assertThat;
import android.net.Uri;
import com.google.android.exoplayer2.offline.DownloadAction;
import com.google.android.exoplayer2.offline.StreamKey;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
// TODO: Merge into DownloadActionTest
/** Unit tests for DASH {@link DownloadAction}s. */
@RunWith(RobolectricTestRunner.class)
public class DashDownloadActionTest {
private Uri uri1;
private Uri uri2;
@Before
public void setUp() {
uri1 = Uri.parse("http://test1.uri");
uri2 = Uri.parse("http://test2.uri");
}
@Test
public void testDownloadActionIsNotRemoveAction() {
DownloadAction action = createDownloadAction(uri1);
assertThat(action.isRemoveAction).isFalse();
}
@Test
public void testRemoveActionIsRemoveAction() {
DownloadAction action2 = createRemoveAction(uri1);
assertThat(action2.isRemoveAction).isTrue();
}
@Test
public void testSameUriDifferentAction_IsSameMedia() {
DownloadAction action1 = createRemoveAction(uri1);
DownloadAction action2 = createDownloadAction(uri1);
assertThat(action1.isSameMedia(action2)).isTrue();
}
@Test
public void testDifferentUriAndAction_IsNotSameMedia() {
DownloadAction action3 = createRemoveAction(uri2);
DownloadAction action4 = createDownloadAction(uri1);
assertThat(action3.isSameMedia(action4)).isFalse();
}
@SuppressWarnings("EqualsWithItself")
@Test
public void testEquals() {
DownloadAction action1 = createRemoveAction(uri1);
assertThat(action1.equals(action1)).isTrue();
DownloadAction action2 = createRemoveAction(uri1);
DownloadAction action3 = createRemoveAction(uri1);
assertEqual(action2, action3);
DownloadAction action4 = createRemoveAction(uri1);
DownloadAction action5 = createDownloadAction(uri1);
assertNotEqual(action4, action5);
DownloadAction action6 = createDownloadAction(uri1);
DownloadAction action7 = createDownloadAction(uri1, new StreamKey(0, 0, 0));
assertNotEqual(action6, action7);
DownloadAction action8 = createDownloadAction(uri1, new StreamKey(1, 1, 1));
DownloadAction action9 = createDownloadAction(uri1, new StreamKey(0, 0, 0));
assertNotEqual(action8, action9);
DownloadAction action10 = createRemoveAction(uri1);
DownloadAction action11 = createRemoveAction(uri2);
assertNotEqual(action10, action11);
DownloadAction action12 =
createDownloadAction(uri1, new StreamKey(0, 0, 0), new StreamKey(1, 1, 1));
DownloadAction action13 =
createDownloadAction(uri1, new StreamKey(1, 1, 1), new StreamKey(0, 0, 0));
assertEqual(action12, action13);
DownloadAction action14 = createDownloadAction(uri1, new StreamKey(0, 0, 0));
DownloadAction action15 =
createDownloadAction(uri1, new StreamKey(1, 1, 1), new StreamKey(0, 0, 0));
assertNotEqual(action14, action15);
DownloadAction action16 = createDownloadAction(uri1);
DownloadAction action17 = createDownloadAction(uri1);
assertEqual(action16, action17);
}
@Test
public void testSerializerGetType() {
DownloadAction action = createDownloadAction(uri1);
assertThat(action.type).isNotNull();
}
@Test
public void testSerializerWriteRead() throws Exception {
doTestSerializationRoundTrip(createDownloadAction(uri1));
doTestSerializationRoundTrip(createRemoveAction(uri1));
doTestSerializationRoundTrip(
createDownloadAction(uri2, new StreamKey(0, 0, 0), new StreamKey(1, 1, 1)));
}
@Test
public void testSerializerVersion0() throws Exception {
doTestLegacySerializationRoundTrip(createDownloadAction(uri1));
doTestLegacySerializationRoundTrip(createRemoveAction(uri1));
doTestLegacySerializationRoundTrip(
createDownloadAction(uri2, new StreamKey(0, 0, 0), new StreamKey(1, 1, 1)));
}
private static void assertNotEqual(DownloadAction action1, DownloadAction action2) {
assertThat(action1).isNotEqualTo(action2);
assertThat(action2).isNotEqualTo(action1);
}
private static void assertEqual(DownloadAction action1, DownloadAction action2) {
assertThat(action1).isEqualTo(action2);
assertThat(action2).isEqualTo(action1);
}
private static void doTestSerializationRoundTrip(DownloadAction action) throws IOException {
ByteArrayOutputStream out = new ByteArrayOutputStream();
DataOutputStream output = new DataOutputStream(out);
action.serializeToStream(output);
ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
DataInputStream input = new DataInputStream(in);
DownloadAction action2 = DownloadAction.deserializeFromStream(input);
assertThat(action).isEqualTo(action2);
}
private static void doTestLegacySerializationRoundTrip(DownloadAction action) throws IOException {
ByteArrayOutputStream out = new ByteArrayOutputStream();
DataOutputStream output = new DataOutputStream(out);
DataOutputStream dataOutputStream = new DataOutputStream(output);
dataOutputStream.writeUTF(action.type);
dataOutputStream.writeInt(/* version= */ 0);
dataOutputStream.writeUTF(action.uri.toString());
dataOutputStream.writeBoolean(action.isRemoveAction);
dataOutputStream.writeInt(action.data.length);
dataOutputStream.write(action.data);
dataOutputStream.writeInt(action.keys.size());
for (int i = 0; i < action.keys.size(); i++) {
StreamKey key = action.keys.get(i);
dataOutputStream.writeInt(key.periodIndex);
dataOutputStream.writeInt(key.groupIndex);
dataOutputStream.writeInt(key.trackIndex);
}
dataOutputStream.flush();
assertEqual(action, deserializeActionFromStream(out));
}
private static DownloadAction deserializeActionFromStream(ByteArrayOutputStream out)
throws IOException {
ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
DataInputStream input = new DataInputStream(in);
return DownloadAction.deserializeFromStream(input);
}
private static DownloadAction createDownloadAction(Uri uri, StreamKey... keys) {
ArrayList<StreamKey> keysList = new ArrayList<>();
Collections.addAll(keysList, keys);
return DownloadAction.createDownloadAction(
DownloadAction.TYPE_DASH, uri, keysList, /* customCacheKey= */ null, /* data= */ null);
}
private static DownloadAction createRemoveAction(Uri uri) {
return DownloadAction.createRemoveAction(
DownloadAction.TYPE_DASH, uri, /* customCacheKey= */ null, /* data= */ null);
}
}
/*
* Copyright (C) 2018 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.source.hls.offline;
import static com.google.common.truth.Truth.assertThat;
import android.net.Uri;
import com.google.android.exoplayer2.offline.DownloadAction;
import com.google.android.exoplayer2.offline.StreamKey;
import com.google.android.exoplayer2.util.Assertions;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
// TODO: Merge into DownloadActionTest
/** Unit tests for HLS {@link DownloadAction}s. */
@RunWith(RobolectricTestRunner.class)
public class HlsDownloadActionTest {
private Uri uri1;
private Uri uri2;
@Before
public void setUp() {
uri1 = Uri.parse("http://test1.uri");
uri2 = Uri.parse("http://test2.uri");
}
@Test
public void testDownloadActionIsNotRemoveAction() {
DownloadAction action = createDownloadAction(uri1);
assertThat(action.isRemoveAction).isFalse();
}
@Test
public void testRemoveActionIsRemoveAction() {
DownloadAction action2 = createRemoveAction(uri1);
assertThat(action2.isRemoveAction).isTrue();
}
@Test
public void testSameUriDifferentAction_IsSameMedia() {
DownloadAction action1 = createRemoveAction(uri1);
DownloadAction action2 = createDownloadAction(uri1);
assertThat(action1.isSameMedia(action2)).isTrue();
}
@Test
public void testDifferentUriAndAction_IsNotSameMedia() {
DownloadAction action3 = createRemoveAction(uri2);
DownloadAction action4 = createDownloadAction(uri1);
assertThat(action3.isSameMedia(action4)).isFalse();
}
@SuppressWarnings("EqualsWithItself")
@Test
public void testEquals() {
DownloadAction action1 = createRemoveAction(uri1);
assertThat(action1.equals(action1)).isTrue();
DownloadAction action2 = createRemoveAction(uri1);
DownloadAction action3 = createRemoveAction(uri1);
assertEqual(action2, action3);
DownloadAction action4 = createRemoveAction(uri1);
DownloadAction action5 = createDownloadAction(uri1);
assertNotEqual(action4, action5);
DownloadAction action6 = createDownloadAction(uri1);
DownloadAction action7 = createDownloadAction(uri1, new StreamKey(0, 0));
assertNotEqual(action6, action7);
DownloadAction action8 = createDownloadAction(uri1, new StreamKey(1, 1));
DownloadAction action9 = createDownloadAction(uri1, new StreamKey(0, 0));
assertNotEqual(action8, action9);
DownloadAction action10 = createRemoveAction(uri1);
DownloadAction action11 = createRemoveAction(uri2);
assertNotEqual(action10, action11);
DownloadAction action12 = createDownloadAction(uri1, new StreamKey(0, 0), new StreamKey(1, 1));
DownloadAction action13 = createDownloadAction(uri1, new StreamKey(1, 1), new StreamKey(0, 0));
assertEqual(action12, action13);
DownloadAction action14 = createDownloadAction(uri1, new StreamKey(0, 0));
DownloadAction action15 = createDownloadAction(uri1, new StreamKey(1, 1), new StreamKey(0, 0));
assertNotEqual(action14, action15);
DownloadAction action16 = createDownloadAction(uri1);
DownloadAction action17 = createDownloadAction(uri1);
assertEqual(action16, action17);
}
@Test
public void testSerializerGetType() {
DownloadAction action = createDownloadAction(uri1);
assertThat(action.type).isNotNull();
}
@Test
public void testSerializerWriteRead() throws Exception {
doTestSerializationRoundTrip(createDownloadAction(uri1));
doTestSerializationRoundTrip(createRemoveAction(uri1));
doTestSerializationRoundTrip(
createDownloadAction(uri2, new StreamKey(0, 0), new StreamKey(1, 1)));
}
@Test
public void testSerializerVersion0() throws Exception {
doTestLegacySerializationRoundTrip(createDownloadAction(uri1), /* version= */ 0);
doTestLegacySerializationRoundTrip(createRemoveAction(uri1), /* version= */ 0);
doTestLegacySerializationRoundTrip(
createDownloadAction(uri2, new StreamKey(0, 0), new StreamKey(1, 1)), /* version= */ 0);
}
@Test
public void testSerializerVersion1() throws Exception {
doTestLegacySerializationRoundTrip(createDownloadAction(uri1), /* version= */ 1);
doTestLegacySerializationRoundTrip(createRemoveAction(uri1), /* version= */ 1);
doTestLegacySerializationRoundTrip(
createDownloadAction(uri2, new StreamKey(0, 0), new StreamKey(1, 1)), /* version= */ 1);
}
private static void assertNotEqual(DownloadAction action1, DownloadAction action2) {
assertThat(action1).isNotEqualTo(action2);
assertThat(action2).isNotEqualTo(action1);
}
private static void assertEqual(DownloadAction action1, DownloadAction action2) {
assertThat(action1).isEqualTo(action2);
assertThat(action2).isEqualTo(action1);
}
private static void doTestSerializationRoundTrip(DownloadAction action) throws IOException {
ByteArrayOutputStream out = new ByteArrayOutputStream();
DataOutputStream output = new DataOutputStream(out);
action.serializeToStream(output);
assertEqual(action, deserializeActionFromStream(out));
}
private static void doTestLegacySerializationRoundTrip(DownloadAction action, int version)
throws IOException {
Assertions.checkState(version == 0 || version == 1);
ByteArrayOutputStream out = new ByteArrayOutputStream();
DataOutputStream output = new DataOutputStream(out);
DataOutputStream dataOutputStream = new DataOutputStream(output);
dataOutputStream.writeUTF(action.type);
dataOutputStream.writeInt(version);
dataOutputStream.writeUTF(action.uri.toString());
dataOutputStream.writeBoolean(action.isRemoveAction);
dataOutputStream.writeInt(action.data.length);
dataOutputStream.write(action.data);
dataOutputStream.writeInt(action.keys.size());
for (int i = 0; i < action.keys.size(); i++) {
StreamKey key = action.keys.get(i);
if (version == 1) {
dataOutputStream.writeInt(key.periodIndex);
}
dataOutputStream.writeInt(key.groupIndex);
dataOutputStream.writeInt(key.trackIndex);
}
dataOutputStream.flush();
assertEqual(action, deserializeActionFromStream(out));
}
private static DownloadAction deserializeActionFromStream(ByteArrayOutputStream out)
throws IOException {
ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
DataInputStream input = new DataInputStream(in);
return DownloadAction.deserializeFromStream(input);
}
private static DownloadAction createDownloadAction(Uri uri, StreamKey... keys) {
ArrayList<StreamKey> keysList = new ArrayList<>();
Collections.addAll(keysList, keys);
return DownloadAction.createDownloadAction(
DownloadAction.TYPE_HLS, uri, keysList, /* customCacheKey= */ null, /* data= */ null);
}
private static DownloadAction createRemoveAction(Uri uri) {
return DownloadAction.createRemoveAction(
DownloadAction.TYPE_HLS, uri, /* customCacheKey= */ null, /* data= */ null);
}
}
/*
* Copyright (C) 2018 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.source.smoothstreaming.offline;
import static com.google.common.truth.Truth.assertThat;
import android.net.Uri;
import com.google.android.exoplayer2.offline.DownloadAction;
import com.google.android.exoplayer2.offline.StreamKey;
import com.google.android.exoplayer2.util.Assertions;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
// TODO: Merge into DownloadActionTest
/** Unit tests for SmoothStreaming {@link DownloadAction}s. */
@RunWith(RobolectricTestRunner.class)
public class SsDownloadActionTest {
private Uri uri1;
private Uri uri2;
@Before
public void setUp() {
uri1 = Uri.parse("http://test/1.uri");
uri2 = Uri.parse("http://test/2.uri");
}
@Test
public void testDownloadActionIsNotRemoveAction() {
DownloadAction action = createDownloadAction(uri1);
assertThat(action.isRemoveAction).isFalse();
}
@Test
public void testRemoveActionIsRemoveAction() {
DownloadAction action2 = createRemoveAction(uri1);
assertThat(action2.isRemoveAction).isTrue();
}
@Test
public void testSameUriDifferentAction_IsSameMedia() {
DownloadAction action1 = createRemoveAction(uri1);
DownloadAction action2 = createDownloadAction(uri1);
assertThat(action1.isSameMedia(action2)).isTrue();
}
@Test
public void testDifferentUriAndAction_IsNotSameMedia() {
DownloadAction action3 = createRemoveAction(uri2);
DownloadAction action4 = createDownloadAction(uri1);
assertThat(action3.isSameMedia(action4)).isFalse();
}
@SuppressWarnings("EqualsWithItself")
@Test
public void testEquals() {
DownloadAction action1 = createRemoveAction(uri1);
assertThat(action1.equals(action1)).isTrue();
DownloadAction action2 = createRemoveAction(uri1);
DownloadAction action3 = createRemoveAction(uri1);
assertEqual(action2, action3);
DownloadAction action4 = createRemoveAction(uri1);
DownloadAction action5 = createDownloadAction(uri1);
assertNotEqual(action4, action5);
DownloadAction action6 = createDownloadAction(uri1);
DownloadAction action7 = createDownloadAction(uri1, new StreamKey(0, 0));
assertNotEqual(action6, action7);
DownloadAction action8 = createDownloadAction(uri1, new StreamKey(1, 1));
DownloadAction action9 = createDownloadAction(uri1, new StreamKey(0, 0));
assertNotEqual(action8, action9);
DownloadAction action10 = createRemoveAction(uri1);
DownloadAction action11 = createRemoveAction(uri2);
assertNotEqual(action10, action11);
DownloadAction action12 = createDownloadAction(uri1, new StreamKey(0, 0), new StreamKey(1, 1));
DownloadAction action13 = createDownloadAction(uri1, new StreamKey(1, 1), new StreamKey(0, 0));
assertEqual(action12, action13);
DownloadAction action14 = createDownloadAction(uri1, new StreamKey(0, 0));
DownloadAction action15 = createDownloadAction(uri1, new StreamKey(1, 1), new StreamKey(0, 0));
assertNotEqual(action14, action15);
DownloadAction action16 = createDownloadAction(uri1);
DownloadAction action17 = createDownloadAction(uri1);
assertEqual(action16, action17);
}
@Test
public void testSerializerGetType() {
DownloadAction action = createDownloadAction(uri1);
assertThat(action.type).isNotNull();
}
@Test
public void testSerializerWriteRead() throws Exception {
doTestSerializationRoundTrip(createDownloadAction(uri1));
doTestSerializationRoundTrip(createRemoveAction(uri1));
doTestSerializationRoundTrip(
createDownloadAction(uri2, new StreamKey(0, 0), new StreamKey(1, 1)));
}
@Test
public void testSerializerVersion0() throws Exception {
doTestLegacySerializationRoundTrip(createDownloadAction(uri1), /* version= */ 0);
doTestLegacySerializationRoundTrip(createRemoveAction(uri1), /* version= */ 0);
doTestLegacySerializationRoundTrip(
createDownloadAction(uri2, new StreamKey(0, 0), new StreamKey(1, 1)), /* version= */ 0);
}
@Test
public void testSerializerVersion1() throws Exception {
doTestLegacySerializationRoundTrip(createDownloadAction(uri1), /* version= */ 1);
doTestLegacySerializationRoundTrip(createRemoveAction(uri1), /* version= */ 1);
doTestLegacySerializationRoundTrip(
createDownloadAction(uri2, new StreamKey(0, 0), new StreamKey(1, 1)), /* version= */ 1);
}
private static void assertNotEqual(DownloadAction action1, DownloadAction action2) {
assertThat(action1).isNotEqualTo(action2);
assertThat(action2).isNotEqualTo(action1);
}
private static void assertEqual(DownloadAction action1, DownloadAction action2) {
assertThat(action1).isEqualTo(action2);
assertThat(action2).isEqualTo(action1);
}
private static void doTestSerializationRoundTrip(DownloadAction action) throws IOException {
ByteArrayOutputStream out = new ByteArrayOutputStream();
DataOutputStream output = new DataOutputStream(out);
action.serializeToStream(output);
assertEqual(action, deserializeActionFromStream(out));
}
private static void doTestLegacySerializationRoundTrip(DownloadAction action, int version)
throws IOException {
Assertions.checkState(version == 0 || version == 1);
ByteArrayOutputStream out = new ByteArrayOutputStream();
DataOutputStream output = new DataOutputStream(out);
DataOutputStream dataOutputStream = new DataOutputStream(output);
dataOutputStream.writeUTF(action.type);
dataOutputStream.writeInt(version);
dataOutputStream.writeUTF(action.uri.toString());
dataOutputStream.writeBoolean(action.isRemoveAction);
dataOutputStream.writeInt(action.data.length);
dataOutputStream.write(action.data);
dataOutputStream.writeInt(action.keys.size());
for (int i = 0; i < action.keys.size(); i++) {
StreamKey key = action.keys.get(i);
if (version == 1) {
dataOutputStream.writeInt(key.periodIndex);
}
dataOutputStream.writeInt(key.groupIndex);
dataOutputStream.writeInt(key.trackIndex);
}
dataOutputStream.flush();
assertEqual(action, deserializeActionFromStream(out));
}
private static DownloadAction deserializeActionFromStream(ByteArrayOutputStream out)
throws IOException {
ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
DataInputStream input = new DataInputStream(in);
return DownloadAction.deserializeFromStream(input);
}
private static DownloadAction createDownloadAction(Uri uri, StreamKey... keys) {
ArrayList<StreamKey> keysList = new ArrayList<>();
Collections.addAll(keysList, keys);
return DownloadAction.createDownloadAction(
DownloadAction.TYPE_SS, uri, keysList, /* customCacheKey= */ null, /* data= */ null);
}
private static DownloadAction createRemoveAction(Uri uri) {
return DownloadAction.createRemoveAction(
DownloadAction.TYPE_SS, uri, /* customCacheKey= */ null, /* data= */ null);
}
}
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