• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2022 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package android.healthconnect;
18 
19 import static android.health.connect.HealthPermissions.HEALTH_PERMISSION_GROUP;
20 import static android.health.connect.HealthPermissions.READ_EXERCISE_ROUTE;
21 
22 import static com.google.common.truth.Truth.assertThat;
23 import static com.google.common.truth.Truth.assertWithMessage;
24 
25 import android.content.Context;
26 import android.content.pm.PackageInfo;
27 import android.content.pm.PackageManager;
28 import android.content.pm.PermissionInfo;
29 import android.health.connect.HealthConnectManager;
30 import android.health.connect.HealthPermissions;
31 
32 import androidx.test.InstrumentationRegistry;
33 
34 import org.junit.Before;
35 import org.junit.Test;
36 
37 import java.util.Set;
38 
39 public class HealthPermissionsTest {
40     private static final String FAIL_MESSAGE =
41             "Add new health permission to ALL_EXPECTED_HEALTH_PERMISSIONS and "
42                     + " android.healthconnect.cts.HealthPermissionsPresenceTest.HEALTH_PERMISSIONS "
43                     + "sets.";
44 
45     // Add new health permission to ALL_EXPECTED_HEALTH_PERMISSIONS and
46     // {@link android.healthconnect.cts.HealthPermissionsPresenceTest.HEALTH_PERMISSIONS}
47     // sets.
48     private static final Set<String> ALL_EXPECTED_HEALTH_PERMISSIONS =
49             Set.of(
50                     HealthPermissions.READ_ACTIVE_CALORIES_BURNED,
51                     HealthPermissions.READ_DISTANCE,
52                     HealthPermissions.READ_ELEVATION_GAINED,
53                     HealthPermissions.READ_EXERCISE,
54                     HealthPermissions.READ_FLOORS_CLIMBED,
55                     HealthPermissions.READ_STEPS,
56                     HealthPermissions.READ_TOTAL_CALORIES_BURNED,
57                     HealthPermissions.READ_VO2_MAX,
58                     HealthPermissions.READ_WHEELCHAIR_PUSHES,
59                     HealthPermissions.READ_POWER,
60                     HealthPermissions.READ_SPEED,
61                     HealthPermissions.READ_BASAL_METABOLIC_RATE,
62                     HealthPermissions.READ_BODY_FAT,
63                     HealthPermissions.READ_BODY_WATER_MASS,
64                     HealthPermissions.READ_BONE_MASS,
65                     HealthPermissions.READ_HEIGHT,
66                     HealthPermissions.READ_LEAN_BODY_MASS,
67                     HealthPermissions.READ_WEIGHT,
68                     HealthPermissions.READ_CERVICAL_MUCUS,
69                     HealthPermissions.READ_INTERMENSTRUAL_BLEEDING,
70                     HealthPermissions.READ_MENSTRUATION,
71                     HealthPermissions.READ_OVULATION_TEST,
72                     HealthPermissions.READ_SEXUAL_ACTIVITY,
73                     HealthPermissions.READ_HYDRATION,
74                     HealthPermissions.READ_NUTRITION,
75                     HealthPermissions.READ_SLEEP,
76                     HealthPermissions.READ_BASAL_BODY_TEMPERATURE,
77                     HealthPermissions.READ_BLOOD_GLUCOSE,
78                     HealthPermissions.READ_BLOOD_PRESSURE,
79                     HealthPermissions.READ_BODY_TEMPERATURE,
80                     HealthPermissions.READ_HEART_RATE,
81                     HealthPermissions.READ_HEART_RATE_VARIABILITY,
82                     HealthPermissions.READ_OXYGEN_SATURATION,
83                     HealthPermissions.READ_RESPIRATORY_RATE,
84                     HealthPermissions.READ_RESTING_HEART_RATE,
85                     HealthPermissions.WRITE_ACTIVE_CALORIES_BURNED,
86                     HealthPermissions.WRITE_DISTANCE,
87                     HealthPermissions.WRITE_ELEVATION_GAINED,
88                     HealthPermissions.WRITE_EXERCISE,
89                     HealthPermissions.WRITE_EXERCISE_ROUTE,
90                     HealthPermissions.WRITE_FLOORS_CLIMBED,
91                     HealthPermissions.WRITE_STEPS,
92                     HealthPermissions.WRITE_TOTAL_CALORIES_BURNED,
93                     HealthPermissions.WRITE_VO2_MAX,
94                     HealthPermissions.WRITE_WHEELCHAIR_PUSHES,
95                     HealthPermissions.WRITE_POWER,
96                     HealthPermissions.WRITE_SPEED,
97                     HealthPermissions.WRITE_BASAL_METABOLIC_RATE,
98                     HealthPermissions.WRITE_BODY_FAT,
99                     HealthPermissions.WRITE_BODY_WATER_MASS,
100                     HealthPermissions.WRITE_BONE_MASS,
101                     HealthPermissions.WRITE_HEIGHT,
102                     HealthPermissions.WRITE_LEAN_BODY_MASS,
103                     HealthPermissions.WRITE_WEIGHT,
104                     HealthPermissions.WRITE_CERVICAL_MUCUS,
105                     HealthPermissions.WRITE_INTERMENSTRUAL_BLEEDING,
106                     HealthPermissions.WRITE_MENSTRUATION,
107                     HealthPermissions.WRITE_OVULATION_TEST,
108                     HealthPermissions.WRITE_SEXUAL_ACTIVITY,
109                     HealthPermissions.WRITE_HYDRATION,
110                     HealthPermissions.WRITE_NUTRITION,
111                     HealthPermissions.WRITE_SLEEP,
112                     HealthPermissions.WRITE_BASAL_BODY_TEMPERATURE,
113                     HealthPermissions.WRITE_BLOOD_GLUCOSE,
114                     HealthPermissions.WRITE_BLOOD_PRESSURE,
115                     HealthPermissions.WRITE_BODY_TEMPERATURE,
116                     HealthPermissions.WRITE_HEART_RATE,
117                     HealthPermissions.WRITE_HEART_RATE_VARIABILITY,
118                     HealthPermissions.WRITE_OXYGEN_SATURATION,
119                     HealthPermissions.WRITE_RESPIRATORY_RATE,
120                     HealthPermissions.WRITE_RESTING_HEART_RATE);
121     private PackageManager mPackageManager;
122     private Context mContext;
123 
124     @Before
setUp()125     public void setUp() {
126         mContext = InstrumentationRegistry.getTargetContext();
127         mPackageManager = mContext.getPackageManager();
128     }
129 
130     @Test
testHealthGroupPermissions_noUnexpectedPermissionsDefined()131     public void testHealthGroupPermissions_noUnexpectedPermissionsDefined() throws Exception {
132         PermissionInfo[] permissionInfos = getHealthPermissionInfos();
133         for (PermissionInfo permissionInfo : permissionInfos) {
134             if (permissionInfo.group != null
135                     && permissionInfo.group.equals(HEALTH_PERMISSION_GROUP)) {
136                 assertWithMessage(FAIL_MESSAGE)
137                         .that(ALL_EXPECTED_HEALTH_PERMISSIONS)
138                         .contains(permissionInfo.name);
139             }
140         }
141     }
142 
143     @Test
testHealthConnectManager_noUnexpectedPermissionsReturned()144     public void testHealthConnectManager_noUnexpectedPermissionsReturned() throws Exception {
145         assertWithMessage(FAIL_MESSAGE)
146                 .that(HealthConnectManager.getHealthPermissions(mContext))
147                 .isEqualTo(ALL_EXPECTED_HEALTH_PERMISSIONS);
148     }
149 
150     @Test
testReadExerciseRoutePerm_hasSignatureProtection()151     public void testReadExerciseRoutePerm_hasSignatureProtection() throws Exception {
152         assertThat(
153                         mPackageManager
154                                 .getPermissionInfo(READ_EXERCISE_ROUTE, /* flags= */ 0)
155                                 .getProtection())
156                 .isEqualTo(PermissionInfo.PROTECTION_SIGNATURE);
157     }
158 
159     @Test
testReadExerciseRoutePerm_controllerUiHoldsIt()160     public void testReadExerciseRoutePerm_controllerUiHoldsIt() throws Exception {
161         String healthControllerPackageName = getControllerUiPackageName();
162         assertThat(
163                         mContext.getPackageManager()
164                                 .checkPermission(READ_EXERCISE_ROUTE, healthControllerPackageName))
165                 .isEqualTo(PackageManager.PERMISSION_GRANTED);
166     }
167 
getHealthPermissionInfos()168     private PermissionInfo[] getHealthPermissionInfos() throws Exception {
169         String healthControllerPackageName = getControllerUiPackageName();
170 
171         PackageInfo packageInfo =
172                 mPackageManager.getPackageInfo(
173                         healthControllerPackageName,
174                         PackageManager.PackageInfoFlags.of(PackageManager.GET_PERMISSIONS));
175         return packageInfo.permissions;
176     }
177 
getControllerUiPackageName()178     private String getControllerUiPackageName() throws Exception {
179         return mPackageManager.getPermissionInfo(HealthPermissions.READ_STEPS, /* flags= */ 0)
180                 .packageName;
181     }
182 }
183