Use JUnit's Assume to skip Widevine GTS tests on non-GMS devices

DashTestRunner.setWidevineInfo instantiates a Widevine MediaDrm to check
for L1 support, which fails on GMS devices that don't support Widevine.

The Widevine tests should be skipped on these devices, but the
setWidevineInfo call happens in @Before before the skipping logic
inside the test.

This change moves the skipping logic to the beginning of @Before, and
uses Assume to ensure the test isn't run.

This will also report the test as 'skipped due to unmet assumption'
which is more precise than 'passed'.

PiperOrigin-RevId: 399452734
This commit is contained in:
ibaker 2021-09-28 17:01:19 +01:00 committed by bachinger
parent d9cfebd895
commit b6b39cf7cf
4 changed files with 88 additions and 111 deletions

View file

@ -16,6 +16,8 @@
package com.google.android.exoplayer2.playbacktests.gts;
import static com.google.android.exoplayer2.playbacktests.gts.GtsTestUtil.shouldSkipWidevineTest;
import static org.junit.Assume.assumeFalse;
import static org.junit.Assume.assumeTrue;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.rule.ActivityTestRule;
@ -59,6 +61,8 @@ public final class CommonEncryptionDrmTest {
@Before
public void setUp() {
assumeFalse(shouldSkipWidevineTest(testRule.getActivity()));
testRunner =
new DashTestRunner(TAG, testRule.getActivity())
.setWidevineInfo(MimeTypes.VIDEO_H264, false)
@ -74,10 +78,6 @@ public final class CommonEncryptionDrmTest {
@Test
public void cencSchemeTypeV18() {
if (Util.SDK_INT < 18 || shouldSkipWidevineTest(testRule.getActivity())) {
// Pass.
return;
}
testRunner
.setStreamName("test_widevine_h264_scheme_cenc")
.setManifestUrl(DashTestData.WIDEVINE_SCHEME_CENC)
@ -86,12 +86,9 @@ public final class CommonEncryptionDrmTest {
@Test
public void cbcsSchemeTypeV25() {
if (Util.SDK_INT < 25 || shouldSkipWidevineTest(testRule.getActivity())) {
// cbcs support was added in API 24, but it is stable from API 25 onwards.
// See [internal: b/65634809].
// Pass.
return;
}
// cbcs support was added in API 24, but it is stable from API 25 onwards.
// See [internal: b/65634809].
assumeTrue(Util.SDK_INT >= 25);
testRunner
.setStreamName("test_widevine_h264_scheme_cbcs")
.setManifestUrl(DashTestData.WIDEVINE_SCHEME_CBCS)

View file

@ -17,6 +17,8 @@ package com.google.android.exoplayer2.playbacktests.gts;
import static com.google.android.exoplayer2.playbacktests.gts.GtsTestUtil.shouldSkipWidevineTest;
import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assume.assumeFalse;
import static org.junit.Assume.assumeTrue;
import android.content.pm.PackageManager;
import androidx.test.ext.junit.runners.AndroidJUnit4;
@ -387,10 +389,8 @@ public final class DashStreamingTest {
@Test
public void widevineH264FixedV18() throws Exception {
if (Util.SDK_INT < 18 || shouldSkipWidevineTest(testRule.getActivity())) {
// Pass.
return;
}
assumeFalse(shouldSkipWidevineTest(testRule.getActivity()));
testRunner
.setStreamName("test_widevine_h264_fixed")
.setManifestUrl(DashTestData.WIDEVINE_H264_MANIFEST)
@ -404,12 +404,9 @@ public final class DashStreamingTest {
@Test
public void widevineH264AdaptiveV18() throws Exception {
if (Util.SDK_INT < 18
|| shouldSkipAdaptiveTest(MimeTypes.VIDEO_H264)
|| shouldSkipWidevineTest(testRule.getActivity())) {
// Pass.
return;
}
assumeFalse(shouldSkipAdaptiveTest(MimeTypes.VIDEO_H264));
assumeFalse(shouldSkipWidevineTest(testRule.getActivity()));
testRunner
.setStreamName("test_widevine_h264_adaptive")
.setManifestUrl(DashTestData.WIDEVINE_H264_MANIFEST)
@ -424,12 +421,9 @@ public final class DashStreamingTest {
@Test
public void widevineH264AdaptiveWithSeekingV18() throws Exception {
if (Util.SDK_INT < 18
|| shouldSkipAdaptiveTest(MimeTypes.VIDEO_H264)
|| shouldSkipWidevineTest(testRule.getActivity())) {
// Pass.
return;
}
assumeFalse(shouldSkipAdaptiveTest(MimeTypes.VIDEO_H264));
assumeFalse(shouldSkipWidevineTest(testRule.getActivity()));
testRunner
.setStreamName("test_widevine_h264_adaptive_with_seeking")
.setManifestUrl(DashTestData.WIDEVINE_H264_MANIFEST)
@ -445,12 +439,9 @@ public final class DashStreamingTest {
@Test
public void widevineH264AdaptiveWithRendererDisablingV18() throws Exception {
if (Util.SDK_INT < 18
|| shouldSkipAdaptiveTest(MimeTypes.VIDEO_H264)
|| GtsTestUtil.shouldSkipWidevineTest(testRule.getActivity())) {
// Pass.
return;
}
assumeFalse(shouldSkipAdaptiveTest(MimeTypes.VIDEO_H264));
assumeFalse(shouldSkipWidevineTest(testRule.getActivity()));
testRunner
.setStreamName("test_widevine_h264_adaptive_with_renderer_disabling")
.setManifestUrl(DashTestData.WIDEVINE_H264_MANIFEST)
@ -468,10 +459,10 @@ public final class DashStreamingTest {
@Test
public void widevineH265FixedV23() throws Exception {
if (Util.SDK_INT < 23 || GtsTestUtil.shouldSkipWidevineTest(testRule.getActivity()) || isPc()) {
// Pass.
return;
}
assumeTrue(Util.SDK_INT >= 23);
assumeFalse(shouldSkipWidevineTest(testRule.getActivity()));
assumeFalse(isPc());
testRunner
.setStreamName("test_widevine_h265_fixed")
.setManifestUrl(DashTestData.WIDEVINE_H265_MANIFEST)
@ -485,10 +476,10 @@ public final class DashStreamingTest {
@Test
public void widevineH265AdaptiveV24() throws Exception {
if (Util.SDK_INT < 24 || GtsTestUtil.shouldSkipWidevineTest(testRule.getActivity()) || isPc()) {
// Pass.
return;
}
assumeTrue(Util.SDK_INT >= 24);
assumeFalse(shouldSkipWidevineTest(testRule.getActivity()));
assumeFalse(isPc());
testRunner
.setStreamName("test_widevine_h265_adaptive")
.setManifestUrl(DashTestData.WIDEVINE_H265_MANIFEST)
@ -503,10 +494,10 @@ public final class DashStreamingTest {
@Test
public void widevineH265AdaptiveWithSeekingV24() throws Exception {
if (Util.SDK_INT < 24 || GtsTestUtil.shouldSkipWidevineTest(testRule.getActivity()) || isPc()) {
// Pass.
return;
}
assumeTrue(Util.SDK_INT >= 24);
assumeFalse(shouldSkipWidevineTest(testRule.getActivity()));
assumeFalse(isPc());
testRunner
.setStreamName("test_widevine_h265_adaptive_with_seeking")
.setManifestUrl(DashTestData.WIDEVINE_H265_MANIFEST)
@ -522,10 +513,10 @@ public final class DashStreamingTest {
@Test
public void widevineH265AdaptiveWithRendererDisablingV24() throws Exception {
if (Util.SDK_INT < 24 || GtsTestUtil.shouldSkipWidevineTest(testRule.getActivity()) || isPc()) {
// Pass.
return;
}
assumeTrue(Util.SDK_INT >= 24);
assumeFalse(shouldSkipWidevineTest(testRule.getActivity()));
assumeFalse(isPc());
testRunner
.setStreamName("test_widevine_h265_adaptive_with_renderer_disabling")
.setManifestUrl(DashTestData.WIDEVINE_H265_MANIFEST)
@ -543,10 +534,9 @@ public final class DashStreamingTest {
@Test
public void widevineVp9Fixed360pV23() throws Exception {
if (Util.SDK_INT < 23 || GtsTestUtil.shouldSkipWidevineTest(testRule.getActivity())) {
// Pass.
return;
}
assumeTrue(Util.SDK_INT >= 23);
assumeFalse(shouldSkipWidevineTest(testRule.getActivity()));
testRunner
.setStreamName("test_widevine_vp9_fixed_360p")
.setManifestUrl(DashTestData.WIDEVINE_VP9_MANIFEST)
@ -561,10 +551,9 @@ public final class DashStreamingTest {
@Test
public void widevineVp9AdaptiveV24() throws Exception {
if (Util.SDK_INT < 24 || GtsTestUtil.shouldSkipWidevineTest(testRule.getActivity())) {
// Pass.
return;
}
assumeTrue(Util.SDK_INT >= 24);
assumeFalse(shouldSkipWidevineTest(testRule.getActivity()));
testRunner
.setStreamName("test_widevine_vp9_adaptive")
.setManifestUrl(DashTestData.WIDEVINE_VP9_MANIFEST)
@ -579,10 +568,9 @@ public final class DashStreamingTest {
@Test
public void widevineVp9AdaptiveWithSeekingV24() throws Exception {
if (Util.SDK_INT < 24 || GtsTestUtil.shouldSkipWidevineTest(testRule.getActivity())) {
// Pass.
return;
}
assumeTrue(Util.SDK_INT >= 24);
assumeFalse(shouldSkipWidevineTest(testRule.getActivity()));
testRunner
.setStreamName("test_widevine_vp9_adaptive_with_seeking")
.setManifestUrl(DashTestData.WIDEVINE_VP9_MANIFEST)
@ -598,10 +586,9 @@ public final class DashStreamingTest {
@Test
public void widevineVp9AdaptiveWithRendererDisablingV24() throws Exception {
if (Util.SDK_INT < 24 || GtsTestUtil.shouldSkipWidevineTest(testRule.getActivity())) {
// Pass.
return;
}
assumeTrue(Util.SDK_INT >= 24);
assumeFalse(shouldSkipWidevineTest(testRule.getActivity()));
testRunner
.setStreamName("test_widevine_vp9_adaptive_with_renderer_disabling")
.setManifestUrl(DashTestData.WIDEVINE_VP9_MANIFEST)
@ -620,10 +607,9 @@ public final class DashStreamingTest {
// 23.976 fps.
@Test
public void widevine23FpsH264FixedV23() throws Exception {
if (Util.SDK_INT < 23 || GtsTestUtil.shouldSkipWidevineTest(testRule.getActivity())) {
// Pass.
return;
}
assumeTrue(Util.SDK_INT >= 23);
assumeFalse(shouldSkipWidevineTest(testRule.getActivity()));
testRunner
.setStreamName("test_widevine_23fps_h264_fixed")
.setManifestUrl(DashTestData.WIDEVINE_H264_23_MANIFEST)
@ -639,10 +625,9 @@ public final class DashStreamingTest {
// 24 fps.
@Test
public void widevine24FpsH264FixedV23() throws Exception {
if (Util.SDK_INT < 23 || GtsTestUtil.shouldSkipWidevineTest(testRule.getActivity())) {
// Pass.
return;
}
assumeTrue(Util.SDK_INT >= 23);
assumeFalse(shouldSkipWidevineTest(testRule.getActivity()));
testRunner
.setStreamName("test_widevine_24fps_h264_fixed")
.setManifestUrl(DashTestData.WIDEVINE_H264_24_MANIFEST)
@ -658,10 +643,9 @@ public final class DashStreamingTest {
// 29.97 fps.
@Test
public void widevine29FpsH264FixedV23() throws Exception {
if (Util.SDK_INT < 23 || GtsTestUtil.shouldSkipWidevineTest(testRule.getActivity())) {
// Pass.
return;
}
assumeTrue(Util.SDK_INT >= 23);
assumeFalse(shouldSkipWidevineTest(testRule.getActivity()));
testRunner
.setStreamName("test_widevine_29fps_h264_fixed")
.setManifestUrl(DashTestData.WIDEVINE_H264_29_MANIFEST)
@ -687,10 +671,9 @@ public final class DashStreamingTest {
@Test
public void decoderInfoH265V24() throws Exception {
if (Util.SDK_INT < 24 || isPc()) {
// Pass.
return;
}
assumeTrue(Util.SDK_INT >= 24);
assumeFalse(isPc());
assertThat(
MediaCodecUtil.getDecoderInfo(
MimeTypes.VIDEO_H265, /* secure= */ false, /* tunneling= */ false)
@ -700,10 +683,8 @@ public final class DashStreamingTest {
@Test
public void decoderInfoVP9V24() throws Exception {
if (Util.SDK_INT < 24) {
// Pass.
return;
}
assumeTrue(Util.SDK_INT >= 24);
assertThat(
MediaCodecUtil.getDecoderInfo(
MimeTypes.VIDEO_VP9, /* secure= */ false, /* tunneling= */ false)

View file

@ -15,9 +15,12 @@
*/
package com.google.android.exoplayer2.playbacktests.gts;
import static com.google.android.exoplayer2.playbacktests.gts.GtsTestUtil.shouldSkipWidevineTest;
import static com.google.common.truth.Truth.assertThat;
import static com.google.common.truth.Truth.assertWithMessage;
import static org.junit.Assert.fail;
import static org.junit.Assume.assumeFalse;
import static org.junit.Assume.assumeTrue;
import android.media.MediaDrm.MediaDrmStateException;
import android.net.Uri;
@ -61,6 +64,8 @@ public final class DashWidevineOfflineTest {
@Before
public void setUp() throws Exception {
assumeFalse(shouldSkipWidevineTest(testRule.getActivity()));
testRunner =
new DashTestRunner(TAG, testRule.getActivity())
.setStreamName("test_widevine_h264_fixed_offline")
@ -75,13 +80,11 @@ public final class DashWidevineOfflineTest {
boolean useL1Widevine = DashTestRunner.isL1WidevineAvailable(MimeTypes.VIDEO_H264);
String widevineLicenseUrl = DashTestData.getWidevineLicenseUrl(true, useL1Widevine);
httpDataSourceFactory = new DefaultHttpDataSource.Factory();
if (Util.SDK_INT >= 18) {
offlineLicenseHelper =
OfflineLicenseHelper.newWidevineInstance(
widevineLicenseUrl,
httpDataSourceFactory,
new DrmSessionEventListener.EventDispatcher());
}
offlineLicenseHelper =
OfflineLicenseHelper.newWidevineInstance(
widevineLicenseUrl,
httpDataSourceFactory,
new DrmSessionEventListener.EventDispatcher());
}
@After
@ -90,9 +93,7 @@ public final class DashWidevineOfflineTest {
if (offlineLicenseKeySetId != null) {
releaseLicense();
}
if (offlineLicenseHelper != null) {
offlineLicenseHelper.release();
}
offlineLicenseHelper.release();
offlineLicenseHelper = null;
httpDataSourceFactory = null;
}
@ -104,9 +105,8 @@ public final class DashWidevineOfflineTest {
"Needs to be reconfigured/rewritten with an offline-compatible licence [internal"
+ " b/176960595].")
public void widevineOfflineLicenseV22() throws Exception {
if (Util.SDK_INT < 22 || GtsTestUtil.shouldSkipWidevineTest(testRule.getActivity())) {
return; // Pass.
}
assumeTrue(Util.SDK_INT >= 22);
downloadLicense();
testRunner.run();
@ -120,11 +120,8 @@ public final class DashWidevineOfflineTest {
"Needs to be reconfigured/rewritten with an offline-compatible licence [internal"
+ " b/176960595].")
public void widevineOfflineReleasedLicenseV22() throws Throwable {
if (Util.SDK_INT < 22
|| Util.SDK_INT > 28
|| GtsTestUtil.shouldSkipWidevineTest(testRule.getActivity())) {
return; // Pass.
}
assumeTrue(Util.SDK_INT >= 22 && Util.SDK_INT <= 28);
downloadLicense();
releaseLicense(); // keySetId no longer valid.
@ -148,9 +145,8 @@ public final class DashWidevineOfflineTest {
"Needs to be reconfigured/rewritten with an offline-compatible licence [internal"
+ " b/176960595].")
public void widevineOfflineReleasedLicenseV29() throws Throwable {
if (Util.SDK_INT < 29 || GtsTestUtil.shouldSkipWidevineTest(testRule.getActivity())) {
return; // Pass.
}
assumeTrue(Util.SDK_INT >= 29);
downloadLicense();
releaseLicense(); // keySetId no longer valid.
@ -174,9 +170,8 @@ public final class DashWidevineOfflineTest {
"Needs to be reconfigured/rewritten with an offline-compatible licence [internal"
+ " b/176960595].")
public void widevineOfflineExpiredLicenseV22() throws Exception {
if (Util.SDK_INT < 22 || GtsTestUtil.shouldSkipWidevineTest(testRule.getActivity())) {
return; // Pass.
}
assumeTrue(Util.SDK_INT >= 22);
downloadLicense();
// Wait until the license expires
@ -207,9 +202,8 @@ public final class DashWidevineOfflineTest {
"Needs to be reconfigured/rewritten with an offline-compatible licence [internal"
+ " b/176960595].")
public void widevineOfflineLicenseExpiresOnPauseV22() throws Exception {
if (Util.SDK_INT < 22 || GtsTestUtil.shouldSkipWidevineTest(testRule.getActivity())) {
return; // Pass.
}
assumeTrue(Util.SDK_INT >= 22);
downloadLicense();
// During playback pause until the license expires then continue playback

View file

@ -21,6 +21,7 @@ import static com.google.android.exoplayer2.C.WIDEVINE_UUID;
import android.content.Context;
import android.content.pm.PackageManager;
import android.media.MediaDrm;
import com.google.android.exoplayer2.util.Util;
/** Utility methods for GTS tests. */
public final class GtsTestUtil {
@ -29,6 +30,10 @@ public final class GtsTestUtil {
/** Returns true if the device doesn't support Widevine and this is permitted. */
public static boolean shouldSkipWidevineTest(Context context) {
if (Util.SDK_INT < 18) {
// MediaDrm isn't present until API 18
return true;
}
if (isGmsInstalled(context)) {
// GMS devices are required to support Widevine.
return false;