1 /* 2 * Copyright (C) 2023 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 17 package com.android.providers.telephony; 18 19 import android.content.ContentValues; 20 import android.content.pm.PackageManager; 21 import android.content.pm.ProviderInfo; 22 import android.content.res.Resources; 23 import android.database.Cursor; 24 import android.provider.Telephony; 25 import android.test.mock.MockContentResolver; 26 import android.test.mock.MockContext; 27 import android.text.TextUtils; 28 import android.util.Log; 29 30 import junit.framework.TestCase; 31 32 import org.junit.Test; 33 34 public class SatelliteProviderTest extends TestCase { 35 private static final String TAG = "SatelliteProviderTest"; 36 37 private MockContextWithProvider mContext; 38 private MockContentResolver mContentResolver; 39 private SatelliteProviderTestable mSatelliteProviderTestable; 40 41 /** 42 * This is used to give the SatelliteProviderTest a mocked context which takes a 43 * SatelliteProvider and attaches it to the ContentResolver. 44 */ 45 private class MockContextWithProvider extends MockContext { 46 private final MockContentResolver mResolver; 47 MockContextWithProvider(SatelliteProvider satelliteProvider)48 public MockContextWithProvider(SatelliteProvider satelliteProvider) { 49 mResolver = new MockContentResolver(); 50 51 ProviderInfo providerInfo = new ProviderInfo(); 52 providerInfo.authority = Telephony.SatelliteDatagrams.PROVIDER_NAME; 53 54 // Add context to given satelliteProvider 55 satelliteProvider.attachInfoForTesting(this, providerInfo); 56 Log.d(TAG, "MockContextWithProvider: satelliteProvider.getContext(): " 57 + satelliteProvider.getContext()); 58 59 // Add given satelliteProvider to mResolver, so that mResolver can send queries 60 // to the provider. 61 mResolver.addProvider(Telephony.SatelliteDatagrams.PROVIDER_NAME, satelliteProvider); 62 Log.d(TAG, "MockContextWithProvider: Add satelliteProvider to mResolver"); 63 } 64 65 @Override getSystemService(String name)66 public Object getSystemService(String name) { 67 Log.d(TAG, "getSystemService: returning null"); 68 return null; 69 } 70 71 @Override getResources()72 public Resources getResources() { 73 Log.d(TAG, "getResources: returning null"); 74 return null; 75 } 76 77 @Override getContentResolver()78 public MockContentResolver getContentResolver() { 79 return mResolver; 80 } 81 82 // Gives permission to write to the apn table within the MockContext 83 @Override checkCallingOrSelfPermission(String permission)84 public int checkCallingOrSelfPermission(String permission) { 85 if (TextUtils.equals(permission, "android.permission.WRITE_APN_SETTINGS")) { 86 Log.d(TAG, "checkCallingOrSelfPermission: permission=" + permission 87 + ", returning PackageManager.PERMISSION_GRANTED"); 88 return PackageManager.PERMISSION_GRANTED; 89 } else { 90 Log.d(TAG, "checkCallingOrSelfPermission: permission=" + permission 91 + ", returning PackageManager.PERMISSION_DENIED"); 92 return PackageManager.PERMISSION_DENIED; 93 } 94 } 95 } 96 97 @Override setUp()98 protected void setUp() throws Exception { 99 super.setUp(); 100 mSatelliteProviderTestable = new SatelliteProviderTestable(); 101 mContext = new MockContextWithProvider(mSatelliteProviderTestable); 102 mContentResolver = (MockContentResolver) mContext.getContentResolver(); 103 } 104 105 @Override tearDown()106 protected void tearDown() throws Exception { 107 super.tearDown(); 108 mSatelliteProviderTestable.closeDatabase(); 109 } 110 111 @Test testInsertDatagram()112 public void testInsertDatagram() { 113 long testDatagramId = 1; 114 String testDatagram = "testInsertDatagram"; 115 ContentValues contentValues = new ContentValues(); 116 contentValues.put(Telephony.SatelliteDatagrams.COLUMN_UNIQUE_KEY_DATAGRAM_ID, 117 testDatagramId); 118 contentValues.put(Telephony.SatelliteDatagrams.COLUMN_DATAGRAM, testDatagram.getBytes()); 119 120 try { 121 mContentResolver.insert(Telephony.SatelliteDatagrams.CONTENT_URI, contentValues); 122 } catch (Exception e){ 123 Log.d(TAG, "Error inserting satellite datagram:" + e); 124 } 125 126 String whereClause = (Telephony.SatelliteDatagrams.COLUMN_UNIQUE_KEY_DATAGRAM_ID 127 + "=" +testDatagramId); 128 try (Cursor cursor = mContentResolver.query(Telephony.SatelliteDatagrams.CONTENT_URI, 129 null, whereClause, null, null)) { 130 cursor.moveToFirst(); 131 byte[] datagram = cursor.getBlob(0); 132 assertEquals(testDatagram, new String(datagram)); 133 } catch (Exception e) { 134 Log.d(TAG, "Exception in getting count:" + e); 135 } 136 } 137 138 @Test testDeleteDatagram()139 public void testDeleteDatagram() { 140 long testDatagramId = 10; 141 String testDatagram = "testDeleteDatagram"; 142 ContentValues contentValues = new ContentValues(); 143 contentValues.put(Telephony.SatelliteDatagrams.COLUMN_UNIQUE_KEY_DATAGRAM_ID, 144 testDatagramId); 145 contentValues.put(Telephony.SatelliteDatagrams.COLUMN_DATAGRAM, testDatagram.getBytes()); 146 147 try { 148 mContentResolver.insert(Telephony.SatelliteDatagrams.CONTENT_URI, contentValues); 149 } catch (Exception e){ 150 Log.d(TAG, "Error inserting satellite datagram:" + e); 151 } 152 153 int numRowsDeleted = -1; 154 String whereClause = (Telephony.SatelliteDatagrams.COLUMN_UNIQUE_KEY_DATAGRAM_ID 155 + "=" +testDatagramId); 156 try { 157 numRowsDeleted = mContentResolver.delete(Telephony.SatelliteDatagrams.CONTENT_URI, 158 whereClause, null); 159 } catch (Exception e) { 160 Log.d(TAG, "Error deleting values:" + e); 161 } 162 assertEquals(1, numRowsDeleted); 163 164 try (Cursor cursor = mContentResolver.query(Telephony.SatelliteDatagrams.CONTENT_URI, 165 null, whereClause, null, null)) { 166 assertNotNull(cursor); 167 assertEquals(0, cursor.getCount()); 168 } catch (Exception e) { 169 Log.d(TAG, "Exception in getting count:" + e); 170 } 171 } 172 } 173