Merge "Add tests for key sharing mode and decrypting without keys" into klp-dev
This commit is contained in:
@@ -121,6 +121,9 @@ public class MediaDrmAPITest extends Activity {
|
|||||||
|
|
||||||
testWidevineSchemeSupported();
|
testWidevineSchemeSupported();
|
||||||
testProperties();
|
testProperties();
|
||||||
|
|
||||||
|
displayText("Running test...screen will blank briefly");
|
||||||
|
|
||||||
testQueryKeyStatus();
|
testQueryKeyStatus();
|
||||||
|
|
||||||
testGenericEncryptAndDecrypt();
|
testGenericEncryptAndDecrypt();
|
||||||
@@ -136,6 +139,8 @@ public class MediaDrmAPITest extends Activity {
|
|||||||
|
|
||||||
testClearContentNoKeys();
|
testClearContentNoKeys();
|
||||||
testEncryptedContent();
|
testEncryptedContent();
|
||||||
|
testEncryptedContentSharingKeys();
|
||||||
|
testEncryptedContentNoKeys();
|
||||||
|
|
||||||
runOnUiThread(new Runnable() {
|
runOnUiThread(new Runnable() {
|
||||||
public void run() {
|
public void run() {
|
||||||
@@ -305,16 +310,39 @@ public class MediaDrmAPITest extends Activity {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private final boolean kExpectNoKeyError = true;
|
||||||
|
private final boolean kRequireKey = false;
|
||||||
|
|
||||||
private void testEncryptedContent() {
|
private void testEncryptedContent() {
|
||||||
MediaDrm drm = startDrm();
|
MediaDrm drm = startDrm();
|
||||||
byte[] sessionId = openSession(drm);
|
byte[] sessionId = openSession(drm);
|
||||||
if (getKeys(drm, sessionId)) {
|
if (getKeys(drm, sessionId)) {
|
||||||
testDecrypt(sessionId);
|
testDecrypt(sessionId, kRequireKey);
|
||||||
}
|
}
|
||||||
drm.closeSession(sessionId);
|
drm.closeSession(sessionId);
|
||||||
stopDrm(drm);
|
stopDrm(drm);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void testEncryptedContentSharingKeys() {
|
||||||
|
MediaDrm drm = startDrm();
|
||||||
|
drm.setPropertyString("sessionSharing", "enable");
|
||||||
|
byte[] sessionId = openSession(drm);
|
||||||
|
if (getKeys(drm, sessionId)) {
|
||||||
|
byte[] sessionId2 = openSession(drm);
|
||||||
|
testDecrypt(sessionId2, kRequireKey);
|
||||||
|
}
|
||||||
|
drm.closeSession(sessionId);
|
||||||
|
stopDrm(drm);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void testEncryptedContentNoKeys() {
|
||||||
|
MediaDrm drm = startDrm();
|
||||||
|
byte[] sessionId = openSession(drm);
|
||||||
|
testDecrypt(sessionId, kExpectNoKeyError);
|
||||||
|
drm.closeSession(sessionId);
|
||||||
|
stopDrm(drm);
|
||||||
|
}
|
||||||
|
|
||||||
private void testGenericEncryptAndDecrypt() {
|
private void testGenericEncryptAndDecrypt() {
|
||||||
final byte[] kOperatorSessionAESPssh = hex2ba("080112103be2b25db355fc64a0e69a50f4dbb298");
|
final byte[] kOperatorSessionAESPssh = hex2ba("080112103be2b25db355fc64a0e69a50f4dbb298");
|
||||||
|
|
||||||
@@ -547,7 +575,7 @@ public class MediaDrmAPITest extends Activity {
|
|||||||
|
|
||||||
// do minimal codec setup to pass an encrypted buffer down the stack to see if it gets
|
// do minimal codec setup to pass an encrypted buffer down the stack to see if it gets
|
||||||
// decrypted correctly.
|
// decrypted correctly.
|
||||||
public void testDecrypt(byte[] sessionId) {
|
public void testDecrypt(byte[] sessionId, boolean expectNoKey) {
|
||||||
Log.i(TAG, "testDecrypt");
|
Log.i(TAG, "testDecrypt");
|
||||||
|
|
||||||
MediaCrypto crypto = null;
|
MediaCrypto crypto = null;
|
||||||
@@ -618,9 +646,22 @@ public class MediaDrmAPITest extends Activity {
|
|||||||
// Log.i(TAG,"Sending " + sampleSize + " bytes, numSubSamples=" + numSubSamples);
|
// Log.i(TAG,"Sending " + sampleSize + " bytes, numSubSamples=" + numSubSamples);
|
||||||
codec.queueSecureInputBuffer(index, 0 /* offset */, info,
|
codec.queueSecureInputBuffer(index, 0 /* offset */, info,
|
||||||
0 /* sampleTime */, 0 /* flags */);
|
0 /* sampleTime */, 0 /* flags */);
|
||||||
|
if (expectNoKey) {
|
||||||
|
Log.e(TAG, "MediaCrypto failed to throw ERROR_NO_KEY!");
|
||||||
|
mTestFailed = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
} catch (CryptoException e) {
|
} catch (CryptoException e) {
|
||||||
// Log.i(TAG,"Checking " + sampleSize + " bytes");
|
// Log.i(TAG,"Checking " + sampleSize + " bytes");
|
||||||
|
|
||||||
|
if (e.getErrorCode() == CryptoException.ERROR_NO_KEY) {
|
||||||
|
if (!expectNoKey) {
|
||||||
|
Log.e(TAG, "MediaCrypto reports no key loaded!");
|
||||||
|
mTestFailed = true;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// in test mode, the WV CryptoPlugin throws a CryptoException where the
|
// in test mode, the WV CryptoPlugin throws a CryptoException where the
|
||||||
// message string contains a SHA256 hash of the decrypted data, for verification
|
// message string contains a SHA256 hash of the decrypted data, for verification
|
||||||
// purposes.
|
// purposes.
|
||||||
|
|||||||
Reference in New Issue
Block a user