From a61828a67516d87798fbc203fecb26886e297d5b Mon Sep 17 00:00:00 2001 From: mishragaurav Date: Tue, 19 Jul 2016 06:44:26 -0700 Subject: [PATCH] Merge widevine playback tests to v2. ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=127825954 --- .../playbacktests/gts/DashTest.java | 381 ++++++++++++++++-- .../playbacktests/util/ExoHostedTest.java | 24 +- .../util/LogcatMetricsLogger.java | 5 + .../playbacktests/util/MetricsLogger.java | 9 + .../util/TestMediaDrmCallback.java | 107 +++++ 5 files changed, 481 insertions(+), 45 deletions(-) create mode 100644 playbacktests/src/main/java/com/google/android/exoplayer2/playbacktests/util/TestMediaDrmCallback.java diff --git a/playbacktests/src/main/java/com/google/android/exoplayer2/playbacktests/gts/DashTest.java b/playbacktests/src/main/java/com/google/android/exoplayer2/playbacktests/gts/DashTest.java index ab4948754f..34542d004f 100644 --- a/playbacktests/src/main/java/com/google/android/exoplayer2/playbacktests/gts/DashTest.java +++ b/playbacktests/src/main/java/com/google/android/exoplayer2/playbacktests/gts/DashTest.java @@ -20,6 +20,8 @@ import com.google.android.exoplayer2.ExoPlaybackException; import com.google.android.exoplayer2.ExoPlayer; import com.google.android.exoplayer2.RendererCapabilities; import com.google.android.exoplayer2.decoder.DecoderCounters; +import com.google.android.exoplayer2.drm.StreamingDrmSessionManager; +import com.google.android.exoplayer2.drm.UnsupportedDrmException; import com.google.android.exoplayer2.mediacodec.MediaCodecInfo; import com.google.android.exoplayer2.mediacodec.MediaCodecUtil; import com.google.android.exoplayer2.mediacodec.MediaCodecUtil.DecoderQueryException; @@ -28,6 +30,7 @@ import com.google.android.exoplayer2.playbacktests.util.DecoderCountersUtil; import com.google.android.exoplayer2.playbacktests.util.ExoHostedTest; import com.google.android.exoplayer2.playbacktests.util.HostActivity; import com.google.android.exoplayer2.playbacktests.util.MetricsLogger; +import com.google.android.exoplayer2.playbacktests.util.TestMediaDrmCallback; import com.google.android.exoplayer2.source.MediaSource; import com.google.android.exoplayer2.source.TrackGroup; import com.google.android.exoplayer2.source.TrackGroupArray; @@ -45,6 +48,8 @@ import com.google.android.exoplayer2.util.MimeTypes; import com.google.android.exoplayer2.util.Util; import android.annotation.TargetApi; +import android.media.MediaDrm; +import android.media.UnsupportedSchemeException; import android.net.Uri; import android.test.ActivityInstrumentationTestCase2; import android.util.Log; @@ -53,6 +58,7 @@ import junit.framework.AssertionFailedError; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.UUID; /** * Tests DASH playbacks using {@link ExoPlayer}. @@ -63,6 +69,7 @@ public final class DashTest extends ActivityInstrumentationTestCase2= 24; @@ -184,7 +258,7 @@ public final class DashTest extends ActivityInstrumentationTestCase2 keyRequestProperties; + + public static TestMediaDrmCallback newWidevineInstance(String contentId, String provider) { + String defaultUrl = WIDEVINE_BASE_URL + "?video_id=" + contentId + "&provider=" + provider; + return new TestMediaDrmCallback(defaultUrl, null); + } + + private TestMediaDrmCallback(String defaultUrl, Map keyRequestProperties) { + this.defaultUrl = defaultUrl; + this.keyRequestProperties = keyRequestProperties; + } + + @Override + public byte[] executeProvisionRequest(UUID uuid, MediaDrm.ProvisionRequest request) + throws IOException { + String url = request.getDefaultUrl() + "&signedRequest=" + new String(request.getData(), + Charset.defaultCharset()); + return executePost(url, null, null); + } + + @Override + public byte[] executeKeyRequest(UUID uuid, MediaDrm.KeyRequest request) throws Exception { + String url = request.getDefaultUrl(); + if (TextUtils.isEmpty(url)) { + url = defaultUrl; + } + return executePost(url, request.getData(), keyRequestProperties); + } + + private static byte[] executePost(String url, byte[] data, Map requestProperties) + throws IOException { + HttpURLConnection urlConnection = null; + try { + urlConnection = (HttpURLConnection) new URL(url).openConnection(); + urlConnection.setRequestMethod("POST"); + urlConnection.setDoOutput(data != null); + urlConnection.setDoInput(true); + if (requestProperties != null) { + for (Map.Entry requestProperty : requestProperties.entrySet()) { + urlConnection.setRequestProperty(requestProperty.getKey(), requestProperty.getValue()); + } + } + // Write the request body, if there is one. + if (data != null) { + OutputStream out = urlConnection.getOutputStream(); + try { + out.write(data); + } finally { + out.close(); + } + } + // Read and return the response body. + InputStream inputStream = urlConnection.getInputStream(); + try { + return Util.toByteArray(inputStream); + } finally { + inputStream.close(); + } + } finally { + if (urlConnection != null) { + urlConnection.disconnect(); + } + } + } +}