105ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root/* 205ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root * Copyright (C) 2011 The Android Open Source Project 305ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root * 405ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root * Licensed under the Apache License, Version 2.0 (the "License"); 505ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root * you may not use this file except in compliance with the License. 605ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root * You may obtain a copy of the License at 705ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root * 805ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root * http://www.apache.org/licenses/LICENSE-2.0 905ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root * 1005ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root * Unless required by applicable law or agreed to in writing, software 1105ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root * distributed under the License is distributed on an "AS IS" BASIS, 1205ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1305ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root * See the License for the specific language governing permissions and 1405ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root * limitations under the License. 1505ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root */ 1605ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 1705ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Rootpackage com.android.server.pm; 1805ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 1905ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Rootimport android.content.pm.PackageManager; 2005ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Rootimport com.android.server.pm.PackageVerificationState; 2105ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 2205ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Rootimport android.test.AndroidTestCase; 2305ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 2405ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Rootpublic class PackageVerificationStateTest extends AndroidTestCase { 2505ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root private static final int REQUIRED_UID = 1948; 2605ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 2705ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root private static final int SUFFICIENT_UID_1 = 1005; 2805ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 2905ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root private static final int SUFFICIENT_UID_2 = 8938; 3005ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 3105ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root public void testPackageVerificationState_OnlyRequiredVerifier_AllowedInstall() { 3205ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root PackageVerificationState state = new PackageVerificationState(REQUIRED_UID, null); 3305ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 3405ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root assertFalse("Verification should not be marked as complete yet", 3505ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root state.isVerificationComplete()); 3605ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 3705ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root state.setVerifierResponse(REQUIRED_UID, PackageManager.VERIFICATION_ALLOW); 3805ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 3905ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root assertTrue("Verification should be considered complete now", 4005ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root state.isVerificationComplete()); 4105ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 4205ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root assertTrue("Installation should be marked as allowed", 4305ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root state.isInstallAllowed()); 4405ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root } 4505ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 4605ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root public void testPackageVerificationState_OnlyRequiredVerifier_DeniedInstall() { 4705ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root PackageVerificationState state = new PackageVerificationState(REQUIRED_UID, null); 4805ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 4905ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root assertFalse("Verification should not be marked as complete yet", 5005ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root state.isVerificationComplete()); 5105ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 5205ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root state.setVerifierResponse(REQUIRED_UID, PackageManager.VERIFICATION_REJECT); 5305ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 5405ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root assertTrue("Verification should be considered complete now", 5505ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root state.isVerificationComplete()); 5605ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 5705ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root assertFalse("Installation should be marked as allowed", 5805ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root state.isInstallAllowed()); 5905ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root } 6005ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 6105ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root public void testPackageVerificationState_RequiredAndOneSufficient_RequiredDeniedInstall() { 6205ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root PackageVerificationState state = new PackageVerificationState(REQUIRED_UID, null); 6305ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 6405ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root assertFalse("Verification should not be marked as complete yet", 6505ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root state.isVerificationComplete()); 6605ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 6705ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root state.addSufficientVerifier(SUFFICIENT_UID_1); 6805ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 6905ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root assertFalse("Verification should not be marked as complete yet", 7005ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root state.isVerificationComplete()); 7105ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 7205ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root state.setVerifierResponse(SUFFICIENT_UID_1, PackageManager.VERIFICATION_ALLOW); 7305ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 7405ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root assertFalse("Verification should not be marked as complete yet", 7505ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root state.isVerificationComplete()); 7605ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 7705ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root state.setVerifierResponse(REQUIRED_UID, PackageManager.VERIFICATION_REJECT); 7805ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 7905ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root assertTrue("Verification should be considered complete now", 8005ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root state.isVerificationComplete()); 8105ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 8205ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root assertFalse("Installation should be marked as allowed", 8305ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root state.isInstallAllowed()); 8405ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root } 8505ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 8605ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root public void testPackageVerificationState_RequiredAndOneSufficient_SufficientDeniedInstall() { 8705ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root PackageVerificationState state = new PackageVerificationState(REQUIRED_UID, null); 8805ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 8905ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root assertFalse("Verification should not be marked as complete yet", 9005ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root state.isVerificationComplete()); 9105ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 9205ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root state.addSufficientVerifier(SUFFICIENT_UID_1); 9305ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 9405ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root assertFalse("Verification should not be marked as complete yet", 9505ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root state.isVerificationComplete()); 9605ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 9705ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root state.setVerifierResponse(SUFFICIENT_UID_1, PackageManager.VERIFICATION_REJECT); 9805ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 9905ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root assertFalse("Verification should not be marked as complete yet", 10005ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root state.isVerificationComplete()); 10105ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 10205ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root state.setVerifierResponse(REQUIRED_UID, PackageManager.VERIFICATION_ALLOW); 10305ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 10405ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root assertTrue("Verification should be considered complete now", 10505ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root state.isVerificationComplete()); 10605ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 10705ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root assertFalse("Installation should be marked as allowed", 10805ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root state.isInstallAllowed()); 10905ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root } 11005ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 11105ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root public void testPackageVerificationState_RequiredAndTwoSufficient_OneSufficientIsEnough() { 11205ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root PackageVerificationState state = new PackageVerificationState(REQUIRED_UID, null); 11305ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 11405ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root assertFalse("Verification should not be marked as complete yet", 11505ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root state.isVerificationComplete()); 11605ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 11705ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root state.addSufficientVerifier(SUFFICIENT_UID_1); 11805ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root state.addSufficientVerifier(SUFFICIENT_UID_2); 11905ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 12005ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root assertFalse("Verification should not be marked as complete yet", 12105ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root state.isVerificationComplete()); 12205ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 12305ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root state.setVerifierResponse(SUFFICIENT_UID_1, PackageManager.VERIFICATION_ALLOW); 12405ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 12505ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root assertFalse("Verification should not be marked as complete yet", 12605ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root state.isVerificationComplete()); 12705ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 12805ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root state.setVerifierResponse(REQUIRED_UID, PackageManager.VERIFICATION_ALLOW); 12905ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 13005ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root assertTrue("Verification should be considered complete now", 13105ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root state.isVerificationComplete()); 13205ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 13305ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root assertTrue("Installation should be marked as allowed", 13405ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root state.isInstallAllowed()); 13505ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root } 13605ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 13705ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root public void testPackageVerificationState_RequiredAndTwoSufficient_SecondSufficientIsEnough() { 13805ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root PackageVerificationState state = new PackageVerificationState(REQUIRED_UID, null); 13905ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 14005ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root assertFalse("Verification should not be marked as complete yet", 14105ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root state.isVerificationComplete()); 14205ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 14305ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root state.addSufficientVerifier(SUFFICIENT_UID_1); 14405ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root state.addSufficientVerifier(SUFFICIENT_UID_2); 14505ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 14605ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root assertFalse("Verification should not be marked as complete yet", 14705ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root state.isVerificationComplete()); 14805ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 14905ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root state.setVerifierResponse(REQUIRED_UID, PackageManager.VERIFICATION_ALLOW); 15005ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 15105ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root assertFalse("Verification should not be marked as complete yet", 15205ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root state.isVerificationComplete()); 15305ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 15405ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root state.setVerifierResponse(SUFFICIENT_UID_1, PackageManager.VERIFICATION_REJECT); 15505ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 15605ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root assertFalse("Verification should not be marked as complete yet", 15705ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root state.isVerificationComplete()); 15805ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 15905ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root state.setVerifierResponse(SUFFICIENT_UID_2, PackageManager.VERIFICATION_ALLOW); 16005ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 16105ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root assertTrue("Verification should be considered complete now", 16205ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root state.isVerificationComplete()); 16305ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 16405ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root assertTrue("Installation should be marked as allowed", 16505ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root state.isInstallAllowed()); 16605ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root } 16705ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 16805ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root public void testPackageVerificationState_RequiredAndTwoSufficient_RequiredOverrides() { 16905ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root PackageVerificationState state = new PackageVerificationState(REQUIRED_UID, null); 17005ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 17105ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root assertFalse("Verification should not be marked as complete yet", 17205ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root state.isVerificationComplete()); 17305ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 17405ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root state.addSufficientVerifier(SUFFICIENT_UID_1); 17505ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root state.addSufficientVerifier(SUFFICIENT_UID_2); 17605ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 17705ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root assertFalse("Verification should not be marked as complete yet", 17805ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root state.isVerificationComplete()); 17905ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 18005ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root state.setVerifierResponse(REQUIRED_UID, 18105ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root PackageManager.VERIFICATION_ALLOW_WITHOUT_SUFFICIENT); 18205ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 18305ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root assertTrue("Verification should be marked as complete immediately", 18405ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root state.isVerificationComplete()); 18505ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 18605ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root assertTrue("Installation should be marked as allowed", 18705ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root state.isInstallAllowed()); 18805ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 18905ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root state.setVerifierResponse(SUFFICIENT_UID_1, PackageManager.VERIFICATION_REJECT); 19005ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 19105ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root assertTrue("Verification should still be marked as completed", 19205ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root state.isVerificationComplete()); 19305ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 19405ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root assertTrue("Installation should be marked as allowed still", 19505ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root state.isInstallAllowed()); 19605ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 19705ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root state.setVerifierResponse(SUFFICIENT_UID_2, PackageManager.VERIFICATION_ALLOW); 19805ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 19905ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root assertTrue("Verification should still be complete", 20005ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root state.isVerificationComplete()); 20105ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root 20205ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root assertTrue("Installation should be marked as allowed still", 20305ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root state.isInstallAllowed()); 20405ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root } 20505ca4c90644921df9193d92b2abdc81ef77e4a62Kenny Root} 206