Home | History | Annotate | Download | only in pm
      1 /*
      2  * Copyright (C) 2011 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 com.android.server.pm;
     18 
     19 import android.content.pm.PackageManager;
     20 import com.android.server.pm.PackageVerificationState;
     21 
     22 import android.test.AndroidTestCase;
     23 
     24 public class PackageVerificationStateTest extends AndroidTestCase {
     25     private static final int REQUIRED_UID = 1948;
     26 
     27     private static final int SUFFICIENT_UID_1 = 1005;
     28 
     29     private static final int SUFFICIENT_UID_2 = 8938;
     30 
     31     public void testPackageVerificationState_OnlyRequiredVerifier_AllowedInstall() {
     32         PackageVerificationState state = new PackageVerificationState(REQUIRED_UID, null);
     33 
     34         assertFalse("Verification should not be marked as complete yet",
     35                 state.isVerificationComplete());
     36 
     37         state.setVerifierResponse(REQUIRED_UID, PackageManager.VERIFICATION_ALLOW);
     38 
     39         assertTrue("Verification should be considered complete now",
     40                 state.isVerificationComplete());
     41 
     42         assertTrue("Installation should be marked as allowed",
     43                 state.isInstallAllowed());
     44     }
     45 
     46     public void testPackageVerificationState_OnlyRequiredVerifier_DeniedInstall() {
     47         PackageVerificationState state = new PackageVerificationState(REQUIRED_UID, null);
     48 
     49         assertFalse("Verification should not be marked as complete yet",
     50                 state.isVerificationComplete());
     51 
     52         state.setVerifierResponse(REQUIRED_UID, PackageManager.VERIFICATION_REJECT);
     53 
     54         assertTrue("Verification should be considered complete now",
     55                 state.isVerificationComplete());
     56 
     57         assertFalse("Installation should be marked as allowed",
     58                 state.isInstallAllowed());
     59     }
     60 
     61     public void testPackageVerificationState_RequiredAndOneSufficient_RequiredDeniedInstall() {
     62         PackageVerificationState state = new PackageVerificationState(REQUIRED_UID, null);
     63 
     64         assertFalse("Verification should not be marked as complete yet",
     65                 state.isVerificationComplete());
     66 
     67         state.addSufficientVerifier(SUFFICIENT_UID_1);
     68 
     69         assertFalse("Verification should not be marked as complete yet",
     70                 state.isVerificationComplete());
     71 
     72         state.setVerifierResponse(SUFFICIENT_UID_1, PackageManager.VERIFICATION_ALLOW);
     73 
     74         assertFalse("Verification should not be marked as complete yet",
     75                 state.isVerificationComplete());
     76 
     77         state.setVerifierResponse(REQUIRED_UID, PackageManager.VERIFICATION_REJECT);
     78 
     79         assertTrue("Verification should be considered complete now",
     80                 state.isVerificationComplete());
     81 
     82         assertFalse("Installation should be marked as allowed",
     83                 state.isInstallAllowed());
     84     }
     85 
     86     public void testPackageVerificationState_RequiredAndOneSufficient_SufficientDeniedInstall() {
     87         PackageVerificationState state = new PackageVerificationState(REQUIRED_UID, null);
     88 
     89         assertFalse("Verification should not be marked as complete yet",
     90                 state.isVerificationComplete());
     91 
     92         state.addSufficientVerifier(SUFFICIENT_UID_1);
     93 
     94         assertFalse("Verification should not be marked as complete yet",
     95                 state.isVerificationComplete());
     96 
     97         state.setVerifierResponse(SUFFICIENT_UID_1, PackageManager.VERIFICATION_REJECT);
     98 
     99         assertFalse("Verification should not be marked as complete yet",
    100                 state.isVerificationComplete());
    101 
    102         state.setVerifierResponse(REQUIRED_UID, PackageManager.VERIFICATION_ALLOW);
    103 
    104         assertTrue("Verification should be considered complete now",
    105                 state.isVerificationComplete());
    106 
    107         assertFalse("Installation should be marked as allowed",
    108                 state.isInstallAllowed());
    109     }
    110 
    111     public void testPackageVerificationState_RequiredAndTwoSufficient_OneSufficientIsEnough() {
    112         PackageVerificationState state = new PackageVerificationState(REQUIRED_UID, null);
    113 
    114         assertFalse("Verification should not be marked as complete yet",
    115                 state.isVerificationComplete());
    116 
    117         state.addSufficientVerifier(SUFFICIENT_UID_1);
    118         state.addSufficientVerifier(SUFFICIENT_UID_2);
    119 
    120         assertFalse("Verification should not be marked as complete yet",
    121                 state.isVerificationComplete());
    122 
    123         state.setVerifierResponse(SUFFICIENT_UID_1, PackageManager.VERIFICATION_ALLOW);
    124 
    125         assertFalse("Verification should not be marked as complete yet",
    126                 state.isVerificationComplete());
    127 
    128         state.setVerifierResponse(REQUIRED_UID, PackageManager.VERIFICATION_ALLOW);
    129 
    130         assertTrue("Verification should be considered complete now",
    131                 state.isVerificationComplete());
    132 
    133         assertTrue("Installation should be marked as allowed",
    134                 state.isInstallAllowed());
    135     }
    136 
    137     public void testPackageVerificationState_RequiredAndTwoSufficient_SecondSufficientIsEnough() {
    138         PackageVerificationState state = new PackageVerificationState(REQUIRED_UID, null);
    139 
    140         assertFalse("Verification should not be marked as complete yet",
    141                 state.isVerificationComplete());
    142 
    143         state.addSufficientVerifier(SUFFICIENT_UID_1);
    144         state.addSufficientVerifier(SUFFICIENT_UID_2);
    145 
    146         assertFalse("Verification should not be marked as complete yet",
    147                 state.isVerificationComplete());
    148 
    149         state.setVerifierResponse(REQUIRED_UID, PackageManager.VERIFICATION_ALLOW);
    150 
    151         assertFalse("Verification should not be marked as complete yet",
    152                 state.isVerificationComplete());
    153 
    154         state.setVerifierResponse(SUFFICIENT_UID_1, PackageManager.VERIFICATION_REJECT);
    155 
    156         assertFalse("Verification should not be marked as complete yet",
    157                 state.isVerificationComplete());
    158 
    159         state.setVerifierResponse(SUFFICIENT_UID_2, PackageManager.VERIFICATION_ALLOW);
    160 
    161         assertTrue("Verification should be considered complete now",
    162                 state.isVerificationComplete());
    163 
    164         assertTrue("Installation should be marked as allowed",
    165                 state.isInstallAllowed());
    166     }
    167 
    168     public void testPackageVerificationState_RequiredAndTwoSufficient_RequiredOverrides() {
    169         PackageVerificationState state = new PackageVerificationState(REQUIRED_UID, null);
    170 
    171         assertFalse("Verification should not be marked as complete yet",
    172                 state.isVerificationComplete());
    173 
    174         state.addSufficientVerifier(SUFFICIENT_UID_1);
    175         state.addSufficientVerifier(SUFFICIENT_UID_2);
    176 
    177         assertFalse("Verification should not be marked as complete yet",
    178                 state.isVerificationComplete());
    179 
    180         state.setVerifierResponse(REQUIRED_UID,
    181                 PackageManager.VERIFICATION_ALLOW_WITHOUT_SUFFICIENT);
    182 
    183         assertTrue("Verification should be marked as complete immediately",
    184                 state.isVerificationComplete());
    185 
    186         assertTrue("Installation should be marked as allowed",
    187                 state.isInstallAllowed());
    188 
    189         state.setVerifierResponse(SUFFICIENT_UID_1, PackageManager.VERIFICATION_REJECT);
    190 
    191         assertTrue("Verification should still be marked as completed",
    192                 state.isVerificationComplete());
    193 
    194         assertTrue("Installation should be marked as allowed still",
    195                 state.isInstallAllowed());
    196 
    197         state.setVerifierResponse(SUFFICIENT_UID_2, PackageManager.VERIFICATION_ALLOW);
    198 
    199         assertTrue("Verification should still be complete",
    200                 state.isVerificationComplete());
    201 
    202         assertTrue("Installation should be marked as allowed still",
    203                 state.isInstallAllowed());
    204     }
    205 }
    206