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