16be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu/* 26be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu * Copyright (C) 2016 The Android Open Source Project 36be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu * 46be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu * Licensed under the Apache License, Version 2.0 (the "License"); 56be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu * you may not use this file except in compliance with the License. 66be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu * You may obtain a copy of the License at 76be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu * 86be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu * http://www.apache.org/licenses/LICENSE-2.0 96be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu * 106be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu * Unless required by applicable law or agreed to in writing, software 116be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu * distributed under the License is distributed on an "AS IS" BASIS, 126be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu * See the License for the specific language governing permissions and 146be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu * limitations under the License 156be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu */ 166be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu 176be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liupackage com.android.providers.telephony; 186be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu 196be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liuimport android.annotation.TargetApi; 206be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liuimport android.content.ContentProvider; 216be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liuimport android.content.ContentResolver; 226be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liuimport android.content.ContentValues; 236be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liuimport android.content.Context; 246be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liuimport android.content.pm.PackageManager; 256be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liuimport android.content.pm.ProviderInfo; 266be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liuimport android.content.res.Resources; 276be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liuimport android.database.Cursor; 286cf9bda025d069022162ca347667562664aa0b95Jordan Liuimport android.database.ContentObserver; 296be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liuimport android.database.DatabaseErrorHandler; 306be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liuimport android.database.sqlite.SQLiteDatabase; 316be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liuimport android.database.sqlite.SQLiteOpenHelper; 326be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liuimport android.database.sqlite.SQLiteDatabase.CursorFactory; 336be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liuimport android.net.Uri; 346be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liuimport android.os.Build; 356be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liuimport android.os.FileUtils; 366be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liuimport android.provider.Telephony.Carriers; 376be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liuimport android.telephony.SubscriptionManager; 386be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liuimport android.test.AndroidTestCase; 396be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liuimport android.test.mock.MockContentProvider; 406be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liuimport android.test.mock.MockContentResolver; 416be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liuimport android.test.mock.MockContext; 42c7c60081080acf8053ca4c8125b986ba3df786c0Jordan Liuimport android.test.suitebuilder.annotation.SmallTest; 436be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liuimport android.text.TextUtils; 446be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liuimport android.util.Log; 456be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu 466be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liuimport com.android.providers.telephony.TelephonyProvider; 476be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu 486be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liuimport junit.framework.TestCase; 496be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu 506be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liuimport org.junit.After; 516be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liuimport org.junit.Before; 526be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liuimport org.junit.Test; 536be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu 546be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu 556be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu/** 566be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu * Tests for testing CRUD operations of TelephonyProvider. 576be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu * Uses a MockContentResolver to get permission WRITE_APN_SETTINGS in order to test insert/delete 586be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu * Uses TelephonyProviderTestable to set up in-memory database 596be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu * 606be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu * Build, install and run the tests by running the commands below: 616be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu * runtest --path <dir or file> 626be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu * runtest --path <dir or file> --test-method <testMethodName> 636be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu * e.g.) 646be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu * runtest --path tests/src/com/android/providers/telephony/TelephonyProviderTest.java \ 656be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu * --test-method testInsertCarriers 666be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu */ 676be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liupublic class TelephonyProviderTest extends TestCase { 686be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu private static final String TAG = "TelephonyProviderTest"; 696be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu 706be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu private MockContextWithProvider mContext; 716be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu private MockContentResolver mContentResolver; 726be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu private TelephonyProviderTestable mTelephonyProviderTestable; 736be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu 746cf9bda025d069022162ca347667562664aa0b95Jordan Liu private int notifyChangeCount; 756cf9bda025d069022162ca347667562664aa0b95Jordan Liu 766be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu 776be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu /** 786be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu * This is used to give the TelephonyProviderTest a mocked context which takes a 796be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu * TelephonyProvider and attaches it to the ContentResolver with telephony authority. 806be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu * The mocked context also gives WRITE_APN_SETTINGS permissions 816be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu */ 826be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu private class MockContextWithProvider extends MockContext { 836be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu private final MockContentResolver mResolver; 846be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu 856be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu public MockContextWithProvider(TelephonyProvider telephonyProvider) { 866cf9bda025d069022162ca347667562664aa0b95Jordan Liu mResolver = new MockContentResolver() { 876cf9bda025d069022162ca347667562664aa0b95Jordan Liu @Override 886cf9bda025d069022162ca347667562664aa0b95Jordan Liu public void notifyChange(Uri uri, ContentObserver observer, boolean syncToNetwork, 896cf9bda025d069022162ca347667562664aa0b95Jordan Liu int userHandle) { 906cf9bda025d069022162ca347667562664aa0b95Jordan Liu notifyChangeCount++; 916cf9bda025d069022162ca347667562664aa0b95Jordan Liu } 926cf9bda025d069022162ca347667562664aa0b95Jordan Liu }; 936be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu 946be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu // Add authority="telephony" to given telephonyProvider 956be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu ProviderInfo providerInfo = new ProviderInfo(); 966be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu providerInfo.authority = "telephony"; 976be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu 986be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu // Add context to given telephonyProvider 996be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu telephonyProvider.attachInfoForTesting(this, providerInfo); 1006be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu Log.d(TAG, "MockContextWithProvider: telephonyProvider.getContext(): " 1016be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu + telephonyProvider.getContext()); 1026be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu 1036be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu // Add given telephonyProvider to mResolver with authority="telephony" so that 1046be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu // mResolver can send queries to mTelephonyProvider 1056be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu mResolver.addProvider("telephony", telephonyProvider); 1066be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu Log.d(TAG, "MockContextWithProvider: Add telephonyProvider to mResolver"); 1076be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu } 1086be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu 1096be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu @Override 1106be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu public Object getSystemService(String name) { 1116be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu Log.d(TAG, "getSystemService: returning null"); 1126be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu return null; 1136be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu } 1146be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu 1156be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu @Override 1166be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu public Resources getResources() { 1176be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu Log.d(TAG, "getResources: returning null"); 1186be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu return null; 1196be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu } 1206be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu 1216be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu @Override 1226be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu public MockContentResolver getContentResolver() { 1236be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu return mResolver; 1246be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu } 1256be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu 1266be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu // Gives permission to write to the APN table within the MockContext 1276be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu @Override 1286be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu public int checkCallingOrSelfPermission(String permission) { 1296be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu if (TextUtils.equals(permission, "android.permission.WRITE_APN_SETTINGS")) { 1306be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu Log.d(TAG, "checkCallingOrSelfPermission: permission=" + permission 1316be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu + ", returning PackageManager.PERMISSION_GRANTED"); 1326be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu return PackageManager.PERMISSION_GRANTED; 1336be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu } else { 1346be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu Log.d(TAG, "checkCallingOrSelfPermission: permission=" + permission 1356be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu + ", returning PackageManager.PERMISSION_DENIED"); 1366be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu return PackageManager.PERMISSION_DENIED; 1376be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu } 1386be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu } 1396be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu } 1406be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu 1416be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu @Override 1426be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu protected void setUp() throws Exception { 1436be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu super.setUp(); 1446be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu mTelephonyProviderTestable = new TelephonyProviderTestable(); 1456be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu mContext = new MockContextWithProvider(mTelephonyProviderTestable); 1466be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu mContentResolver = (MockContentResolver) mContext.getContentResolver(); 1476cf9bda025d069022162ca347667562664aa0b95Jordan Liu notifyChangeCount = 0; 1486be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu } 1496be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu 1506be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu @Override 1516be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu protected void tearDown() throws Exception { 1526be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu super.tearDown(); 1536be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu mTelephonyProviderTestable.closeDatabase(); 1546be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu } 1556be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu 1566be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu /** 1576cf9bda025d069022162ca347667562664aa0b95Jordan Liu * Test bulk inserting, querying; 1586cf9bda025d069022162ca347667562664aa0b95Jordan Liu * Verify that the inserted values match the result of the query. 1596cf9bda025d069022162ca347667562664aa0b95Jordan Liu */ 1606cf9bda025d069022162ca347667562664aa0b95Jordan Liu @Test 1616cf9bda025d069022162ca347667562664aa0b95Jordan Liu @SmallTest 1626cf9bda025d069022162ca347667562664aa0b95Jordan Liu public void testBulkInsertCarriers() { 1636cf9bda025d069022162ca347667562664aa0b95Jordan Liu // insert 2 test contentValues 1646cf9bda025d069022162ca347667562664aa0b95Jordan Liu ContentValues contentValues = new ContentValues(); 1656cf9bda025d069022162ca347667562664aa0b95Jordan Liu final String insertApn = "exampleApnName"; 1666cf9bda025d069022162ca347667562664aa0b95Jordan Liu final String insertName = "exampleName"; 1676cf9bda025d069022162ca347667562664aa0b95Jordan Liu final Integer insertCurrent = 1; 1686cf9bda025d069022162ca347667562664aa0b95Jordan Liu final String insertNumeric = "123456"; 1696cf9bda025d069022162ca347667562664aa0b95Jordan Liu contentValues.put(Carriers.APN, insertApn); 1706cf9bda025d069022162ca347667562664aa0b95Jordan Liu contentValues.put(Carriers.NAME, insertName); 1716cf9bda025d069022162ca347667562664aa0b95Jordan Liu contentValues.put(Carriers.CURRENT, insertCurrent); 1726cf9bda025d069022162ca347667562664aa0b95Jordan Liu contentValues.put(Carriers.NUMERIC, insertNumeric); 1736cf9bda025d069022162ca347667562664aa0b95Jordan Liu 1746cf9bda025d069022162ca347667562664aa0b95Jordan Liu ContentValues contentValues2 = new ContentValues(); 1756cf9bda025d069022162ca347667562664aa0b95Jordan Liu final String insertApn2 = "exampleApnName2"; 1766cf9bda025d069022162ca347667562664aa0b95Jordan Liu final String insertName2 = "exampleName2"; 1776cf9bda025d069022162ca347667562664aa0b95Jordan Liu final Integer insertCurrent2 = 1; 1786cf9bda025d069022162ca347667562664aa0b95Jordan Liu final String insertNumeric2 = "789123"; 1796cf9bda025d069022162ca347667562664aa0b95Jordan Liu contentValues2.put(Carriers.APN, insertApn2); 1806cf9bda025d069022162ca347667562664aa0b95Jordan Liu contentValues2.put(Carriers.NAME, insertName2); 1816cf9bda025d069022162ca347667562664aa0b95Jordan Liu contentValues2.put(Carriers.CURRENT, insertCurrent2); 1826cf9bda025d069022162ca347667562664aa0b95Jordan Liu contentValues2.put(Carriers.NUMERIC, insertNumeric2); 1836cf9bda025d069022162ca347667562664aa0b95Jordan Liu 1846cf9bda025d069022162ca347667562664aa0b95Jordan Liu Log.d(TAG, "testInsertCarriers: Bulk inserting contentValues=" + contentValues 1856cf9bda025d069022162ca347667562664aa0b95Jordan Liu + ", " + contentValues2); 1866cf9bda025d069022162ca347667562664aa0b95Jordan Liu ContentValues[] values = new ContentValues[]{ contentValues, contentValues2 }; 1876cf9bda025d069022162ca347667562664aa0b95Jordan Liu int rows = mContentResolver.bulkInsert(Carriers.CONTENT_URI, values); 1886cf9bda025d069022162ca347667562664aa0b95Jordan Liu assertEquals(2, rows); 1896cf9bda025d069022162ca347667562664aa0b95Jordan Liu assertEquals(1, notifyChangeCount); 1906cf9bda025d069022162ca347667562664aa0b95Jordan Liu 1916cf9bda025d069022162ca347667562664aa0b95Jordan Liu // get values in table 1926cf9bda025d069022162ca347667562664aa0b95Jordan Liu final String[] testProjection = 1936cf9bda025d069022162ca347667562664aa0b95Jordan Liu { 1946cf9bda025d069022162ca347667562664aa0b95Jordan Liu Carriers.APN, 1956cf9bda025d069022162ca347667562664aa0b95Jordan Liu Carriers.NAME, 1966cf9bda025d069022162ca347667562664aa0b95Jordan Liu Carriers.CURRENT, 1976cf9bda025d069022162ca347667562664aa0b95Jordan Liu }; 1986cf9bda025d069022162ca347667562664aa0b95Jordan Liu final String selection = Carriers.NUMERIC + "=?"; 1996cf9bda025d069022162ca347667562664aa0b95Jordan Liu String[] selectionArgs = { insertNumeric }; 2006cf9bda025d069022162ca347667562664aa0b95Jordan Liu Log.d(TAG, "testInsertCarriers query projection: " + testProjection 2016cf9bda025d069022162ca347667562664aa0b95Jordan Liu + "\ntestInsertCarriers selection: " + selection 2026cf9bda025d069022162ca347667562664aa0b95Jordan Liu + "\ntestInsertCarriers selectionArgs: " + selectionArgs); 2036cf9bda025d069022162ca347667562664aa0b95Jordan Liu Cursor cursor = mContentResolver.query(Carriers.CONTENT_URI, 2046cf9bda025d069022162ca347667562664aa0b95Jordan Liu testProjection, selection, selectionArgs, null); 2056cf9bda025d069022162ca347667562664aa0b95Jordan Liu 2066cf9bda025d069022162ca347667562664aa0b95Jordan Liu // verify that inserted values match results of query 2076cf9bda025d069022162ca347667562664aa0b95Jordan Liu assertNotNull(cursor); 2086cf9bda025d069022162ca347667562664aa0b95Jordan Liu assertEquals(1, cursor.getCount()); 2096cf9bda025d069022162ca347667562664aa0b95Jordan Liu cursor.moveToFirst(); 2106cf9bda025d069022162ca347667562664aa0b95Jordan Liu final String resultApn = cursor.getString(0); 2116cf9bda025d069022162ca347667562664aa0b95Jordan Liu final String resultName = cursor.getString(1); 2126cf9bda025d069022162ca347667562664aa0b95Jordan Liu final Integer resultCurrent = cursor.getInt(2); 2136cf9bda025d069022162ca347667562664aa0b95Jordan Liu assertEquals(insertApn, resultApn); 2146cf9bda025d069022162ca347667562664aa0b95Jordan Liu assertEquals(insertName, resultName); 2156cf9bda025d069022162ca347667562664aa0b95Jordan Liu assertEquals(insertCurrent, resultCurrent); 2166cf9bda025d069022162ca347667562664aa0b95Jordan Liu } 2176cf9bda025d069022162ca347667562664aa0b95Jordan Liu 2186cf9bda025d069022162ca347667562664aa0b95Jordan Liu /** 2196be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu * Test inserting, querying, and deleting values in carriers table. 2206be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu * Verify that the inserted values match the result of the query and are deleted. 2216be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu */ 2226be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu @Test 223c7c60081080acf8053ca4c8125b986ba3df786c0Jordan Liu @SmallTest 2246be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu public void testInsertCarriers() { 2256be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu // insert test contentValues 2266be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu ContentValues contentValues = new ContentValues(); 2276be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu final String insertApn = "exampleApnName"; 2286be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu final String insertName = "exampleName"; 2296be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu final Integer insertCurrent = 1; 2306be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu final String insertNumeric = "123456"; 2316be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu contentValues.put(Carriers.APN, insertApn); 2326be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu contentValues.put(Carriers.NAME, insertName); 2336be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu contentValues.put(Carriers.CURRENT, insertCurrent); 2346be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu contentValues.put(Carriers.NUMERIC, insertNumeric); 2356be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu 2366be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu Log.d(TAG, "testInsertCarriers Inserting contentValues: " + contentValues); 2376be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu mContentResolver.insert(Carriers.CONTENT_URI, contentValues); 2386be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu 2396be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu // get values in table 2406be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu final String[] testProjection = 2416be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu { 2426be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu Carriers.APN, 2436be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu Carriers.NAME, 2446be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu Carriers.CURRENT, 2456be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu }; 2466be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu final String selection = Carriers.NUMERIC + "=?"; 2476be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu String[] selectionArgs = { insertNumeric }; 2486be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu Log.d(TAG, "testInsertCarriers query projection: " + testProjection 2496be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu + "\ntestInsertCarriers selection: " + selection 2506be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu + "\ntestInsertCarriers selectionArgs: " + selectionArgs); 2516be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu Cursor cursor = mContentResolver.query(Carriers.CONTENT_URI, 2526be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu testProjection, selection, selectionArgs, null); 2536be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu 2546be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu // verify that inserted values match results of query 2556be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu assertNotNull(cursor); 2566be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu assertEquals(1, cursor.getCount()); 2576be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu cursor.moveToFirst(); 2586be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu final String resultApn = cursor.getString(0); 2596be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu final String resultName = cursor.getString(1); 2606be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu final Integer resultCurrent = cursor.getInt(2); 2616be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu assertEquals(insertApn, resultApn); 2626be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu assertEquals(insertName, resultName); 2636be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu assertEquals(insertCurrent, resultCurrent); 2646be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu 2656be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu // delete test content 2666be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu final String selectionToDelete = Carriers.NUMERIC + "=?"; 2676be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu String[] selectionArgsToDelete = { insertNumeric }; 2686be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu Log.d(TAG, "testInsertCarriers deleting selection: " + selectionToDelete 2696be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu + "testInsertCarriers selectionArgs: " + selectionArgs); 2706be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu int numRowsDeleted = mContentResolver.delete(Carriers.CONTENT_URI, 2716be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu selectionToDelete, selectionArgsToDelete); 2726be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu assertEquals(1, numRowsDeleted); 2736be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu 2746be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu // verify that deleted values are gone 2756be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu cursor = mContentResolver.query(Carriers.CONTENT_URI, 2766be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu testProjection, selection, selectionArgs, null); 2776be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu assertEquals(0, cursor.getCount()); 2786be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu } 2796be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu 2806be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu /** 2816be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu * Test inserting, querying, and deleting values in carriers table. 2826be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu * Verify that the inserted values match the result of the query and are deleted. 2836be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu */ 2846be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu @Test 285c7c60081080acf8053ca4c8125b986ba3df786c0Jordan Liu @SmallTest 2866be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu public void testSimTable() { 2876be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu // insert test contentValues 2886be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu ContentValues contentValues = new ContentValues(); 2896be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu final int insertSubId = 11; 2906be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu final String insertDisplayName = "exampleDisplayName"; 2916be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu final String insertCarrierName = "exampleCarrierName"; 2926be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu final String insertIccId = "exampleIccId"; 2936be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu contentValues.put(SubscriptionManager.UNIQUE_KEY_SUBSCRIPTION_ID, insertSubId); 2946be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu contentValues.put(SubscriptionManager.DISPLAY_NAME, insertDisplayName); 2956be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu contentValues.put(SubscriptionManager.CARRIER_NAME, insertCarrierName); 2966be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu contentValues.put(SubscriptionManager.ICC_ID, insertIccId); 2976be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu 2986be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu Log.d(TAG, "testSimTable Inserting contentValues: " + contentValues); 2996be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu mContentResolver.insert(SubscriptionManager.CONTENT_URI, contentValues); 3006be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu 3016be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu // get values in table 3026be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu final String[] testProjection = 3036be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu { 3046be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu SubscriptionManager.UNIQUE_KEY_SUBSCRIPTION_ID, 3056be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu SubscriptionManager.CARRIER_NAME, 3066be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu }; 3076be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu final String selection = SubscriptionManager.DISPLAY_NAME + "=?"; 3086be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu String[] selectionArgs = { insertDisplayName }; 3096be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu Log.d(TAG,"\ntestSimTable selection: " + selection 3106be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu + "\ntestSimTable selectionArgs: " + selectionArgs.toString()); 3116be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu Cursor cursor = mContentResolver.query(SubscriptionManager.CONTENT_URI, 3126be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu testProjection, selection, selectionArgs, null); 3136be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu 3146be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu // verify that inserted values match results of query 3156be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu assertNotNull(cursor); 3166be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu assertEquals(1, cursor.getCount()); 3176be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu cursor.moveToFirst(); 3186be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu final int resultSubId = cursor.getInt(0); 3196be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu final String resultCarrierName = cursor.getString(1); 3206be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu assertEquals(insertSubId, resultSubId); 3216be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu assertEquals(insertCarrierName, resultCarrierName); 3226be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu 3236be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu // delete test content 3246be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu final String selectionToDelete = SubscriptionManager.DISPLAY_NAME + "=?"; 3256be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu String[] selectionArgsToDelete = { insertDisplayName }; 3266be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu Log.d(TAG, "testSimTable deleting selection: " + selectionToDelete 3276be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu + "testSimTable selectionArgs: " + selectionArgs); 3286be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu int numRowsDeleted = mContentResolver.delete(SubscriptionManager.CONTENT_URI, 3296be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu selectionToDelete, selectionArgsToDelete); 3306be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu assertEquals(1, numRowsDeleted); 3316be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu 3326be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu // verify that deleted values are gone 3336be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu cursor = mContentResolver.query(SubscriptionManager.CONTENT_URI, 3346be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu testProjection, selection, selectionArgs, null); 3356be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu assertEquals(0, cursor.getCount()); 3366be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu } 3376be205a1b573f0bd1a0678729ff1ad6e4a6e4e72Jordan Liu} 338