1 /* 2 * Copyright (C) 2018 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.appsecurity.cts; 18 19 import android.platform.test.annotations.AppModeFull; 20 import com.android.tradefed.testtype.DeviceJUnit4ClassRunner; 21 22 import org.junit.After; 23 import org.junit.Assert; 24 import org.junit.Before; 25 import org.junit.Test; 26 import org.junit.runner.RunWith; 27 28 import java.util.HashMap; 29 import java.util.Map; 30 31 /** 32 * Tests the visibility of installed applications. 33 */ 34 @RunWith(DeviceJUnit4ClassRunner.class) 35 public class ApplicationVisibilityTest extends BaseAppSecurityTest { 36 37 private static final String TINY_APK = "CtsPkgInstallTinyApp.apk"; 38 private static final String TINY_PKG = "android.appsecurity.cts.tinyapp"; 39 40 private static final String TEST_WITH_PERMISSION_APK = 41 "CtsApplicationVisibilityCrossUserApp.apk"; 42 private static final String TEST_WITH_PERMISSION_PKG = 43 "com.android.cts.applicationvisibility"; 44 45 private int[] mUsers; 46 private String mOldVerifierValue; 47 48 @Before 49 public void setUpPackage() throws Exception { 50 mUsers = Utils.prepareMultipleUsers(getDevice(), 3); 51 mOldVerifierValue = 52 getDevice().executeShellCommand("settings get global package_verifier_enable"); 53 getDevice().executeShellCommand("settings put global package_verifier_enable 0"); 54 } 55 56 @After 57 public void tearDown() throws Exception { 58 getDevice().uninstallPackage(TEST_WITH_PERMISSION_PKG); 59 getDevice().uninstallPackage(TINY_PKG); 60 getDevice().executeShellCommand("settings put global package_verifier_enable " 61 + mOldVerifierValue); 62 } 63 64 @Test 65 @AppModeFull(reason = "instant applications cannot be granted INTERACT_ACROSS_USERS") 66 public void testPackageListCrossUserGrant() throws Exception { 67 if (!mSupportsMultiUser) { 68 return; 69 } 70 71 final int installUserId = mUsers[1]; 72 final int testUserId = mUsers[2]; 73 74 installTestAppForUser(TINY_APK, installUserId); 75 installTestAppForUser(TEST_WITH_PERMISSION_APK, testUserId); 76 77 final String grantCmd = "pm grant" 78 + " com.android.cts.applicationvisibility" 79 + " android.permission.INTERACT_ACROSS_USERS"; 80 getDevice().executeShellCommand(grantCmd); 81 Utils.runDeviceTests( 82 getDevice(), 83 TEST_WITH_PERMISSION_PKG, 84 ".ApplicationVisibilityCrossUserTest", 85 "testPackageVisibility_currentUser", 86 testUserId); 87 Utils.runDeviceTests( 88 getDevice(), 89 TEST_WITH_PERMISSION_PKG, 90 ".ApplicationVisibilityCrossUserTest", 91 "testPackageVisibility_anyUserCrossUserGrant", 92 testUserId); 93 } 94 95 @Test 96 @AppModeFull(reason = "instant applications cannot see any other application") 97 public void testPackageListCrossUserNoGrant() throws Exception { 98 if (!mSupportsMultiUser) { 99 return; 100 } 101 102 final int installUserId = mUsers[1]; 103 final int testUserId = mUsers[2]; 104 105 installTestAppForUser(TINY_APK, installUserId); 106 installTestAppForUser(TEST_WITH_PERMISSION_APK, testUserId); 107 108 Utils.runDeviceTests( 109 getDevice(), 110 TEST_WITH_PERMISSION_PKG, 111 ".ApplicationVisibilityCrossUserTest", 112 "testPackageVisibility_currentUser", 113 testUserId); 114 Utils.runDeviceTests( 115 getDevice(), 116 TEST_WITH_PERMISSION_PKG, 117 ".ApplicationVisibilityCrossUserTest", 118 "testPackageVisibility_anyUserCrossUserNoGrant", 119 testUserId); 120 } 121 122 @Test 123 @AppModeFull(reason = "instant applications cannot be granted INTERACT_ACROSS_USERS") 124 public void testPackageListOtherUserCrossUserGrant() throws Exception { 125 if (!mSupportsMultiUser) { 126 return; 127 } 128 129 final int installUserId = mUsers[1]; 130 final int testUserId = mUsers[2]; 131 final Map<String, String> testArgs = new HashMap<>(); 132 testArgs.put("testUser", Integer.toString(installUserId)); 133 134 installTestAppForUser(TINY_APK, installUserId); 135 installTestAppForUser(TEST_WITH_PERMISSION_APK, testUserId); 136 137 final String grantCmd = "pm grant" 138 + " com.android.cts.applicationvisibility" 139 + " android.permission.INTERACT_ACROSS_USERS"; 140 getDevice().executeShellCommand(grantCmd); 141 Utils.runDeviceTests( 142 getDevice(), 143 TEST_WITH_PERMISSION_PKG, 144 ".ApplicationVisibilityCrossUserTest", 145 "testPackageVisibility_otherUserGrant", 146 testUserId, 147 testArgs); 148 } 149 150 @Test 151 @AppModeFull(reason = "instant applications cannot see any other application") 152 public void testPackageListOtherUserCrossUserNoGrant() throws Exception { 153 if (!mSupportsMultiUser) { 154 return; 155 } 156 157 final int installUserId = mUsers[1]; 158 final int testUserId = mUsers[2]; 159 final Map<String, String> testArgs = new HashMap<>(); 160 testArgs.put("testUser", Integer.toString(installUserId)); 161 162 installTestAppForUser(TINY_APK, installUserId); 163 installTestAppForUser(TEST_WITH_PERMISSION_APK, testUserId); 164 165 Utils.runDeviceTests( 166 getDevice(), 167 TEST_WITH_PERMISSION_PKG, 168 ".ApplicationVisibilityCrossUserTest", 169 "testPackageVisibility_otherUserNoGrant", 170 testUserId, 171 testArgs); 172 } 173 174 @Test 175 @AppModeFull(reason = "instant applications cannot be granted INTERACT_ACROSS_USERS") 176 public void testApplicationListCrossUserGrant() throws Exception { 177 if (!mSupportsMultiUser) { 178 return; 179 } 180 181 final int installUserId = mUsers[1]; 182 final int testUserId = mUsers[2]; 183 184 installTestAppForUser(TINY_APK, installUserId); 185 installTestAppForUser(TEST_WITH_PERMISSION_APK, testUserId); 186 187 final String grantCmd = "pm grant" 188 + " com.android.cts.applicationvisibility" 189 + " android.permission.INTERACT_ACROSS_USERS"; 190 getDevice().executeShellCommand(grantCmd); 191 Utils.runDeviceTests( 192 getDevice(), 193 TEST_WITH_PERMISSION_PKG, 194 ".ApplicationVisibilityCrossUserTest", 195 "testApplicationVisibility_currentUser", 196 testUserId); 197 Utils.runDeviceTests( 198 getDevice(), 199 TEST_WITH_PERMISSION_PKG, 200 ".ApplicationVisibilityCrossUserTest", 201 "testApplicationVisibility_anyUserCrossUserGrant", 202 testUserId); 203 } 204 205 @Test 206 @AppModeFull(reason = "instant applications cannot see any other application") 207 public void testApplicationListCrossUserNoGrant() throws Exception { 208 if (!mSupportsMultiUser) { 209 return; 210 } 211 212 final int installUserId = mUsers[1]; 213 final int testUserId = mUsers[2]; 214 215 installTestAppForUser(TINY_APK, installUserId); 216 installTestAppForUser(TEST_WITH_PERMISSION_APK, testUserId); 217 218 Utils.runDeviceTests( 219 getDevice(), 220 TEST_WITH_PERMISSION_PKG, 221 ".ApplicationVisibilityCrossUserTest", 222 "testApplicationVisibility_currentUser", 223 testUserId); 224 Utils.runDeviceTests( 225 getDevice(), 226 TEST_WITH_PERMISSION_PKG, 227 ".ApplicationVisibilityCrossUserTest", 228 "testApplicationVisibility_anyUserCrossUserNoGrant", 229 testUserId); 230 } 231 232 @Test 233 @AppModeFull(reason = "instant applications cannot be granted INTERACT_ACROSS_USERS") 234 public void testApplicationListOtherUserCrossUserGrant() throws Exception { 235 if (!mSupportsMultiUser) { 236 return; 237 } 238 239 final int installUserId = mUsers[1]; 240 final int testUserId = mUsers[2]; 241 final Map<String, String> testArgs = new HashMap<>(); 242 testArgs.put("testUser", Integer.toString(installUserId)); 243 244 installTestAppForUser(TINY_APK, installUserId); 245 installTestAppForUser(TEST_WITH_PERMISSION_APK, testUserId); 246 247 final String grantCmd = "pm grant" 248 + " com.android.cts.applicationvisibility" 249 + " android.permission.INTERACT_ACROSS_USERS"; 250 getDevice().executeShellCommand(grantCmd); 251 Utils.runDeviceTests( 252 getDevice(), 253 TEST_WITH_PERMISSION_PKG, 254 ".ApplicationVisibilityCrossUserTest", 255 "testApplicationVisibility_otherUserGrant", 256 testUserId, 257 testArgs); 258 } 259 260 @Test 261 @AppModeFull(reason = "instant applications cannot see any other application") 262 public void testApplicationListOtherUserCrossUserNoGrant() throws Exception { 263 if (!mSupportsMultiUser) { 264 return; 265 } 266 267 final int installUserId = mUsers[1]; 268 final int testUserId = mUsers[2]; 269 final Map<String, String> testArgs = new HashMap<>(); 270 testArgs.put("testUser", Integer.toString(installUserId)); 271 272 installTestAppForUser(TINY_APK, installUserId); 273 installTestAppForUser(TEST_WITH_PERMISSION_APK, testUserId); 274 275 Utils.runDeviceTests( 276 getDevice(), 277 TEST_WITH_PERMISSION_PKG, 278 ".ApplicationVisibilityCrossUserTest", 279 "testApplicationVisibility_otherUserNoGrant", 280 testUserId, 281 testArgs); 282 } 283 } 284