1c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee/* 2c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee * Copyright (C) 2011 The Android Open Source Project 3c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee * 4c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee * Licensed under the Apache License, Version 2.0 (the "License"); 5c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee * you may not use this file except in compliance with the License. 6c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee * You may obtain a copy of the License at 7c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee * 8c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee * http://www.apache.org/licenses/LICENSE-2.0 9c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee * 10c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee * Unless required by applicable law or agreed to in writing, software 11c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee * distributed under the License is distributed on an "AS IS" BASIS, 12c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee * See the License for the specific language governing permissions and 14c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee * limitations under the License 15c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee */ 16c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee 17c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjeepackage com.android.providers.contacts; 18c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee 19c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjeeimport android.content.ContentProvider; 20aeaba441ddb05dede8bd86291ca78f42d670d54cFlavio Lerdaimport android.content.ContentValues; 21c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjeeimport android.content.Context; 22c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjeeimport android.content.ContextWrapper; 23c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjeeimport android.content.Intent; 24c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjeeimport android.content.pm.PackageManager; 25aeaba441ddb05dede8bd86291ca78f42d670d54cFlavio Lerdaimport android.provider.CallLog.Calls; 26c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjeeimport android.provider.VoicemailContract; 27c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee 28c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjeeimport java.io.File; 29c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjeeimport java.util.ArrayList; 30c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjeeimport java.util.Collections; 31c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjeeimport java.util.List; 32c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee 33c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee/** 34c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee * Base class for all tests that require interacting with the voicemail content provider. 35c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee */ 36c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjeepublic class BaseVoicemailProviderTest extends BaseContactsProvider2Test { 370b442c4154c77f39aeb84216f433e5bd11cbf79eDebashish Chatterjee private static final String READ_WRITE_ALL_PERMISSION = 38c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee "com.android.voicemail.permission.READ_WRITE_ALL_VOICEMAIL"; 390b442c4154c77f39aeb84216f433e5bd11cbf79eDebashish Chatterjee private static final String ADD_VOICEMAIL_PERMISSION = 400b442c4154c77f39aeb84216f433e5bd11cbf79eDebashish Chatterjee "com.android.voicemail.permission.ADD_VOICEMAIL"; 41c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee 42c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee protected boolean mUseSourceUri = false; 43c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee private File mTestDirectory; 44c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee 45c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee @Override 46c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee protected void setUp() throws Exception { 47c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee super.setUp(); 48c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee addProvider(TestVoicemailProvider.class, VoicemailContract.AUTHORITY); 49c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee TestVoicemailProvider.setVvmProviderCallDelegate(createMockProviderCalls()); 50c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee } 51c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee 52c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee @Override 53c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee protected void tearDown() throws Exception { 54c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee removeTestDirectory(); 55c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee super.tearDown(); 56c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee } 57c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee 58c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee @Override 59c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee protected Class<? extends ContentProvider> getProviderClass() { 60c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee return TestVoicemailProvider.class; 61c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee } 62c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee 63c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee @Override 64c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee protected String getAuthority() { 65c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee return VoicemailContract.AUTHORITY; 66c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee } 67c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee 68c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee protected void setUpForOwnPermission() { 69c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee // Give away full permission, in case it was granted previously. 700b442c4154c77f39aeb84216f433e5bd11cbf79eDebashish Chatterjee mActor.removePermissions(READ_WRITE_ALL_PERMISSION); 710b442c4154c77f39aeb84216f433e5bd11cbf79eDebashish Chatterjee mActor.addPermissions(ADD_VOICEMAIL_PERMISSION); 72c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee mUseSourceUri = true; 73c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee } 74c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee 75c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee protected void setUpForFullPermission() { 760b442c4154c77f39aeb84216f433e5bd11cbf79eDebashish Chatterjee mActor.addPermissions(ADD_VOICEMAIL_PERMISSION); 770b442c4154c77f39aeb84216f433e5bd11cbf79eDebashish Chatterjee mActor.addPermissions(READ_WRITE_ALL_PERMISSION); 78c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee mUseSourceUri = false; 79c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee } 80c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee 81c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee protected void setUpForNoPermission() { 820b442c4154c77f39aeb84216f433e5bd11cbf79eDebashish Chatterjee mActor.removePermissions(ADD_VOICEMAIL_PERMISSION); 830b442c4154c77f39aeb84216f433e5bd11cbf79eDebashish Chatterjee mActor.removePermissions(READ_WRITE_ALL_PERMISSION); 84c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee mUseSourceUri = true; 85c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee } 86c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee 87c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee protected int countFilesInTestDirectory() { 88c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee return findAllFiles(mTestDirectory).size(); 89c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee } 90c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee 91c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee // TODO: Use a mocking framework to mock these calls. 92c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee private VvmProviderCalls createMockProviderCalls() { 93c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee return new VvmProviderCalls() { 94c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee @Override 95c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee public void sendOrderedBroadcast(Intent intent, String receiverPermission) { 96c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee // Do nothing for now. 97c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee } 98c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee 99c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee @Override 100c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee public File getDir(String name, int mode) { 101c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee return getTestDirectory(); 102c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee } 103c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee }; 104c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee } 105c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee 106c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee /** Lazily construct the test directory when required. */ 107c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee private synchronized File getTestDirectory() { 108c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee if (mTestDirectory == null) { 109c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee File baseDirectory = getContext().getCacheDir(); 110c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee mTestDirectory = new File(baseDirectory, Long.toString(System.currentTimeMillis())); 111c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee assertFalse(mTestDirectory.exists()); 112c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee assertTrue(mTestDirectory.mkdirs()); 113c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee } 114c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee return mTestDirectory; 115c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee } 116c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee 117c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee private void removeTestDirectory() { 118c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee if (mTestDirectory != null) { 119c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee recursiveDeleteAll(mTestDirectory); 120c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee } 121c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee } 122c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee 123c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee private static void recursiveDeleteAll(File input) { 124c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee if (input.isDirectory()) { 125c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee for (File file : input.listFiles()) { 126c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee recursiveDeleteAll(file); 127c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee } 128c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee } 129c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee assertTrue("error deleting " + input.getAbsolutePath(), input.delete()); 130c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee } 131c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee 132c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee private List<File> findAllFiles(File input) { 133c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee if (input == null) { 134c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee return Collections.emptyList(); 135c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee } 136c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee if (!input.isDirectory()) { 137c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee return Collections.singletonList(input); 138c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee } 139c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee List<File> results = new ArrayList<File>(); 140c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee for (File file : input.listFiles()) { 141c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee results.addAll(findAllFiles(file)); 142c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee } 143c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee return results; 144c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee } 145c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee 146c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee /** The calls that we need to mock out for our VvmProvider, used by TestVoicemailProvider. */ 147c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee private interface VvmProviderCalls { 148c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee public void sendOrderedBroadcast(Intent intent, String receiverPermission); 149c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee public File getDir(String name, int mode); 150c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee } 151c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee 152c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee public static class TestVoicemailProvider extends VoicemailContentProvider { 153c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee private static VvmProviderCalls mDelegate; 154c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee public static synchronized void setVvmProviderCallDelegate(VvmProviderCalls delegate) { 155c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee mDelegate = delegate; 156c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee } 157c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee 158c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee @Override 159c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee protected ContactsDatabaseHelper getDatabaseHelper(Context context) { 1609b626252d91e451a822f48cd127aef5d609a6257Makoto Onuki return ContactsDatabaseHelper.getNewInstanceForTest(context); 161c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee } 162c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee 163c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee @Override 164c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee protected Context context() { 165c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee return new ContextWrapper(getContext()) { 166c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee @Override 167c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee public File getDir(String name, int mode) { 168c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee return mDelegate.getDir(name, mode); 169c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee } 170c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee @Override 171c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee public void sendBroadcast(Intent intent, String receiverPermission) { 172c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee mDelegate.sendOrderedBroadcast(intent, receiverPermission); 173c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee } 174c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee @Override 175c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee public PackageManager getPackageManager() { 176c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee return new MockPackageManager("com.test.package1", "com.test.package2"); 177c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee } 178c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee }; 179c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee } 180c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee 181c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee @Override 182c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee protected String getCallingPackage() { 183c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee return getContext().getPackageName(); 184c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee } 185aeaba441ddb05dede8bd86291ca78f42d670d54cFlavio Lerda 186aeaba441ddb05dede8bd86291ca78f42d670d54cFlavio Lerda @Override 187aeaba441ddb05dede8bd86291ca78f42d670d54cFlavio Lerda CallLogInsertionHelper createCallLogInsertionHelper(Context context) { 188aeaba441ddb05dede8bd86291ca78f42d670d54cFlavio Lerda return new CallLogInsertionHelper() { 189aeaba441ddb05dede8bd86291ca78f42d670d54cFlavio Lerda @Override 190aeaba441ddb05dede8bd86291ca78f42d670d54cFlavio Lerda public String getGeocodedLocationFor(String number, String countryIso) { 191aeaba441ddb05dede8bd86291ca78f42d670d54cFlavio Lerda return "usa"; 192aeaba441ddb05dede8bd86291ca78f42d670d54cFlavio Lerda } 193aeaba441ddb05dede8bd86291ca78f42d670d54cFlavio Lerda 194aeaba441ddb05dede8bd86291ca78f42d670d54cFlavio Lerda @Override 195aeaba441ddb05dede8bd86291ca78f42d670d54cFlavio Lerda public void addComputedValues(ContentValues values) { 196aeaba441ddb05dede8bd86291ca78f42d670d54cFlavio Lerda values.put(Calls.COUNTRY_ISO, "us"); 197aeaba441ddb05dede8bd86291ca78f42d670d54cFlavio Lerda values.put(Calls.GEOCODED_LOCATION, "usa"); 198aeaba441ddb05dede8bd86291ca78f42d670d54cFlavio Lerda } 199aeaba441ddb05dede8bd86291ca78f42d670d54cFlavio Lerda }; 200aeaba441ddb05dede8bd86291ca78f42d670d54cFlavio Lerda } 201c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee } 202c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee} 203