Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1369a3b5 authored by Dmitry Dementyev's avatar Dmitry Dementyev Committed by Android (Google) Code Review
Browse files

Merge "Use SQLite update instead of replace in UserMetadata table." into qt-dev

parents 1f8b77d2 1b9c0342
Loading
Loading
Loading
Loading
+1 −4
Original line number Diff line number Diff line
@@ -400,10 +400,7 @@ public class PlatformKeyManager {
     * @throws IOException if there was an issue with local database update.
     */
    private void setGenerationId(int userId, int generationId) throws IOException {
        long updatedRows = mDatabase.setPlatformKeyGenerationId(userId, generationId);
        if (updatedRows < 0) {
            throw new IOException("Failed to set the platform key in the local DB.");
        }
        mDatabase.setPlatformKeyGenerationId(userId, generationId);
    }

    /**
+25 −11
Original line number Diff line number Diff line
@@ -322,19 +322,18 @@ public class RecoverableKeyStoreDb {
    /**
     * Sets the {@code generationId} of the platform key for user {@code userId}.
     *
     * @return The primary key ID of the relation.
     * @return The number of updated rows.
     */
    public long setPlatformKeyGenerationId(int userId, int generationId) {
        SQLiteDatabase db = mKeyStoreDbHelper.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put(UserMetadataEntry.COLUMN_NAME_USER_ID, userId);
        values.put(UserMetadataEntry.COLUMN_NAME_PLATFORM_KEY_GENERATION_ID, generationId);
        long result = db.replace(
                UserMetadataEntry.TABLE_NAME, /*nullColumnHack=*/ null, values);
        if (result != -1) {
            invalidateKeysWithOldGenerationId(userId, generationId);
        }
        return result;
        String selection = UserMetadataEntry.COLUMN_NAME_USER_ID + " = ?";
        String[] selectionArguments = new String[] {String.valueOf(userId)};

        ensureUserMetadataEntryExists(userId);
        return db.update(UserMetadataEntry.TABLE_NAME, values, selection, selectionArguments);
    }

    /**
@@ -377,16 +376,19 @@ public class RecoverableKeyStoreDb {
    /**
     * Sets the {@code serialNumber} for the user {@code userId}.
     *
     * @return The primary key of the inserted row, or -1 if failed.
     * @return The number of updated rows.
     */
    public long setUserSerialNumber(int userId, long serialNumber) {
        SQLiteDatabase db = mKeyStoreDbHelper.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put(UserMetadataEntry.COLUMN_NAME_USER_ID, userId);
        values.put(UserMetadataEntry.COLUMN_NAME_USER_SERIAL_NUMBER, serialNumber);
        long result = db.replace(
                UserMetadataEntry.TABLE_NAME, /*nullColumnHack=*/ null, values);
        return result;
        String selection = UserMetadataEntry.COLUMN_NAME_USER_ID + " = ?";
        String[] selectionArguments = new String[] {String.valueOf(userId)};

        ensureUserMetadataEntryExists(userId);
        return db.update(UserMetadataEntry.TABLE_NAME, values, selection, selectionArguments);

    }

    /**
@@ -1325,6 +1327,18 @@ public class RecoverableKeyStoreDb {
                values, SQLiteDatabase.CONFLICT_IGNORE);
    }

    /**
     * Creates an empty row in the user metadata table if such a row doesn't exist for
     * the given userId, so db.update will succeed.
     */
    private void ensureUserMetadataEntryExists(int userId) {
        SQLiteDatabase db = mKeyStoreDbHelper.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put(UserMetadataEntry.COLUMN_NAME_USER_ID, userId);
        db.insertWithOnConflict(UserMetadataEntry.TABLE_NAME, /*nullColumnHack=*/ null,
                values, SQLiteDatabase.CONFLICT_IGNORE);
    }

    /**
     * Closes all open connections to the database.
     */
+26 −0
Original line number Diff line number Diff line
@@ -304,6 +304,32 @@ public class RecoverableKeyStoreDbTest {
        assertEquals(serialNumber, mRecoverableKeyStoreDb.getUserSerialNumbers().get(userId));
    }

    @Test
    public void setUserSerialNumbers_keepsPlatformKeyGenerationId() {
        int userId = 42;
        int generationId = 110;
        Long serialNumber = 10L;

        mRecoverableKeyStoreDb.setPlatformKeyGenerationId(userId, generationId);
        mRecoverableKeyStoreDb.setUserSerialNumber(userId, serialNumber);

        assertEquals(generationId, mRecoverableKeyStoreDb.getPlatformKeyGenerationId(userId));
    }

    @Test
    public void setPlatformKeyGenerationId_keepsUserSerialNumber() {
        int userId = 42;
        int generationId = 110;
        Long serialNumber = 10L;

        mRecoverableKeyStoreDb.setPlatformKeyGenerationId(userId, generationId);
        mRecoverableKeyStoreDb.setUserSerialNumber(userId, serialNumber);
        mRecoverableKeyStoreDb.setPlatformKeyGenerationId(userId, generationId + 1);

        assertEquals(serialNumber, mRecoverableKeyStoreDb.getUserSerialNumbers().get(userId));
    }


    @Test
    public void removeUserFromAllTables_removesData() throws Exception {
        int userId = 12;