summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorandroid-build-prod (mdb) <android-build-team-robot@google.com>2021-01-13 21:07:19 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2021-01-13 21:07:19 +0000
commitebe2a39efad3d61e6d14f075d42873073daf7799 (patch)
tree6fd9dccbb41cbbd6495f7e0c9a5b783abd2581cf
parentb263eba5e8b7e31a3603177c1f478a8442e23b17 (diff)
parent0dee4f9f015320b2fd33830a890741e26f17f60e (diff)
downloadcts-ebe2a39efad3d61e6d14f075d42873073daf7799.tar.gz
Merge "Snap for 7080300 from e9241a0697b947d56118a8cd3b4bc141529d7020 to android11-tests-release" into android11-tests-release
-rw-r--r--tests/providerui/src/android/providerui/cts/MediaStoreUiTest.java40
-rw-r--r--tests/security/src/android/keystore/cts/Asn1Utils.java11
-rw-r--r--tests/security/src/android/keystore/cts/Attestation.java19
-rw-r--r--tests/security/src/android/keystore/cts/AuthorizationList.java7
-rw-r--r--tests/security/src/android/keystore/cts/RootOfTrust.java6
5 files changed, 68 insertions, 15 deletions
diff --git a/tests/providerui/src/android/providerui/cts/MediaStoreUiTest.java b/tests/providerui/src/android/providerui/cts/MediaStoreUiTest.java
index edafafd4e7c..c58c0e40221 100644
--- a/tests/providerui/src/android/providerui/cts/MediaStoreUiTest.java
+++ b/tests/providerui/src/android/providerui/cts/MediaStoreUiTest.java
@@ -19,6 +19,7 @@ package android.providerui.cts;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import android.app.Activity;
@@ -38,13 +39,17 @@ import android.os.ParcelFileDescriptor;
import android.os.storage.StorageManager;
import android.os.storage.StorageVolume;
import android.os.UserManager;
+import android.provider.DocumentsContract;
import android.provider.MediaStore;
import android.provider.cts.ProviderTestUtils;
import android.providerui.cts.GetResultActivity.Result;
import android.support.test.uiautomator.By;
import android.support.test.uiautomator.BySelector;
import android.support.test.uiautomator.UiDevice;
+import android.support.test.uiautomator.UiObject;
import android.support.test.uiautomator.UiObject2;
+import android.support.test.uiautomator.UiObjectNotFoundException;
+import android.support.test.uiautomator.UiSelector;
import android.support.test.uiautomator.Until;
import android.system.Os;
import android.text.format.DateUtils;
@@ -76,6 +81,7 @@ public class MediaStoreUiTest {
private static final String TAG = "MediaStoreUiTest";
private static final int REQUEST_CODE = 42;
+ private static final long TIMEOUT_MILLIS = 30 * DateUtils.SECOND_IN_MILLIS;
private Instrumentation mInstrumentation;
private Context mContext;
@@ -211,31 +217,43 @@ public class MediaStoreUiTest {
Log.v(TAG, "Staged " + mFile + " as " + mMediaStoreUri);
}
- private Uri acquireAccess(File file, String directoryName) {
+ private void assertToolbarTitleEquals(String targetPackageName, String label)
+ throws UiObjectNotFoundException {
+ final UiSelector toolbarUiSelector = new UiSelector().resourceId(
+ targetPackageName + ":id/toolbar");
+ final UiSelector titleTextSelector = new UiSelector().className(
+ "android.widget.TextView").text(label);
+ final UiObject title = new UiObject(toolbarUiSelector.childSelector(titleTextSelector));
+
+ assertTrue(title.waitForExists(TIMEOUT_MILLIS));
+ }
+
+ private Uri acquireAccess(File file, String directoryName) throws Exception {
StorageManager storageManager =
(StorageManager) mActivity.getSystemService(Context.STORAGE_SERVICE);
// Request access from DocumentsUI
final StorageVolume volume = storageManager.getStorageVolume(file);
final Intent intent = volume.createOpenDocumentTreeIntent();
+
+ // launch the directory directly to avoid unexpected UiObject not found issue
+ final Uri rootUri = intent.getParcelableExtra(DocumentsContract.EXTRA_INITIAL_URI);
+ final String rootId = DocumentsContract.getRootId(rootUri);
+ final String documentId = rootId + ":" + directoryName;
+ intent.putExtra(DocumentsContract.EXTRA_INITIAL_URI,
+ DocumentsContract.buildDocumentUri(rootUri.getAuthority(), documentId));
mActivity.startActivityForResult(intent, REQUEST_CODE);
if (mTargetPackageName == null) {
mTargetPackageName = getTargetPackageName(mActivity);
}
-
- // We started at the root of the storage device, and need to navigate
- // into the requested directory
- final BySelector directorySelector = By.pkg(mTargetPackageName)
- .text(directoryName);
- mDevice.wait(Until.hasObject(directorySelector), 30 * DateUtils.SECOND_IN_MILLIS);
- mDevice.findObject(directorySelector).click();
mDevice.waitForIdle();
+ assertToolbarTitleEquals(mTargetPackageName, directoryName);
// Granting the access
BySelector buttonPanelSelector = By.pkg(mTargetPackageName)
.res(mTargetPackageName + ":id/container_save");
- mDevice.wait(Until.hasObject(buttonPanelSelector), 30 * DateUtils.SECOND_IN_MILLIS);
+ mDevice.wait(Until.hasObject(buttonPanelSelector), TIMEOUT_MILLIS);
final UiObject2 buttonPanel = mDevice.findObject(buttonPanelSelector);
final UiObject2 allowButton = buttonPanel.findObject(By.res("android:id/button1"));
allowButton.click();
@@ -244,7 +262,7 @@ public class MediaStoreUiTest {
// Granting the access by click "allow" in confirm dialog
final BySelector dialogButtonPanelSelector = By.pkg(mTargetPackageName)
.res(mTargetPackageName + ":id/buttonPanel");
- mDevice.wait(Until.hasObject(dialogButtonPanelSelector), 30 * DateUtils.SECOND_IN_MILLIS);
+ mDevice.wait(Until.hasObject(dialogButtonPanelSelector), TIMEOUT_MILLIS);
final UiObject2 positiveButton = mDevice.findObject(dialogButtonPanelSelector)
.findObject(By.res("android:id/button1"));
positiveButton.click();
@@ -258,7 +276,7 @@ public class MediaStoreUiTest {
final Uri resultUri = resultIntent.getData();
final int flags = resultIntent.getFlags()
& (Intent.FLAG_GRANT_READ_URI_PERMISSION
- | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
+ | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
mActivity.getContentResolver().takePersistableUriPermission(resultUri, flags);
return resultUri;
}
diff --git a/tests/security/src/android/keystore/cts/Asn1Utils.java b/tests/security/src/android/keystore/cts/Asn1Utils.java
index 958665141d9..933def8aac0 100644
--- a/tests/security/src/android/keystore/cts/Asn1Utils.java
+++ b/tests/security/src/android/keystore/cts/Asn1Utils.java
@@ -137,15 +137,26 @@ public class Asn1Utils {
public static boolean getBooleanFromAsn1(ASN1Encodable value)
throws CertificateParsingException {
+ return getBooleanFromAsn1(value, true);
+ }
+
+ public static boolean getBooleanFromAsn1(ASN1Encodable value, boolean strictParsing)
+ throws CertificateParsingException {
if (!(value instanceof ASN1Boolean)) {
throw new CertificateParsingException(
"Expected boolean, found " + value.getClass().getName());
}
ASN1Boolean booleanValue = (ASN1Boolean) value;
+
if (booleanValue.equals(ASN1Boolean.TRUE)) {
return true;
} else if (booleanValue.equals((ASN1Boolean.FALSE))) {
return false;
+ } else if (!strictParsing) {
+ // Value is not 0xFF nor 0x00, but some other non-zero value.
+ // This is invalid DER, but if we're not being strict,
+ // consider it true, otherwise fall through and throw exception
+ return true;
}
throw new CertificateParsingException(
diff --git a/tests/security/src/android/keystore/cts/Attestation.java b/tests/security/src/android/keystore/cts/Attestation.java
index 2285cadb652..2b7715a31a9 100644
--- a/tests/security/src/android/keystore/cts/Attestation.java
+++ b/tests/security/src/android/keystore/cts/Attestation.java
@@ -66,6 +66,11 @@ public class Attestation {
* attestation extension.
*/
public Attestation(X509Certificate x509Cert) throws CertificateParsingException {
+ this(x509Cert, true);
+ }
+
+ public Attestation(X509Certificate x509Cert, boolean strictParsing)
+ throws CertificateParsingException {
ASN1Sequence seq = getAttestationSequence(x509Cert);
unexpectedExtensionOids = retrieveUnexpectedExtensionOids(x509Cert);
@@ -79,8 +84,18 @@ public class Attestation {
uniqueId = Asn1Utils.getByteArrayFromAsn1(seq.getObjectAt(Attestation.UNIQUE_ID_INDEX));
- softwareEnforced = new AuthorizationList(seq.getObjectAt(SW_ENFORCED_INDEX));
- teeEnforced = new AuthorizationList(seq.getObjectAt(TEE_ENFORCED_INDEX));
+ softwareEnforced = new AuthorizationList(seq.getObjectAt(SW_ENFORCED_INDEX), strictParsing);
+ teeEnforced = new AuthorizationList(seq.getObjectAt(TEE_ENFORCED_INDEX), strictParsing);
+ }
+
+ public static Attestation loadFromCertificate(X509Certificate x509Cert)
+ throws CertificateParsingException {
+ return new Attestation(x509Cert);
+ }
+
+ public static Attestation loadFromCertificate(X509Certificate x509Cert, boolean strictParsing)
+ throws CertificateParsingException {
+ return new Attestation(x509Cert, strictParsing);
}
public static String securityLevelToString(int attestationSecurityLevel) {
diff --git a/tests/security/src/android/keystore/cts/AuthorizationList.java b/tests/security/src/android/keystore/cts/AuthorizationList.java
index 85ac115c671..725bc14d291 100644
--- a/tests/security/src/android/keystore/cts/AuthorizationList.java
+++ b/tests/security/src/android/keystore/cts/AuthorizationList.java
@@ -203,7 +203,12 @@ public class AuthorizationList {
private boolean userPresenceRequired;
private boolean confirmationRequired;
+
public AuthorizationList(ASN1Encodable sequence) throws CertificateParsingException {
+ this(sequence, true);
+ }
+
+ public AuthorizationList(ASN1Encodable sequence, boolean strictParsing) throws CertificateParsingException {
if (!(sequence instanceof ASN1Sequence)) {
throw new CertificateParsingException("Expected sequence for authorization list, found "
+ sequence.getClass().getName());
@@ -287,7 +292,7 @@ public class AuthorizationList {
userAuthType = Asn1Utils.getIntegerFromAsn1(value);
break;
case KM_TAG_ROOT_OF_TRUST & KEYMASTER_TAG_TYPE_MASK:
- rootOfTrust = new RootOfTrust(value);
+ rootOfTrust = new RootOfTrust(value, strictParsing);
break;
case KM_TAG_ATTESTATION_APPLICATION_ID & KEYMASTER_TAG_TYPE_MASK:
attestationApplicationId = new AttestationApplicationId(Asn1Utils
diff --git a/tests/security/src/android/keystore/cts/RootOfTrust.java b/tests/security/src/android/keystore/cts/RootOfTrust.java
index 99577021b96..b9a711e10ea 100644
--- a/tests/security/src/android/keystore/cts/RootOfTrust.java
+++ b/tests/security/src/android/keystore/cts/RootOfTrust.java
@@ -38,6 +38,10 @@ public class RootOfTrust {
private final int verifiedBootState;
public RootOfTrust(ASN1Encodable asn1Encodable) throws CertificateParsingException {
+ this(asn1Encodable, true);
+ }
+
+ public RootOfTrust(ASN1Encodable asn1Encodable, boolean strictParsing) throws CertificateParsingException {
if (!(asn1Encodable instanceof ASN1Sequence)) {
throw new CertificateParsingException("Expected sequence for root of trust, found "
+ asn1Encodable.getClass().getName());
@@ -46,7 +50,7 @@ public class RootOfTrust {
ASN1Sequence sequence = (ASN1Sequence) asn1Encodable;
verifiedBootKey =
Asn1Utils.getByteArrayFromAsn1(sequence.getObjectAt(VERIFIED_BOOT_KEY_INDEX));
- deviceLocked = Asn1Utils.getBooleanFromAsn1(sequence.getObjectAt(DEVICE_LOCKED_INDEX));
+ deviceLocked = Asn1Utils.getBooleanFromAsn1(sequence.getObjectAt(DEVICE_LOCKED_INDEX), strictParsing);
verifiedBootState =
Asn1Utils.getIntegerFromAsn1(sequence.getObjectAt(VERIFIED_BOOT_STATE_INDEX));
}