diff options
author | Daniel Sandler <dsandler@android.com> | 2019-02-21 18:27:45 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2019-02-21 18:27:45 +0000 |
commit | 6024de3b89de71a70f77ca728705415707bb369a (patch) | |
tree | 253397f140946d9cbfe9f164e4a3ed78ebd3e2ea | |
parent | 3293ab6229324914886e86f41dc04534d5821950 (diff) | |
parent | 81cb5e9919836692bc031f0ba18c8faac1235a8f (diff) | |
download | base-6024de3b89de71a70f77ca728705415707bb369a.tar.gz |
Merge "Skip empty slice permissions files during backup" into pi-dev
-rw-r--r-- | services/core/java/com/android/server/slice/SlicePermissionManager.java | 20 | ||||
-rw-r--r-- | services/tests/uiservicestests/src/com/android/server/slice/SlicePermissionManagerTest.java | 25 |
2 files changed, 32 insertions, 13 deletions
diff --git a/services/core/java/com/android/server/slice/SlicePermissionManager.java b/services/core/java/com/android/server/slice/SlicePermissionManager.java index 315d5e39c94b..1d1c28f5f9b7 100644 --- a/services/core/java/com/android/server/slice/SlicePermissionManager.java +++ b/services/core/java/com/android/server/slice/SlicePermissionManager.java @@ -175,18 +175,24 @@ public class SlicePermissionManager implements DirtyTracker { handlePersist(); } for (String file : new File(mSliceDir.getAbsolutePath()).list()) { - if (file.isEmpty()) continue; try (ParserHolder parser = getParser(file)) { - Persistable p; - while (parser.parser.getEventType() != XmlPullParser.START_TAG) { + Persistable p = null; + while (parser.parser.getEventType() != XmlPullParser.END_DOCUMENT) { + if (parser.parser.getEventType() == XmlPullParser.START_TAG) { + if (SliceClientPermissions.TAG_CLIENT.equals(parser.parser.getName())) { + p = SliceClientPermissions.createFrom(parser.parser, tracker); + } else { + p = SliceProviderPermissions.createFrom(parser.parser, tracker); + } + break; + } parser.parser.next(); } - if (SliceClientPermissions.TAG_CLIENT.equals(parser.parser.getName())) { - p = SliceClientPermissions.createFrom(parser.parser, tracker); + if (p != null) { + p.writeTo(out); } else { - p = SliceProviderPermissions.createFrom(parser.parser, tracker); + Slog.w(TAG, "Invalid or empty slice permissions file: " + file); } - p.writeTo(out); } } diff --git a/services/tests/uiservicestests/src/com/android/server/slice/SlicePermissionManagerTest.java b/services/tests/uiservicestests/src/com/android/server/slice/SlicePermissionManagerTest.java index b315e514d6a6..efefee119e5f 100644 --- a/services/tests/uiservicestests/src/com/android/server/slice/SlicePermissionManagerTest.java +++ b/services/tests/uiservicestests/src/com/android/server/slice/SlicePermissionManagerTest.java @@ -16,6 +16,7 @@ package com.android.server.slice; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; import android.content.ContentProvider; import android.content.ContentResolver; @@ -26,6 +27,7 @@ import android.support.test.filters.SmallTest; import android.testing.AndroidTestingRunner; import android.testing.TestableLooper; import android.testing.TestableLooper.RunWithLooper; +import android.util.Log; import android.util.Xml.Encoding; import com.android.server.UiServiceTestCase; @@ -46,10 +48,12 @@ import java.io.IOException; @RunWith(AndroidTestingRunner.class) @RunWithLooper public class SlicePermissionManagerTest extends UiServiceTestCase { + private static final String TAG = "SlicePerManTest"; @Test public void testGrant() { - File sliceDir = new File(mContext.getDataDir(), "system/slices"); + File sliceDir = new File(mContext.getCacheDir(), "testGrantSlices"); + Log.v(TAG, "testGrant: slice permissions stored in " + sliceDir.getAbsolutePath()); SlicePermissionManager permissions = new SlicePermissionManager(mContext, TestableLooper.get(this).getLooper(), sliceDir); Uri uri = new Builder().scheme(ContentResolver.SCHEME_CONTENT) @@ -59,11 +63,15 @@ public class SlicePermissionManagerTest extends UiServiceTestCase { permissions.grantSliceAccess("my.pkg", 0, "provider.pkg", 0, uri); assertTrue(permissions.hasPermission("my.pkg", 0, uri)); + + // Cleanup. + assertTrue(FileUtils.deleteContentsAndDir(sliceDir)); } @Test public void testBackup() throws XmlPullParserException, IOException { - File sliceDir = new File(mContext.getDataDir(), "system/slices"); + File sliceDir = new File(mContext.getCacheDir(), "testBackupSlices"); + Log.v(TAG, "testBackup: slice permissions stored in " + sliceDir.getAbsolutePath()); Uri uri = new Builder().scheme(ContentResolver.SCHEME_CONTENT) .authority("authority") .path("something").build(); @@ -90,7 +98,10 @@ public class SlicePermissionManagerTest extends UiServiceTestCase { TestableLooper.get(this).getLooper()); permissions.readRestore(parser); - assertTrue(permissions.hasFullAccess("com.android.mypkg", 10)); + if (!permissions.hasFullAccess("com.android.mypkg", 10)) { + fail("com.android.mypkg@10 did not have full access. backup file: " + + output.toString()); + } assertTrue(permissions.hasPermission("com.android.otherpkg", 0, ContentProvider.maybeAddUserId(uri, 1))); permissions.removePkg("com.android.lastpkg", 1); @@ -102,8 +113,9 @@ public class SlicePermissionManagerTest extends UiServiceTestCase { } @Test - public void testInvalid() throws Exception { - File sliceDir = new File(mContext.getCacheDir(), "slices-test"); + public void testInvalid() { + File sliceDir = new File(mContext.getCacheDir(), "testInvalidSlices"); + Log.v(TAG, "testInvalid: slice permissions stored in " + sliceDir.getAbsolutePath()); if (!sliceDir.exists()) { sliceDir.mkdir(); } @@ -118,7 +130,8 @@ public class SlicePermissionManagerTest extends UiServiceTestCase { @Override public void writeTo(XmlSerializer out) throws IOException { - throw new RuntimeException("this doesn't work"); + throw new RuntimeException("this RuntimeException inside junk.writeTo() " + + "should be caught and suppressed by surrounding code"); } }; |