• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2008 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.content.pm.cts;
18 
19 import static org.junit.Assert.assertEquals;
20 import static org.junit.Assert.assertNotNull;
21 
22 import android.content.Context;
23 import android.content.pm.ApplicationInfo;
24 import android.content.pm.PackageManager;
25 import android.content.pm.PackageManager.NameNotFoundException;
26 import android.content.pm.ProviderInfo;
27 import android.content.res.XmlResourceParser;
28 import android.os.Parcel;
29 import android.platform.test.annotations.AppModeFull;
30 import android.platform.test.annotations.DisabledOnRavenwood;
31 import android.platform.test.ravenwood.RavenwoodRule;
32 import android.util.StringBuilderPrinter;
33 
34 import androidx.test.platform.app.InstrumentationRegistry;
35 import androidx.test.runner.AndroidJUnit4;
36 
37 import libcore.io.IoUtils;
38 
39 import org.junit.Rule;
40 import org.junit.Test;
41 import org.junit.runner.RunWith;
42 
43 import java.util.Iterator;
44 import java.util.List;
45 
46 @RunWith(AndroidJUnit4.class)
47 @AppModeFull // TODO(Instant) Figure out which APIs should work.
48 public class ProviderInfoTest {
49     @Rule
50     public final RavenwoodRule mRavenwood = new RavenwoodRule();
51 
52     private static final String PACKAGE_NAME = "android.content.cts";
53     private static final String PROVIDER_NAME = "android.content.cts.MockContentProvider";
54 
getContext()55     private Context getContext() {
56         return InstrumentationRegistry.getInstrumentation().getTargetContext();
57     }
58 
59     @Test
testSimple()60     public void testSimple() {
61         ProviderInfo info = new ProviderInfo();
62         new ProviderInfo(info);
63         assertNotNull(info.toString());
64         info.dump(new StringBuilderPrinter(new StringBuilder()), "");
65     }
66 
67     @Test
68     @DisabledOnRavenwood(blockedBy = PackageManager.class)
testProviderInfo()69     public void testProviderInfo() throws NameNotFoundException {
70         PackageManager pm = getContext().getPackageManager();
71         Parcel p = Parcel.obtain();
72         // Test ProviderInfo()
73         new ProviderInfo();
74         // Test other methods
75         ApplicationInfo appInfo = pm.getApplicationInfo(PACKAGE_NAME,
76                 PackageManager.ApplicationInfoFlags.of(0));
77         List<ProviderInfo> providers = pm.queryContentProviders(PACKAGE_NAME, appInfo.uid,
78                 PackageManager.ComponentInfoFlags.of(0));
79         Iterator<ProviderInfo> providerIterator = providers.iterator();
80         ProviderInfo current;
81         while (providerIterator.hasNext()) {
82             current = providerIterator.next();
83             if (current.name.equals(PROVIDER_NAME)) {
84                 checkProviderInfoMethods(current, p);
85                 break;
86             }
87         }
88     }
89 
90     @Test
91     @DisabledOnRavenwood(blockedBy = PackageManager.class)
testProviderMetaData()92     public void testProviderMetaData() {
93         final ProviderInfo info = getContext().getPackageManager()
94                 .resolveContentProvider("android.content.cts.fileprovider",
95                         PackageManager.ComponentInfoFlags.of(PackageManager.GET_META_DATA));
96         final XmlResourceParser in = info.loadXmlMetaData(
97                 getContext().getPackageManager(), "android.support.FILE_PROVIDER_PATHS");
98         try {
99             assertNotNull(in);
100         } finally {
101             IoUtils.closeQuietly(in);
102         }
103     }
104 
checkProviderInfoMethods(ProviderInfo providerInfo, Parcel p)105     private void checkProviderInfoMethods(ProviderInfo providerInfo, Parcel p) {
106         // Test toString, describeContents
107         assertNotNull(providerInfo.toString());
108         assertEquals(0, providerInfo.describeContents());
109 
110         // Test ProviderInfo(ProviderInfo orig)
111         ProviderInfo infoFromExisted = new ProviderInfo(providerInfo);
112         checkInfoSame(providerInfo, infoFromExisted);
113 
114         // Test writeToParcel
115         providerInfo.writeToParcel(p, 0);
116         p.setDataPosition(0);
117         ProviderInfo infoFromParcel = ProviderInfo.CREATOR.createFromParcel(p);
118         checkInfoSame(providerInfo, infoFromParcel);
119         p.recycle();
120     }
121 
checkInfoSame(ProviderInfo expected, ProviderInfo actual)122     private void checkInfoSame(ProviderInfo expected, ProviderInfo actual) {
123         assertEquals(expected.name, actual.name);
124         assertEquals(expected.authority, actual.authority);
125         assertEquals(expected.readPermission, actual.readPermission);
126         assertEquals(expected.writePermission, actual.writePermission);
127         assertEquals(expected.grantUriPermissions, actual.grantUriPermissions);
128         assertEquals(expected.uriPermissionPatterns, actual.uriPermissionPatterns);
129         assertEquals(expected.multiprocess, actual.multiprocess);
130         assertEquals(expected.initOrder, actual.initOrder);
131         assertEquals(expected.isSyncable, actual.isSyncable);
132     }
133 }
134