summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Scarlett Song <scarlettsong@google.com> 2024-11-20 21:12:54 +0000
committer Yi-an Chen <theianchen@google.com> 2024-11-21 21:35:31 +0000
commit5ac164984e99736a02978f2ae5c7ec78afcfb1f9 (patch)
tree1b2b58ea3361f0278f585ec0256456c8fced71ef
parent51409ed0da3a587fb2d20b83fc65fc963648e380 (diff)
Add splitPermissionsSystemTest for READ_HEART_RATE
Before this CL, fail with assertion mismatch ``` [1/1] android.permission.cts.SplitPermissionsSystemTest#validateAndroidSystem: FAILED (29ms) STACKTRACE: value of: iterable.onlyElement() expected: android.permission.BODY_SENSORS_BACKGROUND but was : android.permission.health.READ_HEART_RATE at android.permission.cts.SplitPermissionsSystemTest.assertSplit(SplitPermissionsSystemTest.java:167) at android.permission.cts.SplitPermissionsSystemTest.validateAndroidSystem(SplitPermissionsSystemTest.java:153) ``` [Alternative considered] Why the other approach ag/30505597 is not recommended: 1. Accessing flag value directly in test runtime instead of @RequiresFlagsEnabled is against decisions in https://docs.google.com/document/d/1fsQG6rU6iB_NfmUz0F2WRJGrpYQjwfy0k81K70sDHxQ/edit?resourcekey=0-7gsaqK_uag0zCzyrvRxbrQ&tab=t.0 2. Runtime error flag not found Test 1. ABTD https://android-build.corp.google.com/builds/abtd/run/L92400030007911708 2. With this CL, locally modify ApiLevelUtil.isAtLeast(36) with .isAtLeast(35) so that it can run. ``` x86_64 CtsPermissionTestCases ----------------------------- android.permission.cts (3 Tests) [1/3] android.permission.cts.SplitPermissionsSystemTest#validateBodySensors_beforeGranularHealthPermissions_splitToBodySensorsBackground: ASSUMPTION_FAILED (130ms) [2/3] android.permission.cts.SplitPermissionsSystemTest#validateBodySensors_afterGranularHealthPermissions_splitToReadHeartRate: PASSED (26ms) [3/3] android.permission.cts.SplitPermissionsSystemTest#validateAndroidSystemExceptBodySensors: PASSED (26ms) ``` After change back to 36, also skip with assumption failed. LOW_COVERAGE_REASON=TEST_ONLY Bug: 364638912 Bug: 380299737 Flag: android.permission.flags.replace_body_sensor_permission_enabled Relnote: Granular health permission Change-Id: I8806d7ff8d9dcada7a348aba567e26a1516fcfef
-rwxr-xr-xtests/cts/permission/src/android/permission/cts/SplitPermissionsSystemTest.java73
1 files changed, 67 insertions, 6 deletions
diff --git a/tests/cts/permission/src/android/permission/cts/SplitPermissionsSystemTest.java b/tests/cts/permission/src/android/permission/cts/SplitPermissionsSystemTest.java
index 776a1065e..f2d59cbe7 100755
--- a/tests/cts/permission/src/android/permission/cts/SplitPermissionsSystemTest.java
+++ b/tests/cts/permission/src/android/permission/cts/SplitPermissionsSystemTest.java
@@ -45,9 +45,15 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assume.assumeTrue;
import android.content.Context;
+import android.health.connect.HealthPermissions;
import android.os.Build;
import android.permission.PermissionManager;
import android.permission.PermissionManager.SplitPermissionInfo;
+import android.permission.flags.Flags;
+import android.platform.test.annotations.RequiresFlagsDisabled;
+import android.platform.test.annotations.RequiresFlagsEnabled;
+import android.platform.test.flag.junit.CheckFlagsRule;
+import android.platform.test.flag.junit.DeviceFlagsValueProvider;
import androidx.test.InstrumentationRegistry;
import androidx.test.filters.SdkSuppress;
@@ -56,6 +62,7 @@ import androidx.test.runner.AndroidJUnit4;
import com.android.compatibility.common.util.ApiLevelUtil;
import org.junit.Before;
+import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -71,6 +78,9 @@ public class SplitPermissionsSystemTest {
private List<SplitPermissionInfo> mSplitPermissions;
+ @Rule
+ public final CheckFlagsRule mCheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule();
+
@Before
public void before() {
Context context = InstrumentationRegistry.getContext();
@@ -87,9 +97,14 @@ public class SplitPermissionsSystemTest {
for (SplitPermissionInfo split : mSplitPermissions) {
String splitPermission = split.getSplitPermission();
- boolean isAndroid = splitPermission.startsWith("android");
- if (!isAndroid) {
+ // Due to limitation with accessing flag values in tests, BODY_SENSORS relevant splits
+ // are handled in its dedicated tests.
+ boolean shouldSkip =
+ !splitPermission.startsWith("android")
+ || splitPermission.equals(BODY_SENSORS)
+ || splitPermission.equals(BODY_SENSORS_BACKGROUND);
+ if (shouldSkip) {
continue;
}
@@ -149,9 +164,6 @@ public class SplitPermissionsSystemTest {
case BLUETOOTH_SCAN:
assertSplit(split, Build.VERSION_CODES.S, BLUETOOTH, BLUETOOTH_ADMIN);
break;
- case BODY_SENSORS:
- assertSplit(split, Build.VERSION_CODES.TIRAMISU, BODY_SENSORS_BACKGROUND);
- break;
case ACCESS_MEDIA_LOCATION:
case READ_MEDIA_IMAGES:
case READ_MEDIA_VIDEO:
@@ -160,7 +172,56 @@ public class SplitPermissionsSystemTest {
}
}
- assertEquals(24, seenSplits.size());
+ assertEquals(23, seenSplits.size());
+ }
+
+ @RequiresFlagsDisabled({Flags.FLAG_REPLACE_BODY_SENSOR_PERMISSION_ENABLED})
+ @Test
+ public void
+ validateBodySensors_beforeGranularHealthPermissions_isSplitToBodySensorsBackground() {
+ assumeTrue(ApiLevelUtil.isAtLeast(Build.VERSION_CODES.Q));
+
+ mSplitPermissions.stream()
+ .filter(split -> split.getSplitPermission().equals(BODY_SENSORS))
+ .findFirst()
+ .ifPresent(
+ split ->
+ assertSplit(
+ split,
+ Build.VERSION_CODES.TIRAMISU,
+ BODY_SENSORS_BACKGROUND));
+ }
+
+ @RequiresFlagsEnabled({Flags.FLAG_REPLACE_BODY_SENSOR_PERMISSION_ENABLED})
+ @Test
+ public void validateBodySensors_afterGranularHealthPermissions_isSplitToReadHeartRate() {
+ // TODO: Change this to Baklava when available.
+ assumeTrue(ApiLevelUtil.isAtLeast(36));
+
+ SplitPermissionInfo legacyBodySensorPermissionInfo = null;
+ SplitPermissionInfo readHeartRatePermissionInfo = null;
+ SplitPermissionInfo bodySensorBackgroundPermissionInfo = null;
+ for (SplitPermissionInfo split : mSplitPermissions) {
+ if (split.getSplitPermission().equals(BODY_SENSORS)
+ && split.getNewPermissions().contains(BODY_SENSORS_BACKGROUND)) {
+ legacyBodySensorPermissionInfo = split;
+ } else if (split.getSplitPermission().equals(BODY_SENSORS)
+ && split.getNewPermissions().contains(HealthPermissions.READ_HEART_RATE)) {
+ readHeartRatePermissionInfo = split;
+ } else if (split.getSplitPermission().equals(BODY_SENSORS_BACKGROUND)) {
+ bodySensorBackgroundPermissionInfo = split;
+ }
+ }
+ // Assert BODY_SENSORS is split to BODY_SENSORS_BACKGROUND and READ_HEART_RATE.
+ assertSplit(
+ legacyBodySensorPermissionInfo,
+ Build.VERSION_CODES.TIRAMISU,
+ BODY_SENSORS_BACKGROUND);
+ assertSplit(readHeartRatePermissionInfo, HealthPermissions.READ_HEART_RATE);
+ // Assert BODY_SENSORS_BACKGROUND is split to READ_HEALTH_DATA_IN_BACKGROUND.
+ assertSplit(
+ bodySensorBackgroundPermissionInfo,
+ HealthPermissions.READ_HEALTH_DATA_IN_BACKGROUND);
}
private void assertSplit(SplitPermissionInfo split, int targetSdk, String... permission) {