186af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi/* 286af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi * Copyright (C) 2016 The Android Open Source Project 386af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi * 486af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi * Licensed under the Apache License, Version 2.0 (the "License"); 586af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi * you may not use this file except in compliance with the License. 686af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi * You may obtain a copy of the License at 786af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi * 886af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi * http://www.apache.org/licenses/LICENSE-2.0 986af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi * 1086af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi * Unless required by applicable law or agreed to in writing, software 1186af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi * distributed under the License is distributed on an "AS IS" BASIS, 1286af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1386af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi * See the License for the specific language governing permissions and 1486af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi * limitations under the License. 1586af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi */ 1686af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi 1786af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishipackage com.android.storagemanager.deletionhelper; 1886af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi 1986af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishiimport android.test.AndroidTestCase; 2086af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishiimport android.content.pm.IPackageDeleteObserver; 2186af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishiimport android.content.pm.PackageManager; 2286af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishiimport android.os.RemoteException; 2386af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishiimport android.test.mock.MockPackageManager; 2486af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishiimport android.test.suitebuilder.annotation.SmallTest; 2586af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi 2686af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishiimport com.android.storagemanager.deletionhelper.PackageDeletionTask; 2786af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishiimport com.android.storagemanager.deletionhelper.PackageDeletionTask.Callback; 2886af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi 2986af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishiimport java.util.Set; 3086af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishiimport java.util.HashSet; 3186af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi 3286af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishipublic class PackageDeletionTaskTest extends AndroidTestCase { 3386af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi private FakePackageManager mPackageManager; 3486af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi private Set<String> mDeletedApps; 3586af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi 3686af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi @Override 3786af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi protected void setUp() throws Exception { 3886af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi mPackageManager = new FakePackageManager(); 3986af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi mDeletedApps = new HashSet<String>(); 4086af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi } 4186af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi 4286af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi @SmallTest 4386af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi public void testDeleteNoApps() throws Exception { 4486af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi runTask(new HashSet<String>(), false); 4586af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi } 4686af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi 4786af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi @SmallTest 4886af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi public void testDeleteOneApp() throws Exception { 4986af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi HashSet<String> appsToDelete = new HashSet<String>(); 5086af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi appsToDelete.add("app.test1"); 5186af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi runTask(appsToDelete, false); 5286af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi } 5386af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi 5486af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi @SmallTest 5586af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi public void testDeleteManyApps() throws Exception { 5686af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi HashSet<String> appsToDelete = new HashSet<String>(); 5786af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi appsToDelete.add("app.test1"); 5886af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi appsToDelete.add("app.test2"); 5986af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi runTask(appsToDelete, false); 6086af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi } 6186af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi 6286af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi @SmallTest 6386af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi public void testDeleteFails() throws Exception { 6486af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi HashSet<String> appsToDelete = new HashSet<String>(); 6586af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi appsToDelete.add("app.test1"); 6686af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi mPackageManager.deletionSucceeds = false; 6786af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi runTask(appsToDelete, true); 6886af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi } 6986af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi 7086af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi private void runTask(HashSet<String> appsToDelete, boolean shouldFail) { 7186af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi PackageDeletionTask task = new PackageDeletionTask(mPackageManager, appsToDelete, 7286af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi new VerifierCallback(appsToDelete, shouldFail)); 7386af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi task.run(); 7486af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi } 7586af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi 7686af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi class FakePackageManager extends MockPackageManager { 7786af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi public boolean deletionSucceeds = true; 7886af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi 7986af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi @Override 8086af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi public void deletePackageAsUser(String packageName, IPackageDeleteObserver observer, 8186af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi int flags, int userId) { 8286af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi int resultCode; 8386af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi if (deletionSucceeds) { 8486af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi resultCode = PackageManager.DELETE_SUCCEEDED; 8586af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi mDeletedApps.add(packageName); 8686af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi } else { 8786af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi resultCode = PackageManager.DELETE_FAILED_INTERNAL_ERROR; 8886af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi } 8986af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi 9086af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi try { 9186af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi observer.packageDeleted(packageName, resultCode); 9286af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi } catch (RemoteException e) { 9386af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi fail(e.toString()); 9486af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi } 9586af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi } 9686af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi } 9786af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi 9886af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi class VerifierCallback extends Callback { 9986af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi private Set<String> mExpectedDeletedApps; 10086af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi private boolean mShouldFail; 10186af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi 10286af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi public VerifierCallback(HashSet<String> expectedDeletedApps, boolean shouldFail) { 10386af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi mExpectedDeletedApps = expectedDeletedApps; 10486af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi mShouldFail = shouldFail; 10586af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi } 10686af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi 10786af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi @Override 10886af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi public void onSuccess() { 10986af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi assertFalse(mShouldFail); 11086af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi assertEquals(mExpectedDeletedApps, mDeletedApps); 11186af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi } 11286af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi 11386af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi @Override 11486af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi public void onError() { 11586af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi assertTrue(mShouldFail); 11686af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi } 11786af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi } 11886af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi 11986af5212026edc3696881b3f1f7aab2f56b15563Daniel Nishi} 120