Home | History | Annotate | Download | only in cts
      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