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