1 /*
2  * Copyright (C) 2017 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
5  * except in compliance with the License. You may obtain a copy of the License at
6  *
7  *      http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software distributed under the
10  * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
11  * KIND, either express or implied. See the License for the specific language governing
12  * permissions and limitations under the License.
13  */
14 
15 package android.testing;
16 
17 import static android.content.pm.PackageManager.PERMISSION_DENIED;
18 import static android.content.pm.PackageManager.PERMISSION_GRANTED;
19 
20 import static org.junit.Assert.assertEquals;
21 
22 import android.Manifest.permission;
23 import android.net.Uri;
24 
25 import androidx.test.InstrumentationRegistry;
26 import androidx.test.filters.SmallTest;
27 
28 import org.junit.Rule;
29 import org.junit.Test;
30 import org.junit.runner.RunWith;
31 
32 @SmallTest
33 @RunWith(AndroidTestingRunner.class)
34 public class TestablePermissionsTest {
35 
36     private static final Uri URI_1 = Uri.parse("content://my.authority/path1");
37     private static final Uri URI_2 = Uri.parse("content://my.authority/path2");
38 
39     @Rule
40     public TestableContext mContext = new TestableContext(InstrumentationRegistry.getContext());
41 
42     @Test
testCheck()43     public void testCheck() {
44         mContext.getTestablePermissions().setPermission(permission.INTERACT_ACROSS_USERS,
45                 PERMISSION_GRANTED);
46         mContext.getTestablePermissions().setPermission(permission.INTERACT_ACROSS_USERS_FULL,
47                 PERMISSION_DENIED);
48         assertEquals(PERMISSION_GRANTED,
49                 mContext.checkPermission(permission.INTERACT_ACROSS_USERS, 0, 0));
50         assertEquals(PERMISSION_DENIED,
51                 mContext.checkPermission(permission.INTERACT_ACROSS_USERS_FULL, 0, 0));
52     }
53 
54     @Test
testCheckUri()55     public void testCheckUri() {
56         mContext.getTestablePermissions().setPermission(URI_1, PERMISSION_GRANTED);
57         mContext.getTestablePermissions().setPermission(URI_2, PERMISSION_DENIED);
58 
59         assertEquals(PERMISSION_GRANTED, mContext.checkUriPermission(URI_1, 0, 0, 0));
60         assertEquals(PERMISSION_DENIED, mContext.checkUriPermission(URI_2, 0, 0, 0));
61     }
62 
63     @Test
testEnforceNoException()64     public void testEnforceNoException() {
65         mContext.getTestablePermissions().setPermission(permission.INTERACT_ACROSS_USERS,
66                 PERMISSION_GRANTED);
67         mContext.enforceCallingOrSelfPermission(permission.INTERACT_ACROSS_USERS, "");
68     }
69 
70     @Test(expected = SecurityException.class)
testEnforceWithException()71     public void testEnforceWithException() {
72         mContext.getTestablePermissions().setPermission(permission.INTERACT_ACROSS_USERS,
73                 PERMISSION_DENIED);
74         mContext.enforceCallingOrSelfPermission(permission.INTERACT_ACROSS_USERS, "");
75     }
76 
77     @Test
testEnforceUriNoException()78     public void testEnforceUriNoException() {
79         mContext.getTestablePermissions().setPermission(URI_1, PERMISSION_GRANTED);
80         mContext.enforceUriPermission(URI_1, 0, 0, 0, "");
81     }
82 
83     @Test(expected = SecurityException.class)
testEnforceUriWithException()84     public void testEnforceUriWithException() {
85         mContext.getTestablePermissions().setPermission(URI_1, PERMISSION_DENIED);
86         mContext.enforceUriPermission(URI_1, 0, 0, 0, "");
87     }
88 
89 }