1 /* 2 * Copyright (C) 2017 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 package com.android.providers.contacts; 17 18 import android.content.ContentValues; 19 import android.database.Cursor; 20 import android.provider.VoicemailContract; 21 import android.provider.VoicemailContract.Status; 22 import android.provider.VoicemailContract.Voicemails; 23 import android.test.suitebuilder.annotation.SmallTest; 24 25 import com.android.providers.contacts.testutil.TestUtil; 26 27 /** 28 * Tests for {@link VoicemailCleanupTest}. 29 */ 30 @SmallTest 31 public class VoicemailCleanupTest extends BaseVoicemailProviderTest { 32 private static final String TEST_PACKAGE_1 = "package1"; 33 private static final String TEST_PACKAGE_2 = "package2"; 34 private static final String TEST_PACKAGE_3 = "package3"; 35 36 @Override 37 protected void setUp() throws Exception { 38 super.setUp(); 39 setUpForFullPermission(); 40 } 41 42 /** 43 * Test for {@link ContactsPackageMonitor#cleanupVoicemail}. 44 */ 45 public void testCleanupVoicemail() { 46 insertDataForPackage(TEST_PACKAGE_1); 47 insertDataForPackage(TEST_PACKAGE_2); 48 49 mPackageManager.addPackage(123456, TEST_PACKAGE_2); 50 51 checkDataExistsForPackage(TEST_PACKAGE_1); 52 checkDataExistsForPackage(TEST_PACKAGE_2); 53 54 ContactsPackageMonitor.cleanupVoicemail(getMockContext(), TEST_PACKAGE_1); 55 56 checkDataDoesNotExistForPackage(TEST_PACKAGE_1); 57 checkDataExistsForPackage(TEST_PACKAGE_2); 58 59 // Call for TEST_PACKAGE_2, which is still installed. 60 ContactsPackageMonitor.cleanupVoicemail(getMockContext(), TEST_PACKAGE_2); 61 62 checkDataDoesNotExistForPackage(TEST_PACKAGE_1); 63 checkDataExistsForPackage(TEST_PACKAGE_2); 64 65 // Uninstall the package and try again. 66 mPackageManager.removePackage(123456); 67 ContactsPackageMonitor.cleanupVoicemail(getMockContext(), TEST_PACKAGE_2); 68 69 checkDataDoesNotExistForPackage(TEST_PACKAGE_1); 70 checkDataDoesNotExistForPackage(TEST_PACKAGE_2); 71 } 72 73 private void insertDataForPackage(String sourcePackage) { 74 ContentValues values = new ContentValues(); 75 values.put(VoicemailContract.SOURCE_PACKAGE_FIELD, sourcePackage); 76 mResolver.insert(Voicemails.buildSourceUri(sourcePackage), values); 77 mResolver.insert(Status.buildSourceUri(sourcePackage), values); 78 } 79 80 private static void assertBigger(int smaller, int actual) { 81 if (smaller >= actual) { 82 fail("Expected to be bigger than " + smaller + ", but was " + actual); 83 } 84 } 85 86 private void checkDataExistsForPackage(String sourcePackage) { 87 Cursor cursor = mResolver.query( 88 Voicemails.buildSourceUri(sourcePackage), null, null, null, null); 89 assertBigger(0, cursor.getCount()); 90 cursor = mResolver.query( 91 Status.buildSourceUri(sourcePackage), null, null, null, null); 92 assertBigger(0, cursor.getCount()); 93 } 94 95 private void checkDataDoesNotExistForPackage(String sourcePackage) { 96 Cursor cursor = mResolver.query( 97 Voicemails.buildSourceUri(sourcePackage), null, 98 "(ifnull(" + Voicemails.DELETED + ",0)==0)", null, null); 99 assertEquals(0, cursor.getCount()); 100 cursor = mResolver.query( 101 Status.buildSourceUri(sourcePackage), null, null, null, null); 102 assertEquals(0, cursor.getCount()); 103 } 104 105 public void testRemoveStalePackagesAtStartUp() { 106 insertDataForPackage(TEST_PACKAGE_1); 107 insertDataForPackage(TEST_PACKAGE_2); 108 insertDataForPackage(TEST_PACKAGE_3); 109 110 mPackageManager.addPackage(10001, TEST_PACKAGE_1); 111 mPackageManager.addPackage(10002, TEST_PACKAGE_2); 112 113 checkDataExistsForPackage(TEST_PACKAGE_1); 114 checkDataExistsForPackage(TEST_PACKAGE_2); 115 checkDataExistsForPackage(TEST_PACKAGE_3); 116 117 final VoicemailContentProvider provider = 118 (VoicemailContentProvider) mActor.provider; 119 120 // In unit tests, BG tasks are synchronous. 121 provider.scheduleScanStalePackages(); 122 123 checkDataExistsForPackage(TEST_PACKAGE_1); 124 checkDataExistsForPackage(TEST_PACKAGE_2); 125 checkDataDoesNotExistForPackage(TEST_PACKAGE_3); 126 127 mPackageManager.removePackage(10001); 128 129 provider.scheduleScanStalePackages(); 130 131 checkDataDoesNotExistForPackage(TEST_PACKAGE_1); 132 checkDataExistsForPackage(TEST_PACKAGE_2); 133 checkDataDoesNotExistForPackage(TEST_PACKAGE_3); 134 } 135 } 136