Fix testClearKeyPlaybackCenc hanging on N and N-MR1 device.
This test is intended for N-MR2 and above. Add a check
to skip this test for device running earlier versions.
Test: CTS test on NYC, NYC-MR1, NYC-MR2 and O-MR1
ANDROID_BUILD_TOP= ./android-cts/tools/cts-tradefed run cts -m
CtsMediaTestCases
--test
android.media.cts.NativeClearKeySystemTest#testClearKeyPlaybackCenc
Test: Verify compareVersion() with these parameters
compareVersion("7.1.2", "8.0");
compareVersion("7.1.2", "7.0");
compareVersion("7.1.2", "7.1.1");
compareVersion("7.1.2", "7.1.0");
compareVersion("7.1.2", "7.1.2.3");
compareVersion("7.1.2", "8.1.");
compareVersion("7.1.2", "8.1.0");
compareVersion("7.1.2", "7.1.2");
compareVersion("7.1.2", "7.1.2.");
compareVersion("7.1.2", "OMR1");
bug: 63859551
bug: 63907994
Change-Id: I8581a77bde64c26fb9302df427efa4bea3da4e37
diff --git a/tests/tests/media/src/android/media/cts/NativeClearKeySystemTest.java b/tests/tests/media/src/android/media/cts/NativeClearKeySystemTest.java
index 9ead8fb..649496e 100644
--- a/tests/tests/media/src/android/media/cts/NativeClearKeySystemTest.java
+++ b/tests/tests/media/src/android/media/cts/NativeClearKeySystemTest.java
@@ -191,14 +191,52 @@
params.surface.release();
}
- private ArrayList<Integer> intVersion(String version) {
- String versions[] = version.split("\\.");
+ /*
+ * Compare version strings
+ *
+ * @param actual Actual platform's Android version
+ * @param expected Minimum Android version
+ *
+ * @return 0 if the versions are identical
+ * @return +v if actual is greater than expected
+ * @return -ve if actual is less than expected
+ */
+ private static Integer compareVersion(String actual, String expected) {
+ String[] part1 = actual.split("\\.");
+ String[] part2 = expected.split("\\.");
- ArrayList<Integer> versionNumbers = Lists.newArrayList();
- for (String subVersion : versions) {
- versionNumbers.add(Integer.parseInt(subVersion));
+ int idx = 0;
+ for (; idx < part1.length && idx < part2.length; idx++) {
+ String p1 = part1[idx];
+ String p2 = part2[idx];
+
+ int cmp;
+ if (p1.matches("\\d+") && p2.matches("\\d+")) {
+ cmp = new Integer(p1).compareTo(new Integer(p2));
+ } else {
+ cmp = part1[idx].compareTo(part2[idx]);
+ }
+ if (cmp != 0) return cmp;
}
- return versionNumbers;
+
+ if (part1.length == part2.length) {
+ return 0;
+ } else {
+ boolean left = part1.length > idx;
+ String[] parts = left ? part1 : part2;
+
+ for (; idx < parts.length; idx++) {
+ String p = parts[idx];
+ int cmp;
+ if (p.matches("\\d+")) {
+ cmp = new Integer(p).compareTo(0);
+ } else {
+ cmp = 1;
+ }
+ if (cmp != 0) return left ? cmp : -cmp;
+ }
+ return 0;
+ }
}
private static native boolean isCryptoSchemeSupportedNative(final byte[] uuid);
@@ -212,10 +250,14 @@
private static native boolean testPsshNative(final byte[] uuid, final String videoUrl);
public void testClearKeyPlaybackCenc() throws Exception {
- testClearKeyPlayback(
- ISO_BMFF_VIDEO_MIME_TYPE,
- CENC_AUDIO_URL,
- CENC_CLEARKEY_VIDEO_URL,
- VIDEO_WIDTH_CENC, VIDEO_HEIGHT_CENC);
+ if (compareVersion(Build.VERSION.RELEASE, "7.1.2") >= 0) {
+ testClearKeyPlayback(
+ ISO_BMFF_VIDEO_MIME_TYPE,
+ CENC_AUDIO_URL,
+ CENC_CLEARKEY_VIDEO_URL,
+ VIDEO_WIDTH_CENC, VIDEO_HEIGHT_CENC);
+ } else {
+ Log.i(TAG, "Skip test, which is intended for Android 7.1.2 and above.");
+ }
}
}