Fix possible infinite loop in test code

Also handle ResourceBusyException

merge of http://go/wvgerrit/14470 from widevine repo

bug: 21172957
Change-Id: I6815786eb7a678725cf2632f1009c7f566ba7499
This commit is contained in:
Jeff Tinker
2015-05-27 16:45:36 -07:00
parent 997ea4f447
commit 92bf971ea8
3 changed files with 29 additions and 12 deletions

View File

@@ -7,7 +7,7 @@ LOCAL_CERTIFICATE := platform
LOCAL_SRC_FILES := $(call all-java-files-under, src)
LOCAL_JAVA_LIBRARIES := com.android.mediadrm.signer
LOCAL_JAVA_LIBRARIES := com.android.mediadrm.signer org.apache.http.legacy
LOCAL_PACKAGE_NAME := CastSignAPITest

View File

@@ -15,6 +15,7 @@ import android.widget.TextView;
import android.media.MediaDrm.CryptoSession;
import android.media.MediaDrmException;
import android.media.NotProvisionedException;
import android.media.ResourceBusyException;
import android.media.MediaCrypto;
import android.media.MediaCodec;
import android.media.MediaCryptoException;
@@ -109,21 +110,34 @@ public class CastSignAPITest extends Activity {
private byte[] openSession(MediaDrm drm) {
byte[] sessionId = null;
boolean retryOpen;
do {
int retryCount = 3;
while (--retryCount > 0) {
try {
retryOpen = false;
sessionId = drm.openSession();
break;
} catch (NotProvisionedException e) {
Log.i(TAG, "Missing certificate, provisioning");
ProvisionRequester provisionRequester = new ProvisionRequester();
provisionRequester.doTransact(drm);
retryOpen = true;
} catch (ResourceBusyException e) {
Log.w(TAG, "Resource busy in openSession, retrying...");
sleep(1000);
}
} while (retryOpen);
}
if (retryCount == 0) {
Log.e(TAG, "Failed to provision device");
mTestFailed = true;
}
return sessionId;
}
private void sleep(int msec) {
try {
Thread.sleep(msec);
} catch (InterruptedException e) {
}
}
private void testCastSign() {
final byte[] kMessage = hex2ba("ee07514066c23c770a665719abf051e0" +
"f75a399578305eb2547ca67ecd2356ca" +

View File

@@ -244,22 +244,25 @@ public class MediaDrmAPITest extends Activity {
private byte[] openSession(MediaDrm drm) {
byte[] sessionId = null;
boolean retryOpen;
do {
int retryCount = 3;
while (--retryCount > 0) {
try {
retryOpen = false;
sessionId = drm.openSession();
break;
} catch (NotProvisionedException e) {
Log.i(TAG, "Missing certificate, provisioning");
ProvisionRequester provisionRequester = new ProvisionRequester();
provisionRequester.doTransact(drm);
retryOpen = true;
} catch (ResourceBusyException e) {
Log.w(TAG, "Resource busy in openSession, retrying...");
retryOpen = true;
sleep(1000);
}
} while (retryOpen);
}
if (retryCount == 0) {
Log.e(TAG, "Failed to provision device");
mTestFailed = true;
}
return sessionId;
}