Commit 2fe478ad by eguven Committed by Oliver Woodman

Invert DashHostedTest and inner class Builder to make the design more natural

Builder class was renamed to DashTestRunner and DashHostedTest moved
into it as an inner class.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=150307988
parent 9b0d24c9
......@@ -40,40 +40,54 @@ public final class DashTest extends ActivityInstrumentationTestCase2<HostActivit
.build();
private static final ActionSchedule RENDERER_DISABLING_SCHEDULE = new ActionSchedule.Builder(TAG)
// Wait 10 seconds, disable the video renderer, wait another 10 seconds and enable it again.
.delay(10000).disableRenderer(DashHostedTest.VIDEO_RENDERER_INDEX)
.delay(10000).enableRenderer(DashHostedTest.VIDEO_RENDERER_INDEX)
.delay(10000).disableRenderer(DashTestRunner.VIDEO_RENDERER_INDEX)
.delay(10000).enableRenderer(DashTestRunner.VIDEO_RENDERER_INDEX)
// Ditto for the audio renderer.
.delay(10000).disableRenderer(DashHostedTest.AUDIO_RENDERER_INDEX)
.delay(10000).enableRenderer(DashHostedTest.AUDIO_RENDERER_INDEX)
.delay(10000).disableRenderer(DashTestRunner.AUDIO_RENDERER_INDEX)
.delay(10000).enableRenderer(DashTestRunner.AUDIO_RENDERER_INDEX)
// Wait 10 seconds, then disable and enable the video renderer 5 times in quick succession.
.delay(10000).disableRenderer(DashHostedTest.VIDEO_RENDERER_INDEX)
.enableRenderer(DashHostedTest.VIDEO_RENDERER_INDEX)
.disableRenderer(DashHostedTest.VIDEO_RENDERER_INDEX)
.enableRenderer(DashHostedTest.VIDEO_RENDERER_INDEX)
.disableRenderer(DashHostedTest.VIDEO_RENDERER_INDEX)
.enableRenderer(DashHostedTest.VIDEO_RENDERER_INDEX)
.disableRenderer(DashHostedTest.VIDEO_RENDERER_INDEX)
.enableRenderer(DashHostedTest.VIDEO_RENDERER_INDEX)
.disableRenderer(DashHostedTest.VIDEO_RENDERER_INDEX)
.enableRenderer(DashHostedTest.VIDEO_RENDERER_INDEX)
.delay(10000).disableRenderer(DashTestRunner.VIDEO_RENDERER_INDEX)
.enableRenderer(DashTestRunner.VIDEO_RENDERER_INDEX)
.disableRenderer(DashTestRunner.VIDEO_RENDERER_INDEX)
.enableRenderer(DashTestRunner.VIDEO_RENDERER_INDEX)
.disableRenderer(DashTestRunner.VIDEO_RENDERER_INDEX)
.enableRenderer(DashTestRunner.VIDEO_RENDERER_INDEX)
.disableRenderer(DashTestRunner.VIDEO_RENDERER_INDEX)
.enableRenderer(DashTestRunner.VIDEO_RENDERER_INDEX)
.disableRenderer(DashTestRunner.VIDEO_RENDERER_INDEX)
.enableRenderer(DashTestRunner.VIDEO_RENDERER_INDEX)
// Ditto for the audio renderer.
.delay(10000).disableRenderer(DashHostedTest.AUDIO_RENDERER_INDEX)
.enableRenderer(DashHostedTest.AUDIO_RENDERER_INDEX)
.disableRenderer(DashHostedTest.AUDIO_RENDERER_INDEX)
.enableRenderer(DashHostedTest.AUDIO_RENDERER_INDEX)
.disableRenderer(DashHostedTest.AUDIO_RENDERER_INDEX)
.enableRenderer(DashHostedTest.AUDIO_RENDERER_INDEX)
.disableRenderer(DashHostedTest.AUDIO_RENDERER_INDEX)
.enableRenderer(DashHostedTest.AUDIO_RENDERER_INDEX)
.disableRenderer(DashHostedTest.AUDIO_RENDERER_INDEX)
.enableRenderer(DashHostedTest.AUDIO_RENDERER_INDEX)
.delay(10000).disableRenderer(DashTestRunner.AUDIO_RENDERER_INDEX)
.enableRenderer(DashTestRunner.AUDIO_RENDERER_INDEX)
.disableRenderer(DashTestRunner.AUDIO_RENDERER_INDEX)
.enableRenderer(DashTestRunner.AUDIO_RENDERER_INDEX)
.disableRenderer(DashTestRunner.AUDIO_RENDERER_INDEX)
.enableRenderer(DashTestRunner.AUDIO_RENDERER_INDEX)
.disableRenderer(DashTestRunner.AUDIO_RENDERER_INDEX)
.enableRenderer(DashTestRunner.AUDIO_RENDERER_INDEX)
.disableRenderer(DashTestRunner.AUDIO_RENDERER_INDEX)
.enableRenderer(DashTestRunner.AUDIO_RENDERER_INDEX)
.delay(10000).seek(120000)
.build();
private DashTestRunner testRunner;
public DashTest() {
super(HostActivity.class);
}
@Override
protected void setUp() throws Exception {
super.setUp();
testRunner = new DashTestRunner(TAG, getActivity(), getInstrumentation());
}
@Override
protected void tearDown() throws Exception {
testRunner = null;
super.tearDown();
}
// H264 CDD.
public void testH264Fixed() {
......@@ -81,13 +95,13 @@ public final class DashTest extends ActivityInstrumentationTestCase2<HostActivit
// Pass.
return;
}
new DashHostedTest.Builder(TAG)
testRunner
.setStreamName("test_h264_fixed")
.setManifestUrl(DashTestData.H264_MANIFEST)
.setFullPlaybackNoSeeking(true)
.setCanIncludeAdditionalVideoFormats(false)
.setAudioVideoFormats(DashTestData.AAC_AUDIO_REPRESENTATION_ID, DashTestData.H264_CDD_FIXED)
.runTest(getActivity(), getInstrumentation());
.run();
}
public void testH264Adaptive() throws DecoderQueryException {
......@@ -95,14 +109,14 @@ public final class DashTest extends ActivityInstrumentationTestCase2<HostActivit
// Pass.
return;
}
new DashHostedTest.Builder(TAG)
testRunner
.setStreamName("test_h264_adaptive")
.setManifestUrl(DashTestData.H264_MANIFEST)
.setFullPlaybackNoSeeking(true)
.setCanIncludeAdditionalVideoFormats(true)
.setAudioVideoFormats(DashTestData.AAC_AUDIO_REPRESENTATION_ID,
DashTestData.H264_CDD_ADAPTIVE)
.runTest(getActivity(), getInstrumentation());
.run();
}
public void testH264AdaptiveWithSeeking() throws DecoderQueryException {
......@@ -111,7 +125,7 @@ public final class DashTest extends ActivityInstrumentationTestCase2<HostActivit
return;
}
final String streamName = "test_h264_adaptive_with_seeking";
new DashHostedTest.Builder(TAG)
testRunner
.setStreamName(streamName)
.setManifestUrl(DashTestData.H264_MANIFEST)
.setFullPlaybackNoSeeking(false)
......@@ -119,7 +133,7 @@ public final class DashTest extends ActivityInstrumentationTestCase2<HostActivit
.setActionSchedule(SEEKING_SCHEDULE)
.setAudioVideoFormats(DashTestData.AAC_AUDIO_REPRESENTATION_ID,
DashTestData.H264_CDD_ADAPTIVE)
.runTest(getActivity(), getInstrumentation());
.run();
}
public void testH264AdaptiveWithRendererDisabling() throws DecoderQueryException {
......@@ -128,7 +142,7 @@ public final class DashTest extends ActivityInstrumentationTestCase2<HostActivit
return;
}
final String streamName = "test_h264_adaptive_with_renderer_disabling";
new DashHostedTest.Builder(TAG)
testRunner
.setStreamName(streamName)
.setManifestUrl(DashTestData.H264_MANIFEST)
.setFullPlaybackNoSeeking(false)
......@@ -136,7 +150,7 @@ public final class DashTest extends ActivityInstrumentationTestCase2<HostActivit
.setActionSchedule(RENDERER_DISABLING_SCHEDULE)
.setAudioVideoFormats(DashTestData.AAC_AUDIO_REPRESENTATION_ID,
DashTestData.H264_CDD_ADAPTIVE)
.runTest(getActivity(), getInstrumentation());
.run();
}
// H265 CDD.
......@@ -146,13 +160,13 @@ public final class DashTest extends ActivityInstrumentationTestCase2<HostActivit
// Pass.
return;
}
new DashHostedTest.Builder(TAG)
testRunner
.setStreamName("test_h265_fixed")
.setManifestUrl(DashTestData.H265_MANIFEST)
.setFullPlaybackNoSeeking(true)
.setCanIncludeAdditionalVideoFormats(false)
.setAudioVideoFormats(DashTestData.AAC_AUDIO_REPRESENTATION_ID, DashTestData.H265_CDD_FIXED)
.runTest(getActivity(), getInstrumentation());
.run();
}
public void testH265Adaptive() throws DecoderQueryException {
......@@ -160,14 +174,14 @@ public final class DashTest extends ActivityInstrumentationTestCase2<HostActivit
// Pass.
return;
}
new DashHostedTest.Builder(TAG)
testRunner
.setStreamName("test_h265_adaptive")
.setManifestUrl(DashTestData.H265_MANIFEST)
.setFullPlaybackNoSeeking(true)
.setCanIncludeAdditionalVideoFormats(true)
.setAudioVideoFormats(DashTestData.AAC_AUDIO_REPRESENTATION_ID,
DashTestData.H265_CDD_ADAPTIVE)
.runTest(getActivity(), getInstrumentation());
.run();
}
public void testH265AdaptiveWithSeeking() throws DecoderQueryException {
......@@ -175,7 +189,7 @@ public final class DashTest extends ActivityInstrumentationTestCase2<HostActivit
// Pass.
return;
}
new DashHostedTest.Builder(TAG)
testRunner
.setStreamName("test_h265_adaptive_with_seeking")
.setManifestUrl(DashTestData.H265_MANIFEST)
.setFullPlaybackNoSeeking(false)
......@@ -183,7 +197,7 @@ public final class DashTest extends ActivityInstrumentationTestCase2<HostActivit
.setActionSchedule(SEEKING_SCHEDULE)
.setAudioVideoFormats(DashTestData.AAC_AUDIO_REPRESENTATION_ID,
DashTestData.H265_CDD_ADAPTIVE)
.runTest(getActivity(), getInstrumentation());
.run();
}
public void testH265AdaptiveWithRendererDisabling() throws DecoderQueryException {
......@@ -191,7 +205,7 @@ public final class DashTest extends ActivityInstrumentationTestCase2<HostActivit
// Pass.
return;
}
new DashHostedTest.Builder(TAG)
testRunner
.setStreamName("test_h265_adaptive_with_renderer_disabling")
.setManifestUrl(DashTestData.H265_MANIFEST)
.setFullPlaybackNoSeeking(false)
......@@ -199,7 +213,7 @@ public final class DashTest extends ActivityInstrumentationTestCase2<HostActivit
.setActionSchedule(RENDERER_DISABLING_SCHEDULE)
.setAudioVideoFormats(DashTestData.AAC_AUDIO_REPRESENTATION_ID,
DashTestData.H265_CDD_ADAPTIVE)
.runTest(getActivity(), getInstrumentation());
.run();
}
// VP9 (CDD).
......@@ -209,14 +223,14 @@ public final class DashTest extends ActivityInstrumentationTestCase2<HostActivit
// Pass.
return;
}
new DashHostedTest.Builder(TAG)
testRunner
.setStreamName("test_vp9_fixed_360p")
.setManifestUrl(DashTestData.VP9_MANIFEST)
.setFullPlaybackNoSeeking(true)
.setCanIncludeAdditionalVideoFormats(false)
.setAudioVideoFormats(DashTestData.VP9_VORBIS_AUDIO_REPRESENTATION_ID,
DashTestData.VP9_CDD_FIXED)
.runTest(getActivity(), getInstrumentation());
.run();
}
public void testVp9Adaptive() throws DecoderQueryException {
......@@ -224,14 +238,14 @@ public final class DashTest extends ActivityInstrumentationTestCase2<HostActivit
// Pass.
return;
}
new DashHostedTest.Builder(TAG)
testRunner
.setStreamName("test_vp9_adaptive")
.setManifestUrl(DashTestData.VP9_MANIFEST)
.setFullPlaybackNoSeeking(true)
.setCanIncludeAdditionalVideoFormats(true)
.setAudioVideoFormats(DashTestData.VP9_VORBIS_AUDIO_REPRESENTATION_ID,
DashTestData.VP9_CDD_ADAPTIVE)
.runTest(getActivity(), getInstrumentation());
.run();
}
public void testVp9AdaptiveWithSeeking() throws DecoderQueryException {
......@@ -239,7 +253,7 @@ public final class DashTest extends ActivityInstrumentationTestCase2<HostActivit
// Pass.
return;
}
new DashHostedTest.Builder(TAG)
testRunner
.setStreamName("test_vp9_adaptive_with_seeking")
.setManifestUrl(DashTestData.VP9_MANIFEST)
.setFullPlaybackNoSeeking(false)
......@@ -247,7 +261,7 @@ public final class DashTest extends ActivityInstrumentationTestCase2<HostActivit
.setActionSchedule(SEEKING_SCHEDULE)
.setAudioVideoFormats(DashTestData.VP9_VORBIS_AUDIO_REPRESENTATION_ID,
DashTestData.VP9_CDD_ADAPTIVE)
.runTest(getActivity(), getInstrumentation());
.run();
}
public void testVp9AdaptiveWithRendererDisabling() throws DecoderQueryException {
......@@ -255,7 +269,7 @@ public final class DashTest extends ActivityInstrumentationTestCase2<HostActivit
// Pass.
return;
}
new DashHostedTest.Builder(TAG)
testRunner
.setStreamName("test_vp9_adaptive_with_renderer_disabling")
.setManifestUrl(DashTestData.VP9_MANIFEST)
.setFullPlaybackNoSeeking(false)
......@@ -263,7 +277,7 @@ public final class DashTest extends ActivityInstrumentationTestCase2<HostActivit
.setActionSchedule(RENDERER_DISABLING_SCHEDULE)
.setAudioVideoFormats(DashTestData.VP9_VORBIS_AUDIO_REPRESENTATION_ID,
DashTestData.VP9_CDD_ADAPTIVE)
.runTest(getActivity(), getInstrumentation());
.run();
}
// H264: Other frame-rates for output buffer count assertions.
......@@ -274,14 +288,14 @@ public final class DashTest extends ActivityInstrumentationTestCase2<HostActivit
// Pass.
return;
}
new DashHostedTest.Builder(TAG)
testRunner
.setStreamName("test_23fps_h264_fixed")
.setManifestUrl(DashTestData.H264_23_MANIFEST)
.setFullPlaybackNoSeeking(true)
.setCanIncludeAdditionalVideoFormats(false)
.setAudioVideoFormats(DashTestData.AAC_AUDIO_REPRESENTATION_ID,
DashTestData.H264_BASELINE_480P_23FPS_VIDEO_REPRESENTATION_ID)
.runTest(getActivity(), getInstrumentation());
.run();
}
// 24 fps.
......@@ -290,14 +304,14 @@ public final class DashTest extends ActivityInstrumentationTestCase2<HostActivit
// Pass.
return;
}
new DashHostedTest.Builder(TAG)
testRunner
.setStreamName("test_24fps_h264_fixed")
.setManifestUrl(DashTestData.H264_24_MANIFEST)
.setFullPlaybackNoSeeking(true)
.setCanIncludeAdditionalVideoFormats(false)
.setAudioVideoFormats(DashTestData.AAC_AUDIO_REPRESENTATION_ID,
DashTestData.H264_BASELINE_480P_24FPS_VIDEO_REPRESENTATION_ID)
.runTest(getActivity(), getInstrumentation());
.run();
}
// 29.97 fps.
......@@ -306,14 +320,14 @@ public final class DashTest extends ActivityInstrumentationTestCase2<HostActivit
// Pass.
return;
}
new DashHostedTest.Builder(TAG)
testRunner
.setStreamName("test_29fps_h264_fixed")
.setManifestUrl(DashTestData.H264_29_MANIFEST)
.setFullPlaybackNoSeeking(true)
.setCanIncludeAdditionalVideoFormats(false)
.setAudioVideoFormats(DashTestData.AAC_AUDIO_REPRESENTATION_ID,
DashTestData.H264_BASELINE_480P_29FPS_VIDEO_REPRESENTATION_ID)
.runTest(getActivity(), getInstrumentation());
.run();
}
// Widevine encrypted media tests.
......@@ -324,7 +338,7 @@ public final class DashTest extends ActivityInstrumentationTestCase2<HostActivit
// Pass.
return;
}
new DashHostedTest.Builder(TAG)
testRunner
.setStreamName("test_widevine_h264_fixed")
.setManifestUrl(DashTestData.WIDEVINE_H264_MANIFEST)
.setWidevineMimeType(MimeTypes.VIDEO_H264)
......@@ -332,7 +346,7 @@ public final class DashTest extends ActivityInstrumentationTestCase2<HostActivit
.setCanIncludeAdditionalVideoFormats(false)
.setAudioVideoFormats(DashTestData.WIDEVINE_AAC_AUDIO_REPRESENTATION_ID,
DashTestData.WIDEVINE_H264_CDD_FIXED)
.runTest(getActivity(), getInstrumentation());
.run();
}
public void testWidevineH264Adaptive() throws DecoderQueryException {
......@@ -340,7 +354,7 @@ public final class DashTest extends ActivityInstrumentationTestCase2<HostActivit
// Pass.
return;
}
new DashHostedTest.Builder(TAG)
testRunner
.setStreamName("test_widevine_h264_adaptive")
.setManifestUrl(DashTestData.WIDEVINE_H264_MANIFEST)
.setWidevineMimeType(MimeTypes.VIDEO_H264)
......@@ -348,7 +362,7 @@ public final class DashTest extends ActivityInstrumentationTestCase2<HostActivit
.setCanIncludeAdditionalVideoFormats(true)
.setAudioVideoFormats(DashTestData.WIDEVINE_AAC_AUDIO_REPRESENTATION_ID,
DashTestData.WIDEVINE_H264_CDD_ADAPTIVE)
.runTest(getActivity(), getInstrumentation());
.run();
}
public void testWidevineH264AdaptiveWithSeeking() throws DecoderQueryException {
......@@ -356,7 +370,7 @@ public final class DashTest extends ActivityInstrumentationTestCase2<HostActivit
// Pass.
return;
}
new DashHostedTest.Builder(TAG)
testRunner
.setStreamName("test_widevine_h264_adaptive_with_seeking")
.setManifestUrl(DashTestData.WIDEVINE_H264_MANIFEST)
.setWidevineMimeType(MimeTypes.VIDEO_H264)
......@@ -365,7 +379,7 @@ public final class DashTest extends ActivityInstrumentationTestCase2<HostActivit
.setActionSchedule(SEEKING_SCHEDULE)
.setAudioVideoFormats(DashTestData.WIDEVINE_AAC_AUDIO_REPRESENTATION_ID,
DashTestData.WIDEVINE_H264_CDD_ADAPTIVE)
.runTest(getActivity(), getInstrumentation());
.run();
}
public void testWidevineH264AdaptiveWithRendererDisabling() throws DecoderQueryException {
......@@ -373,7 +387,7 @@ public final class DashTest extends ActivityInstrumentationTestCase2<HostActivit
// Pass.
return;
}
new DashHostedTest.Builder(TAG)
testRunner
.setStreamName("test_widevine_h264_adaptive_with_renderer_disabling")
.setManifestUrl(DashTestData.WIDEVINE_H264_MANIFEST)
.setWidevineMimeType(MimeTypes.VIDEO_H264)
......@@ -382,7 +396,7 @@ public final class DashTest extends ActivityInstrumentationTestCase2<HostActivit
.setActionSchedule(RENDERER_DISABLING_SCHEDULE)
.setAudioVideoFormats(DashTestData.WIDEVINE_AAC_AUDIO_REPRESENTATION_ID,
DashTestData.WIDEVINE_H264_CDD_ADAPTIVE)
.runTest(getActivity(), getInstrumentation());
.run();
}
// H265 CDD.
......@@ -392,7 +406,7 @@ public final class DashTest extends ActivityInstrumentationTestCase2<HostActivit
// Pass.
return;
}
new DashHostedTest.Builder(TAG)
testRunner
.setStreamName("test_widevine_h265_fixed")
.setManifestUrl(DashTestData.WIDEVINE_H265_MANIFEST)
.setWidevineMimeType(MimeTypes.VIDEO_H265)
......@@ -400,7 +414,7 @@ public final class DashTest extends ActivityInstrumentationTestCase2<HostActivit
.setCanIncludeAdditionalVideoFormats(false)
.setAudioVideoFormats(DashTestData.WIDEVINE_AAC_AUDIO_REPRESENTATION_ID,
DashTestData.WIDEVINE_H265_CDD_FIXED)
.runTest(getActivity(), getInstrumentation());
.run();
}
public void testWidevineH265Adaptive() throws DecoderQueryException {
......@@ -408,7 +422,7 @@ public final class DashTest extends ActivityInstrumentationTestCase2<HostActivit
// Pass.
return;
}
new DashHostedTest.Builder(TAG)
testRunner
.setStreamName("test_widevine_h265_adaptive")
.setManifestUrl(DashTestData.WIDEVINE_H265_MANIFEST)
.setWidevineMimeType(MimeTypes.VIDEO_H265)
......@@ -416,7 +430,7 @@ public final class DashTest extends ActivityInstrumentationTestCase2<HostActivit
.setCanIncludeAdditionalVideoFormats(true)
.setAudioVideoFormats(DashTestData.WIDEVINE_AAC_AUDIO_REPRESENTATION_ID,
DashTestData.WIDEVINE_H265_CDD_ADAPTIVE)
.runTest(getActivity(), getInstrumentation());
.run();
}
public void testWidevineH265AdaptiveWithSeeking() throws DecoderQueryException {
......@@ -424,7 +438,7 @@ public final class DashTest extends ActivityInstrumentationTestCase2<HostActivit
// Pass.
return;
}
new DashHostedTest.Builder(TAG)
testRunner
.setStreamName("test_widevine_h265_adaptive_with_seeking")
.setManifestUrl(DashTestData.WIDEVINE_H265_MANIFEST)
.setWidevineMimeType(MimeTypes.VIDEO_H265)
......@@ -433,7 +447,7 @@ public final class DashTest extends ActivityInstrumentationTestCase2<HostActivit
.setActionSchedule(SEEKING_SCHEDULE)
.setAudioVideoFormats(DashTestData.WIDEVINE_AAC_AUDIO_REPRESENTATION_ID,
DashTestData.WIDEVINE_H265_CDD_ADAPTIVE)
.runTest(getActivity(), getInstrumentation());
.run();
}
public void testWidevineH265AdaptiveWithRendererDisabling() throws DecoderQueryException {
......@@ -441,7 +455,7 @@ public final class DashTest extends ActivityInstrumentationTestCase2<HostActivit
// Pass.
return;
}
new DashHostedTest.Builder(TAG)
testRunner
.setStreamName("test_widevine_h265_adaptive_with_renderer_disabling")
.setManifestUrl(DashTestData.WIDEVINE_H265_MANIFEST)
.setWidevineMimeType(MimeTypes.VIDEO_H265)
......@@ -450,7 +464,7 @@ public final class DashTest extends ActivityInstrumentationTestCase2<HostActivit
.setActionSchedule(RENDERER_DISABLING_SCHEDULE)
.setAudioVideoFormats(DashTestData.WIDEVINE_AAC_AUDIO_REPRESENTATION_ID,
DashTestData.WIDEVINE_H265_CDD_ADAPTIVE)
.runTest(getActivity(), getInstrumentation());
.run();
}
// VP9 (CDD).
......@@ -460,7 +474,7 @@ public final class DashTest extends ActivityInstrumentationTestCase2<HostActivit
// Pass.
return;
}
new DashHostedTest.Builder(TAG)
testRunner
.setStreamName("test_widevine_vp9_fixed_360p")
.setManifestUrl(DashTestData.WIDEVINE_VP9_MANIFEST)
.setWidevineMimeType(MimeTypes.VIDEO_VP9)
......@@ -468,7 +482,7 @@ public final class DashTest extends ActivityInstrumentationTestCase2<HostActivit
.setCanIncludeAdditionalVideoFormats(false)
.setAudioVideoFormats(DashTestData.WIDEVINE_VP9_AAC_AUDIO_REPRESENTATION_ID,
DashTestData.WIDEVINE_VP9_CDD_FIXED)
.runTest(getActivity(), getInstrumentation());
.run();
}
public void testWidevineVp9Adaptive() throws DecoderQueryException {
......@@ -476,7 +490,7 @@ public final class DashTest extends ActivityInstrumentationTestCase2<HostActivit
// Pass.
return;
}
new DashHostedTest.Builder(TAG)
testRunner
.setStreamName("test_widevine_vp9_adaptive")
.setManifestUrl(DashTestData.WIDEVINE_VP9_MANIFEST)
.setWidevineMimeType(MimeTypes.VIDEO_VP9)
......@@ -484,7 +498,7 @@ public final class DashTest extends ActivityInstrumentationTestCase2<HostActivit
.setCanIncludeAdditionalVideoFormats(true)
.setAudioVideoFormats(DashTestData.WIDEVINE_VP9_AAC_AUDIO_REPRESENTATION_ID,
DashTestData.WIDEVINE_VP9_CDD_ADAPTIVE)
.runTest(getActivity(), getInstrumentation());
.run();
}
public void testWidevineVp9AdaptiveWithSeeking() throws DecoderQueryException {
......@@ -492,7 +506,7 @@ public final class DashTest extends ActivityInstrumentationTestCase2<HostActivit
// Pass.
return;
}
new DashHostedTest.Builder(TAG)
testRunner
.setStreamName("test_widevine_vp9_adaptive_with_seeking")
.setManifestUrl(DashTestData.WIDEVINE_VP9_MANIFEST)
.setWidevineMimeType(MimeTypes.VIDEO_VP9)
......@@ -501,7 +515,7 @@ public final class DashTest extends ActivityInstrumentationTestCase2<HostActivit
.setActionSchedule(SEEKING_SCHEDULE)
.setAudioVideoFormats(DashTestData.WIDEVINE_VP9_AAC_AUDIO_REPRESENTATION_ID,
DashTestData.WIDEVINE_VP9_CDD_ADAPTIVE)
.runTest(getActivity(), getInstrumentation());
.run();
}
public void testWidevineVp9AdaptiveWithRendererDisabling() throws DecoderQueryException {
......@@ -509,7 +523,7 @@ public final class DashTest extends ActivityInstrumentationTestCase2<HostActivit
// Pass.
return;
}
new DashHostedTest.Builder(TAG)
testRunner
.setStreamName("test_widevine_vp9_adaptive_with_renderer_disabling")
.setManifestUrl(DashTestData.WIDEVINE_VP9_MANIFEST)
.setWidevineMimeType(MimeTypes.VIDEO_VP9)
......@@ -518,7 +532,7 @@ public final class DashTest extends ActivityInstrumentationTestCase2<HostActivit
.setActionSchedule(RENDERER_DISABLING_SCHEDULE)
.setAudioVideoFormats(DashTestData.WIDEVINE_VP9_AAC_AUDIO_REPRESENTATION_ID,
DashTestData.WIDEVINE_VP9_CDD_ADAPTIVE)
.runTest(getActivity(), getInstrumentation());
.run();
}
// H264: Other frame-rates for output buffer count assertions.
......@@ -529,7 +543,7 @@ public final class DashTest extends ActivityInstrumentationTestCase2<HostActivit
// Pass.
return;
}
new DashHostedTest.Builder(TAG)
testRunner
.setStreamName("test_widevine_23fps_h264_fixed")
.setManifestUrl(DashTestData.WIDEVINE_H264_23_MANIFEST)
.setWidevineMimeType(MimeTypes.VIDEO_H264)
......@@ -537,7 +551,7 @@ public final class DashTest extends ActivityInstrumentationTestCase2<HostActivit
.setCanIncludeAdditionalVideoFormats(false)
.setAudioVideoFormats(DashTestData.WIDEVINE_AAC_AUDIO_REPRESENTATION_ID,
DashTestData.WIDEVINE_H264_BASELINE_480P_23FPS_VIDEO_REPRESENTATION_ID)
.runTest(getActivity(), getInstrumentation());
.run();
}
// 24 fps.
......@@ -546,7 +560,7 @@ public final class DashTest extends ActivityInstrumentationTestCase2<HostActivit
// Pass.
return;
}
new DashHostedTest.Builder(TAG)
testRunner
.setStreamName("test_widevine_24fps_h264_fixed")
.setManifestUrl(DashTestData.WIDEVINE_H264_24_MANIFEST)
.setWidevineMimeType(MimeTypes.VIDEO_H264)
......@@ -554,7 +568,7 @@ public final class DashTest extends ActivityInstrumentationTestCase2<HostActivit
.setCanIncludeAdditionalVideoFormats(false)
.setAudioVideoFormats(DashTestData.WIDEVINE_AAC_AUDIO_REPRESENTATION_ID,
DashTestData.WIDEVINE_H264_BASELINE_480P_24FPS_VIDEO_REPRESENTATION_ID)
.runTest(getActivity(), getInstrumentation());
.run();
}
// 29.97 fps.
......@@ -563,7 +577,7 @@ public final class DashTest extends ActivityInstrumentationTestCase2<HostActivit
// Pass.
return;
}
new DashHostedTest.Builder(TAG)
testRunner
.setStreamName("test_widevine_29fps_h264_fixed")
.setManifestUrl(DashTestData.WIDEVINE_H264_29_MANIFEST)
.setWidevineMimeType(MimeTypes.VIDEO_H264)
......@@ -571,7 +585,7 @@ public final class DashTest extends ActivityInstrumentationTestCase2<HostActivit
.setCanIncludeAdditionalVideoFormats(false)
.setAudioVideoFormats(DashTestData.WIDEVINE_AAC_AUDIO_REPRESENTATION_ID,
DashTestData.WIDEVINE_H264_BASELINE_480P_29FPS_VIDEO_REPRESENTATION_ID)
.runTest(getActivity(), getInstrumentation());
.run();
}
// Internal.
......
......@@ -137,6 +137,16 @@ public final class DashTestData {
WIDEVINE_VP9_180P_VIDEO_REPRESENTATION_ID,
WIDEVINE_VP9_360P_VIDEO_REPRESENTATION_ID};
private static final String WIDEVINE_LICENSE_URL =
"https://proxy.uat.widevine.com/proxy?provider=widevine_test&video_id=";
private static final String WIDEVINE_SW_CRYPTO_CONTENT_ID = "exoplayer_test_1";
private static final String WIDEVINE_HW_SECURE_DECODE_CONTENT_ID = "exoplayer_test_2";
public static String getWidevineLicenseUrl(boolean useL1Widevine) {
return WIDEVINE_LICENSE_URL
+ (useL1Widevine ? WIDEVINE_HW_SECURE_DECODE_CONTENT_ID : WIDEVINE_SW_CRYPTO_CONTENT_ID);
}
private DashTestData() {
}
......
......@@ -66,14 +66,11 @@ import java.util.Arrays;
import java.util.List;
import junit.framework.AssertionFailedError;
/**
* A {@link HostedTest} for DASH playback tests.
*/
@TargetApi(16)
public final class DashHostedTest extends ExoHostedTest {
/** {@link DashHostedTest} builder. */
public final class DashTestRunner {
/** {@link DashHostedTest} builder. */
public static final class Builder {
static final int VIDEO_RENDERER_INDEX = 0;
static final int AUDIO_RENDERER_INDEX = 1;
private static final long TEST_TIMEOUT_MS = 5 * 60 * 1000;
......@@ -84,7 +81,20 @@ public final class DashHostedTest extends ExoHostedTest {
// if the device advertises support for them.
private static final boolean ALLOW_ADDITIONAL_VIDEO_FORMATS = Util.SDK_INT >= 24;
private static final String AUDIO_TAG_SUFFIX = ":Audio";
private static final String VIDEO_TAG_SUFFIX = ":Video";
private static final int MIN_LOADABLE_RETRY_COUNT = 10;
private static final int MAX_CONSECUTIVE_DROPPED_VIDEO_FRAMES = 10;
private static final float MAX_DROPPED_VIDEO_FRAME_FRACTION = 0.01f;
private static final String WIDEVINE_SECURITY_LEVEL_1 = "L1";
private static final String WIDEVINE_SECURITY_LEVEL_3 = "L3";
private static final String SECURITY_LEVEL_PROPERTY = "securityLevel";
private final String tag;
private final HostActivity activity;
private final Instrumentation instrumentation;
private String streamName;
private boolean fullPlaybackNoSeeking;
......@@ -96,65 +106,81 @@ public final class DashHostedTest extends ExoHostedTest {
private String manifestUrl;
private boolean useL1Widevine;
private String widevineLicenseUrl;
private DataSource.Factory dataSourceFactory;
public Builder(String tag) {
@TargetApi(18)
@SuppressWarnings("ResourceType")
public static boolean isL1WidevineAvailable(String mimeType) {
try {
// Force L3 if secure decoder is not available.
if (MediaCodecUtil.getDecoderInfo(mimeType, true) == null) {
return false;
}
MediaDrm mediaDrm = new MediaDrm(WIDEVINE_UUID);
String securityProperty = mediaDrm.getPropertyString(SECURITY_LEVEL_PROPERTY);
mediaDrm.release();
return WIDEVINE_SECURITY_LEVEL_1.equals(securityProperty);
} catch (MediaCodecUtil.DecoderQueryException | UnsupportedSchemeException e) {
throw new IllegalStateException(e);
}
}
public DashTestRunner(String tag, HostActivity activity, Instrumentation instrumentation) {
this.tag = tag;
this.activity = activity;
this.instrumentation = instrumentation;
}
public Builder setStreamName(String streamName) {
public DashTestRunner setStreamName(String streamName) {
this.streamName = streamName;
return this;
}
public Builder setFullPlaybackNoSeeking(boolean fullPlaybackNoSeeking) {
public DashTestRunner setFullPlaybackNoSeeking(boolean fullPlaybackNoSeeking) {
this.fullPlaybackNoSeeking = fullPlaybackNoSeeking;
return this;
}
public Builder setCanIncludeAdditionalVideoFormats(
public DashTestRunner setCanIncludeAdditionalVideoFormats(
boolean canIncludeAdditionalVideoFormats) {
this.canIncludeAdditionalVideoFormats = canIncludeAdditionalVideoFormats
&& ALLOW_ADDITIONAL_VIDEO_FORMATS;
return this;
}
public Builder setActionSchedule(ActionSchedule actionSchedule) {
public DashTestRunner setActionSchedule(ActionSchedule actionSchedule) {
this.actionSchedule = actionSchedule;
return this;
}
public Builder setOfflineLicenseKeySetId(byte[] offlineLicenseKeySetId) {
public DashTestRunner setOfflineLicenseKeySetId(byte[] offlineLicenseKeySetId) {
this.offlineLicenseKeySetId = offlineLicenseKeySetId;
return this;
}
public Builder setAudioVideoFormats(String audioFormat, String... videoFormats) {
public DashTestRunner setAudioVideoFormats(String audioFormat, String... videoFormats) {
this.audioFormat = audioFormat;
this.videoFormats = videoFormats;
return this;
}
public Builder setManifestUrl(String manifestUrl) {
public DashTestRunner setManifestUrl(String manifestUrl) {
this.manifestUrl = manifestUrl;
return this;
}
public Builder setWidevineMimeType(String mimeType) {
public DashTestRunner setWidevineMimeType(String mimeType) {
this.useL1Widevine = isL1WidevineAvailable(mimeType);
this.widevineLicenseUrl = getWidevineLicenseUrl(useL1Widevine);
this.widevineLicenseUrl = DashTestData.getWidevineLicenseUrl(useL1Widevine);
return this;
}
private DashHostedTest createDashHostedTest(boolean canIncludeAdditionalVideoFormats,
boolean isCddLimitedRetry, Instrumentation instrumentation) {
MetricsLogger metricsLogger = MetricsLogger.Factory.createDefault(instrumentation, tag,
REPORT_NAME, REPORT_OBJECT_NAME);
return new DashHostedTest(tag, streamName, manifestUrl, metricsLogger, fullPlaybackNoSeeking,
audioFormat, canIncludeAdditionalVideoFormats, isCddLimitedRetry, actionSchedule,
offlineLicenseKeySetId, widevineLicenseUrl, useL1Widevine, videoFormats);
public DashTestRunner setDataSourceFactory(DataSource.Factory dataSourceFactory) {
this.dataSourceFactory = dataSourceFactory;
return this;
}
public void runTest(HostActivity activity, Instrumentation instrumentation) {
public void run() {
DashHostedTest test = createDashHostedTest(canIncludeAdditionalVideoFormats, false,
instrumentation);
activity.runTest(test, TEST_TIMEOUT_MS);
......@@ -165,24 +191,21 @@ public final class DashHostedTest extends ExoHostedTest {
}
}
private DashHostedTest createDashHostedTest(boolean canIncludeAdditionalVideoFormats,
boolean isCddLimitedRetry, Instrumentation instrumentation) {
MetricsLogger metricsLogger = MetricsLogger.Factory.createDefault(instrumentation, tag,
REPORT_NAME, REPORT_OBJECT_NAME);
return new DashHostedTest(tag, streamName, manifestUrl, metricsLogger, fullPlaybackNoSeeking,
audioFormat, canIncludeAdditionalVideoFormats, isCddLimitedRetry, actionSchedule,
offlineLicenseKeySetId, widevineLicenseUrl, useL1Widevine, dataSourceFactory,
videoFormats);
}
private static final String AUDIO_TAG_SUFFIX = ":Audio";
private static final String VIDEO_TAG_SUFFIX = ":Video";
static final int VIDEO_RENDERER_INDEX = 0;
static final int AUDIO_RENDERER_INDEX = 1;
private static final int MIN_LOADABLE_RETRY_COUNT = 10;
private static final int MAX_CONSECUTIVE_DROPPED_VIDEO_FRAMES = 10;
private static final float MAX_DROPPED_VIDEO_FRAME_FRACTION = 0.01f;
private static final String WIDEVINE_LICENSE_URL =
"https://proxy.uat.widevine.com/proxy?provider=widevine_test&video_id=";
private static final String WIDEVINE_SW_CRYPTO_CONTENT_ID = "exoplayer_test_1";
private static final String WIDEVINE_HW_SECURE_DECODE_CONTENT_ID = "exoplayer_test_2";
private static final String WIDEVINE_SECURITY_LEVEL_1 = "L1";
private static final String WIDEVINE_SECURITY_LEVEL_3 = "L3";
private static final String SECURITY_LEVEL_PROPERTY = "securityLevel";
/**
* A {@link HostedTest} for DASH playback tests.
*/
@TargetApi(16)
private static final class DashHostedTest extends ExoHostedTest {
private final String streamName;
private final String manifestUrl;
......@@ -193,30 +216,9 @@ public final class DashHostedTest extends ExoHostedTest {
private final byte[] offlineLicenseKeySetId;
private final String widevineLicenseUrl;
private final boolean useL1Widevine;
private final DataSource.Factory dataSourceFactory;
boolean needsCddLimitedRetry;
public static String getWidevineLicenseUrl(boolean useL1Widevine) {
return WIDEVINE_LICENSE_URL
+ (useL1Widevine ? WIDEVINE_HW_SECURE_DECODE_CONTENT_ID : WIDEVINE_SW_CRYPTO_CONTENT_ID);
}
@TargetApi(18)
@SuppressWarnings("ResourceType")
public static boolean isL1WidevineAvailable(String mimeType) {
try {
// Force L3 if secure decoder is not available.
if (MediaCodecUtil.getDecoderInfo(mimeType, true) == null) {
return false;
}
MediaDrm mediaDrm = new MediaDrm(WIDEVINE_UUID);
String securityProperty = mediaDrm.getPropertyString(SECURITY_LEVEL_PROPERTY);
mediaDrm.release();
return WIDEVINE_SECURITY_LEVEL_1.equals(securityProperty);
} catch (MediaCodecUtil.DecoderQueryException | UnsupportedSchemeException e) {
throw new IllegalStateException(e);
}
}
private boolean needsCddLimitedRetry;
/**
* @param tag A tag to use for logging.
......@@ -233,13 +235,14 @@ public final class DashHostedTest extends ExoHostedTest {
* @param widevineLicenseUrl If the video is Widevine encrypted, this is the license url
* otherwise null.
* @param useL1Widevine Whether to use L1 Widevine.
* @param dataSourceFactory If not null, used to load manifest and media.
* @param videoFormats The video formats.
*/
private DashHostedTest(String tag, String streamName, String manifestUrl,
MetricsLogger metricsLogger, boolean fullPlaybackNoSeeking, String audioFormat,
boolean canIncludeAdditionalVideoFormats, boolean isCddLimitedRetry,
ActionSchedule actionSchedule, byte[] offlineLicenseKeySetId, String widevineLicenseUrl,
boolean useL1Widevine, String... videoFormats) {
boolean useL1Widevine, DataSource.Factory dataSourceFactory, String... videoFormats) {
super(tag, fullPlaybackNoSeeking);
Assertions.checkArgument(!(isCddLimitedRetry && canIncludeAdditionalVideoFormats));
this.streamName = streamName;
......@@ -250,6 +253,7 @@ public final class DashHostedTest extends ExoHostedTest {
this.offlineLicenseKeySetId = offlineLicenseKeySetId;
this.widevineLicenseUrl = widevineLicenseUrl;
this.useL1Widevine = useL1Widevine;
this.dataSourceFactory = dataSourceFactory;
trackSelector = new DashTestTrackSelector(tag, audioFormat, videoFormats,
canIncludeAdditionalVideoFormats);
if (actionSchedule != null) {
......@@ -301,9 +305,11 @@ public final class DashHostedTest extends ExoHostedTest {
@Override
protected MediaSource buildSource(HostActivity host, String userAgent,
TransferListener<? super DataSource> mediaTransferListener) {
DataSource.Factory manifestDataSourceFactory = new DefaultDataSourceFactory(host, userAgent);
DataSource.Factory mediaDataSourceFactory = new DefaultDataSourceFactory(host, userAgent,
mediaTransferListener);
DataSource.Factory manifestDataSourceFactory = dataSourceFactory != null
? dataSourceFactory : new DefaultDataSourceFactory(host, userAgent);
DataSource.Factory mediaDataSourceFactory = dataSourceFactory != null
? dataSourceFactory
: new DefaultDataSourceFactory(host, userAgent, mediaTransferListener);
Uri manifestUri = Uri.parse(manifestUrl);
DefaultDashChunkSource.Factory chunkSourceFactory = new DefaultDashChunkSource.Factory(
mediaDataSourceFactory);
......@@ -330,8 +336,10 @@ public final class DashHostedTest extends ExoHostedTest {
protected void assertPassed(DecoderCounters audioCounters, DecoderCounters videoCounters) {
if (fullPlaybackNoSeeking) {
// We shouldn't have skipped any output buffers.
DecoderCountersUtil.assertSkippedOutputBufferCount(tag + AUDIO_TAG_SUFFIX, audioCounters, 0);
DecoderCountersUtil.assertSkippedOutputBufferCount(tag + VIDEO_TAG_SUFFIX, videoCounters, 0);
DecoderCountersUtil
.assertSkippedOutputBufferCount(tag + AUDIO_TAG_SUFFIX, audioCounters, 0);
DecoderCountersUtil
.assertSkippedOutputBufferCount(tag + VIDEO_TAG_SUFFIX, videoCounters, 0);
// We allow one fewer output buffer due to the way that MediaCodecRenderer and the
// underlying decoders handle the end of stream. This should be tightened up in the future.
DecoderCountersUtil.assertTotalOutputBufferCount(tag + AUDIO_TAG_SUFFIX, audioCounters,
......@@ -360,6 +368,8 @@ public final class DashHostedTest extends ExoHostedTest {
}
}
}
private static final class DashTestTrackSelector extends MappingTrackSelector {
private final String tag;
......
......@@ -37,7 +37,7 @@ public final class DashWidevineOfflineTest extends ActivityInstrumentationTestCa
private static final String TAG = "DashWidevineOfflineTest";
private static final String USER_AGENT = "ExoPlayerPlaybackTests";
private DashHostedTest.Builder builder;
private DashTestRunner testRunner;
private DefaultHttpDataSourceFactory httpDataSourceFactory;
private OfflineLicenseHelper<FrameworkMediaCrypto> offlineLicenseHelper;
private byte[] offlineLicenseKeySetId;
......@@ -49,7 +49,7 @@ public final class DashWidevineOfflineTest extends ActivityInstrumentationTestCa
@Override
protected void setUp() throws Exception {
super.setUp();
builder = new DashHostedTest.Builder(TAG)
testRunner = new DashTestRunner(TAG, getActivity(), getInstrumentation())
.setStreamName("test_widevine_h264_fixed_offline")
.setManifestUrl(DashTestData.WIDEVINE_H264_MANIFEST)
.setWidevineMimeType(MimeTypes.VIDEO_H264)
......@@ -58,8 +58,8 @@ public final class DashWidevineOfflineTest extends ActivityInstrumentationTestCa
.setAudioVideoFormats(DashTestData.WIDEVINE_AAC_AUDIO_REPRESENTATION_ID,
DashTestData.WIDEVINE_H264_CDD_FIXED);
boolean useL1Widevine = DashHostedTest.isL1WidevineAvailable(MimeTypes.VIDEO_H264);
String widevineLicenseUrl = DashHostedTest.getWidevineLicenseUrl(useL1Widevine);
boolean useL1Widevine = DashTestRunner.isL1WidevineAvailable(MimeTypes.VIDEO_H264);
String widevineLicenseUrl = DashTestData.getWidevineLicenseUrl(useL1Widevine);
httpDataSourceFactory = new DefaultHttpDataSourceFactory(USER_AGENT);
offlineLicenseHelper = OfflineLicenseHelper.newWidevineInstance(widevineLicenseUrl,
httpDataSourceFactory);
......@@ -67,12 +67,15 @@ public final class DashWidevineOfflineTest extends ActivityInstrumentationTestCa
@Override
protected void tearDown() throws Exception {
testRunner = null;
if (offlineLicenseKeySetId != null) {
releaseLicense();
}
if (offlineLicenseHelper != null) {
offlineLicenseHelper.releaseResources();
}
offlineLicenseHelper = null;
httpDataSourceFactory = null;
super.tearDown();
}
......@@ -83,7 +86,7 @@ public final class DashWidevineOfflineTest extends ActivityInstrumentationTestCa
return; // Pass.
}
downloadLicense();
builder.runTest(getActivity(), getInstrumentation());
testRunner.run();
// Renew license after playback should still work
offlineLicenseKeySetId = offlineLicenseHelper.renew(offlineLicenseKeySetId);
......@@ -98,7 +101,7 @@ public final class DashWidevineOfflineTest extends ActivityInstrumentationTestCa
releaseLicense(); // keySetId no longer valid.
try {
builder.runTest(getActivity(), getInstrumentation());
testRunner.run();
fail("Playback should fail because the license has been released.");
} catch (Throwable e) {
// Get the root cause
......@@ -138,7 +141,7 @@ public final class DashWidevineOfflineTest extends ActivityInstrumentationTestCa
}
// DefaultDrmSessionManager should renew the license and stream play fine
builder.runTest(getActivity(), getInstrumentation());
testRunner.run();
}
public void testWidevineOfflineLicenseExpiresOnPause() throws Exception {
......@@ -157,9 +160,7 @@ public final class DashWidevineOfflineTest extends ActivityInstrumentationTestCa
.delay(3000).pause().delay(licenseDuration * 1000 + 2000).play().build();
// DefaultDrmSessionManager should renew the license and stream play fine
builder
.setActionSchedule(schedule)
.runTest(getActivity(), getInstrumentation());
testRunner.setActionSchedule(schedule).run();
}
private void downloadLicense() throws InterruptedException, DrmSessionException, IOException {
......@@ -167,7 +168,7 @@ public final class DashWidevineOfflineTest extends ActivityInstrumentationTestCa
httpDataSourceFactory.createDataSource(), DashTestData.WIDEVINE_H264_MANIFEST);
Assert.assertNotNull(offlineLicenseKeySetId);
Assert.assertTrue(offlineLicenseKeySetId.length > 0);
builder.setOfflineLicenseKeySetId(offlineLicenseKeySetId);
testRunner.setOfflineLicenseKeySetId(offlineLicenseKeySetId);
}
private void releaseLicense() throws DrmSessionException {
......
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