Added carrier_id support to the carrier_key table in CarrierInformation DB
Also Updated the related test cases
Bug: 191919168
Test: aTest verification passed
Change-Id: I8ad388bbb120c32ba874312bcc5c63cc1371348a
diff --git a/src/com/android/providers/telephony/CarrierDatabaseHelper.java b/src/com/android/providers/telephony/CarrierDatabaseHelper.java
index 0b97da1..3d2de29 100644
--- a/src/com/android/providers/telephony/CarrierDatabaseHelper.java
+++ b/src/com/android/providers/telephony/CarrierDatabaseHelper.java
@@ -28,14 +28,13 @@
public class CarrierDatabaseHelper extends SQLiteOpenHelper {
private static final String TAG = "CarrierDatabaseHelper";
- private static final boolean DBG = true;
-
private static final String DATABASE_NAME = "CarrierInformation.db";
public static final String CARRIER_KEY_TABLE = "carrier_key";
- private static final int DATABASE_VERSION = 2;
+ private static final int DATABASE_VERSION = 3;
/**
* CarrierDatabaseHelper carrier database helper class.
+ *
* @param context of the user.
*/
public CarrierDatabaseHelper(Context context) {
@@ -46,21 +45,20 @@
public static final String KEY_TYPE = "key_type";
public static final String MCC = "mcc";
public static final String MNC = "mnc";
- public static final String MVNO_TYPE = "mvno_type";
- public static final String MVNO_MATCH_DATA = "mvno_match_data";
+ public static final String CARRIER_ID = "carrier_id";
public static final String PUBLIC_KEY = "public_key";
public static final String KEY_IDENTIFIER = "key_identifier";
public static final String EXPIRATION_TIME = "expiration_time";
public static final String LAST_MODIFIED = "last_modified";
private static final List<String> CARRIERS_UNIQUE_FIELDS = new ArrayList<String>();
+ private static final String TEMPORARY_CARRIER_KEY_TABLE = CARRIER_KEY_TABLE + "_temp";
static {
CARRIERS_UNIQUE_FIELDS.add(MCC);
CARRIERS_UNIQUE_FIELDS.add(MNC);
+ CARRIERS_UNIQUE_FIELDS.add(CARRIER_ID);
CARRIERS_UNIQUE_FIELDS.add(KEY_TYPE);
- CARRIERS_UNIQUE_FIELDS.add(MVNO_TYPE);
- CARRIERS_UNIQUE_FIELDS.add(MVNO_MATCH_DATA);
}
public static String getStringForCarrierKeyTableCreation(String tableName) {
@@ -68,8 +66,7 @@
"(_id INTEGER PRIMARY KEY," +
MCC + " TEXT DEFAULT ''," +
MNC + " TEXT DEFAULT ''," +
- MVNO_TYPE + " TEXT DEFAULT ''," +
- MVNO_MATCH_DATA + " TEXT DEFAULT ''," +
+ CARRIER_ID + " INTEGER DEFAULT -1," +
KEY_TYPE + " TEXT DEFAULT ''," +
KEY_IDENTIFIER + " TEXT DEFAULT ''," +
PUBLIC_KEY + " BLOB DEFAULT ''," +
@@ -93,10 +90,43 @@
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
- Log.d(TAG, "dbh.onUpgrade:+ db=" + db + " oldV=" + oldVersion + " newV=" + newVersion);
+ Log.d(TAG, "dbh.onUpgrade:db=" + db + " oldV=" + oldVersion + " newV=" + newVersion);
if (oldVersion < 2) {
dropCarrierTable(db);
createCarrierTable(db);
+ return;
+ }
+ if (oldVersion < 3) {
+ // Create new table and copy the contents from the existing table
+ renameCarrierTable(db);
+ createCarrierTable(db);
+ copyContents(db);
+ dropTemporaryTable(db);
+ db.execSQL("COMMIT");
+ return;
}
}
-}
+
+ // Renames the existing table as temporary table
+ private void renameCarrierTable(SQLiteDatabase db) {
+ db.execSQL(
+ "ALTER TABLE " + CARRIER_KEY_TABLE + " RENAME TO " + TEMPORARY_CARRIER_KEY_TABLE);
+ }
+
+ // Copies the content from temporary table to new table
+ private void copyContents(SQLiteDatabase db) {
+ String copyStr = new StringBuilder().append("INSERT INTO ").append(
+ CARRIER_KEY_TABLE).append(
+ " (MCC, MNC, KEY_TYPE, KEY_IDENTIFIER, PUBLIC_KEY, "
+ + "EXPIRATION_TIME, LAST_MODIFIED)").append(" SELECT ").append(
+ "MCC, MNC, KEY_TYPE, KEY_IDENTIFIER, PUBLIC_KEY, "
+ + "EXPIRATION_TIME, LAST_MODIFIED").append(" FROM ").append(
+ TEMPORARY_CARRIER_KEY_TABLE).toString();
+ db.execSQL(copyStr);
+ }
+
+ // Drops the temporary table
+ private void dropTemporaryTable(SQLiteDatabase db) {
+ db.execSQL("DROP TABLE IF EXISTS " + TEMPORARY_CARRIER_KEY_TABLE + ";");
+ }
+}
\ No newline at end of file
diff --git a/tests/src/com/android/providers/telephony/CarrierProviderTest.java b/tests/src/com/android/providers/telephony/CarrierProviderTest.java
index eb95fb6..d329002 100644
--- a/tests/src/com/android/providers/telephony/CarrierProviderTest.java
+++ b/tests/src/com/android/providers/telephony/CarrierProviderTest.java
@@ -22,14 +22,13 @@
import android.content.res.Resources;
import android.database.Cursor;
import android.database.SQLException;
+import android.telephony.TelephonyManager;
import android.test.mock.MockContentResolver;
import android.test.mock.MockContext;
import android.test.suitebuilder.annotation.SmallTest;
import android.text.TextUtils;
import android.util.Log;
-import com.android.providers.telephony.CarrierProvider;
-
import junit.framework.TestCase;
import org.junit.Test;
@@ -60,11 +59,10 @@
public static final String test_mcc = "MCC005";
public static final String test_key1 = "PUBKEY1";
public static final String test_key2 = "PUBKEY2";
- public static final String test_mvno_type = "100";
- public static final String test_mvno_match_data = "101";
public static final String test_key_identifier_data = "key_identifier1";
public static final long test_key_expiration = 1496795015L;
-
+ public static final int TEST_CARRIER_ID_1 = 1;
+ public static final int TEST_CARRIER_ID_2 = 2;
/**
* This is used to give the CarrierProviderTest a mocked context which takes a
@@ -147,8 +145,7 @@
contentValues.put(CarrierDatabaseHelper.KEY_TYPE, test_type);
contentValues.put(CarrierDatabaseHelper.MCC, test_mcc);
contentValues.put(CarrierDatabaseHelper.MNC, test_mnc);
- contentValues.put(CarrierDatabaseHelper.MVNO_TYPE, test_mvno_type);
- contentValues.put(CarrierDatabaseHelper.MVNO_MATCH_DATA, test_mvno_match_data);
+ contentValues.put(CarrierDatabaseHelper.CARRIER_ID, TEST_CARRIER_ID_1);
contentValues.put(CarrierDatabaseHelper.KEY_IDENTIFIER, test_key_identifier_data);
contentValues.put(CarrierDatabaseHelper.PUBLIC_KEY, test_key1.getBytes());
contentValues.put(CarrierDatabaseHelper.EXPIRATION_TIME, test_key_expiration);
@@ -183,8 +180,7 @@
contentValues.put(CarrierDatabaseHelper.KEY_TYPE, test_type);
contentValues.put(CarrierDatabaseHelper.MCC, test_mcc);
contentValues.put(CarrierDatabaseHelper.MNC, test_mnc);
- contentValues.put(CarrierDatabaseHelper.MVNO_TYPE, test_mvno_type);
- contentValues.put(CarrierDatabaseHelper.MVNO_MATCH_DATA, test_mvno_match_data);
+ contentValues.put(CarrierDatabaseHelper.CARRIER_ID, TEST_CARRIER_ID_1);
contentValues.put(CarrierDatabaseHelper.KEY_IDENTIFIER, test_key_identifier_data);
contentValues.put(CarrierDatabaseHelper.PUBLIC_KEY, test_key1.getBytes());
contentValues.put(CarrierDatabaseHelper.EXPIRATION_TIME, test_key_expiration);
@@ -199,8 +195,9 @@
ContentValues updatedValues = new ContentValues();
updatedValues.put(CarrierDatabaseHelper.PUBLIC_KEY, test_key2);
mContentResolver.update(CarrierProvider.CONTENT_URI, updatedValues,
- "mcc=? and mnc=? and key_type=?", new String[] { test_mcc, test_mnc,
- String.valueOf(test_type) });
+ "mcc=? and mnc=? and carrier_id=? and key_type=?",
+ new String[]{test_mcc, test_mnc, Integer.toString(TEST_CARRIER_ID_1),
+ String.valueOf(test_type)});
} catch (Exception e) {
Log.d(TAG, "Error updating values:" + e);
}
@@ -208,8 +205,9 @@
try {
String[] columns ={CarrierDatabaseHelper.PUBLIC_KEY};
Cursor findEntry = mContentResolver.query(CarrierProvider.CONTENT_URI, columns,
- "mcc=? and mnc=? and key_type=?",
- new String[] { test_mcc, test_mnc, String.valueOf(test_type) }, null);
+ "mcc=? and mnc=? and carrier_id=? and key_type=?",
+ new String[]{test_mcc, test_mnc, Integer.toString(TEST_CARRIER_ID_1),
+ String.valueOf(test_type)}, null);
findEntry.moveToFirst();
key = findEntry.getString(0);
} catch (Exception e) {
@@ -229,8 +227,7 @@
contentValues.put(CarrierDatabaseHelper.KEY_TYPE, test_type);
contentValues.put(CarrierDatabaseHelper.MCC, test_mcc);
contentValues.put(CarrierDatabaseHelper.MNC, test_mnc);
- contentValues.put(CarrierDatabaseHelper.MVNO_TYPE, test_mvno_type);
- contentValues.put(CarrierDatabaseHelper.MVNO_MATCH_DATA, test_mvno_match_data);
+ contentValues.put(CarrierDatabaseHelper.CARRIER_ID, TEST_CARRIER_ID_1);
contentValues.put(CarrierDatabaseHelper.KEY_IDENTIFIER, test_key_identifier_data);
contentValues.put(CarrierDatabaseHelper.PUBLIC_KEY, test_key1.getBytes());
@@ -238,8 +235,7 @@
contentValuesNew.put(CarrierDatabaseHelper.KEY_TYPE, test_type);
contentValuesNew.put(CarrierDatabaseHelper.MCC, test_mcc);
contentValuesNew.put(CarrierDatabaseHelper.MNC, test_mnc2);
- contentValuesNew.put(CarrierDatabaseHelper.MVNO_TYPE, test_mvno_type);
- contentValuesNew.put(CarrierDatabaseHelper.MVNO_MATCH_DATA, test_mvno_match_data);
+ contentValues.put(CarrierDatabaseHelper.CARRIER_ID, TEST_CARRIER_ID_1);
contentValues.put(CarrierDatabaseHelper.KEY_IDENTIFIER, test_key_identifier_data);
contentValuesNew.put(CarrierDatabaseHelper.PUBLIC_KEY, test_key2.getBytes());
@@ -265,6 +261,97 @@
}
/**
+ * Test inserting cert with same MCC and MNC but with diff carrier ID
+ */
+ @Test
+ @SmallTest
+ public void testMnoandMvnoCertificates() {
+ int count = -1;
+ ContentValues contentValues = new ContentValues();
+ contentValues.put(CarrierDatabaseHelper.KEY_TYPE, test_type);
+ contentValues.put(CarrierDatabaseHelper.MCC, test_mcc);
+ contentValues.put(CarrierDatabaseHelper.MNC, test_mnc);
+ contentValues.put(CarrierDatabaseHelper.CARRIER_ID, TEST_CARRIER_ID_1);
+ contentValues.put(CarrierDatabaseHelper.KEY_IDENTIFIER, test_key_identifier_data);
+ contentValues.put(CarrierDatabaseHelper.PUBLIC_KEY, test_key1.getBytes());
+
+ ContentValues contentValuesNew = new ContentValues();
+ contentValuesNew.put(CarrierDatabaseHelper.KEY_TYPE, test_type);
+ contentValuesNew.put(CarrierDatabaseHelper.MCC, test_mcc);
+ contentValuesNew.put(CarrierDatabaseHelper.MNC, test_mnc);
+ contentValuesNew.put(CarrierDatabaseHelper.CARRIER_ID, TEST_CARRIER_ID_2);
+ contentValuesNew.put(CarrierDatabaseHelper.KEY_IDENTIFIER, test_key_identifier_data);
+ contentValuesNew.put(CarrierDatabaseHelper.PUBLIC_KEY, test_key1.getBytes());
+
+ try {
+ mContentResolver.insert(CarrierProvider.CONTENT_URI, contentValues);
+ mContentResolver.insert(CarrierProvider.CONTENT_URI, contentValuesNew);
+ } catch (Exception e) {
+ System.out.println("Error inserting certificates:: " + e);
+ }
+
+ try {
+ Cursor countCursor = mContentResolver.query(CarrierProvider.CONTENT_URI,
+ new String[]{"count(*) AS count"},
+ null,
+ null,
+ null);
+ countCursor.moveToFirst();
+ count = countCursor.getInt(0);
+ } catch (Exception e) {
+ Log.d(TAG, "Exception in getting count:" + e);
+ }
+ assertEquals(2, count);
+ }
+
+ /**
+ * once upgrade to version 3, carrierId = -1
+ * After upgrade, it triggers for new download with correct carrierId
+ * This test case will test writing the new entry, even old entry for same
+ * operator is already existed
+ */
+ @Test
+ @SmallTest
+ public void testOldAndNewDBEntries() {
+ int count = -1;
+ ContentValues contentValues = new ContentValues();
+ contentValues.put(CarrierDatabaseHelper.KEY_TYPE, test_type);
+ contentValues.put(CarrierDatabaseHelper.MCC, test_mcc);
+ contentValues.put(CarrierDatabaseHelper.MNC, test_mnc);
+ contentValues.put(CarrierDatabaseHelper.CARRIER_ID, TelephonyManager.UNKNOWN_CARRIER_ID);
+ contentValues.put(CarrierDatabaseHelper.KEY_IDENTIFIER, test_key_identifier_data);
+ contentValues.put(CarrierDatabaseHelper.PUBLIC_KEY, test_key1.getBytes());
+
+ ContentValues contentValuesNew = new ContentValues();
+ contentValuesNew.put(CarrierDatabaseHelper.KEY_TYPE, test_type);
+ contentValuesNew.put(CarrierDatabaseHelper.MCC, test_mcc);
+ contentValuesNew.put(CarrierDatabaseHelper.MNC, test_mnc);
+ contentValuesNew.put(CarrierDatabaseHelper.CARRIER_ID, TEST_CARRIER_ID_2);
+ contentValuesNew.put(CarrierDatabaseHelper.KEY_IDENTIFIER, test_key_identifier_data);
+ contentValuesNew.put(CarrierDatabaseHelper.PUBLIC_KEY, test_key1.getBytes());
+
+ try {
+ mContentResolver.insert(CarrierProvider.CONTENT_URI, contentValues);
+ mContentResolver.insert(CarrierProvider.CONTENT_URI, contentValuesNew);
+ } catch (Exception e) {
+ System.out.println("Error inserting certificates:: " + e);
+ }
+
+ try {
+ Cursor countCursor = mContentResolver.query(CarrierProvider.CONTENT_URI,
+ new String[]{"count(*) AS count"},
+ null,
+ null,
+ null);
+ countCursor.moveToFirst();
+ count = countCursor.getInt(0);
+ } catch (Exception e) {
+ Log.d(TAG, "Exception in getting count:" + e);
+ }
+ assertEquals(2, count);
+ }
+
+ /**
* Test inserting duplicate values in carrier key table. Ensure that a SQLException is thrown.
*/
@Test(expected = SQLException.class)
@@ -273,8 +360,7 @@
contentValues.put(CarrierDatabaseHelper.KEY_TYPE, test_type);
contentValues.put(CarrierDatabaseHelper.MCC, test_mcc);
contentValues.put(CarrierDatabaseHelper.MNC, test_mnc);
- contentValues.put(CarrierDatabaseHelper.MVNO_TYPE, test_mvno_type);
- contentValues.put(CarrierDatabaseHelper.MVNO_MATCH_DATA, test_mvno_match_data);
+ contentValues.put(CarrierDatabaseHelper.CARRIER_ID, TEST_CARRIER_ID_1);
contentValues.put(CarrierDatabaseHelper.PUBLIC_KEY, test_key1.getBytes());
try {
@@ -300,8 +386,7 @@
contentValues.put(CarrierDatabaseHelper.KEY_TYPE, test_type);
contentValues.put(CarrierDatabaseHelper.MCC, test_mcc);
contentValues.put(CarrierDatabaseHelper.MNC, test_mnc);
- contentValues.put(CarrierDatabaseHelper.MVNO_TYPE, test_mvno_type);
- contentValues.put(CarrierDatabaseHelper.MVNO_MATCH_DATA, test_mvno_match_data);
+ contentValues.put(CarrierDatabaseHelper.CARRIER_ID, TEST_CARRIER_ID_1);
contentValues.put(CarrierDatabaseHelper.KEY_IDENTIFIER, test_key_identifier_data);
contentValues.put(CarrierDatabaseHelper.PUBLIC_KEY, test_key1.getBytes());
contentValues.put(CarrierDatabaseHelper.EXPIRATION_TIME, test_key_expiration);
@@ -313,9 +398,11 @@
}
try {
- String whereClause = "mcc=? and mnc=?";
- String[] whereArgs = new String[] { test_mcc, test_mnc };
- numRowsDeleted = mContentResolver.delete(CarrierProvider.CONTENT_URI, whereClause, whereArgs);
+ String whereClause = "mcc=? and mnc=? and carrier_id=?";
+ String[] whereArgs = new String[]{test_mcc, test_mnc, Integer.toString(
+ TEST_CARRIER_ID_1)};
+ numRowsDeleted = mContentResolver.delete(CarrierProvider.CONTENT_URI, whereClause,
+ whereArgs);
} catch (Exception e) {
Log.d(TAG, "Error updating values:" + e);
}