mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-09-13 20:17:56 +01:00
Keep database snapshot tables out of the global table registries.
This commit is contained in:
committed by
Cody Henthorne
parent
265331f3e2
commit
daf89f79bd
@@ -40,12 +40,14 @@ public abstract class DatabaseTable {
|
||||
this.context = context;
|
||||
this.databaseHelper = databaseHelper;
|
||||
|
||||
if (this instanceof RecipientIdDatabaseReference) {
|
||||
recipientIdDatabaseTables.add((RecipientIdDatabaseReference) this);
|
||||
}
|
||||
if (databaseHelper != null && databaseHelper.isPrimaryDatabase()) {
|
||||
if (this instanceof RecipientIdDatabaseReference) {
|
||||
recipientIdDatabaseTables.add((RecipientIdDatabaseReference) this);
|
||||
}
|
||||
|
||||
if (this instanceof ThreadIdDatabaseReference) {
|
||||
threadIdDatabaseTables.add((ThreadIdDatabaseReference) this);
|
||||
if (this instanceof ThreadIdDatabaseReference) {
|
||||
threadIdDatabaseTables.add((ThreadIdDatabaseReference) this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -30,6 +30,8 @@ open class SignalDatabase(private val context: Application, databaseSecret: Data
|
||||
),
|
||||
SignalDatabaseOpenHelper {
|
||||
|
||||
val isPrimaryDatabase: Boolean = name == DATABASE_NAME
|
||||
|
||||
val messageTable: MessageTable = MessageTable(context, this)
|
||||
val attachmentTable: AttachmentTable = AttachmentTable(context, this, attachmentSecret)
|
||||
val mediaTable: MediaTable = MediaTable(context, this)
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
/*
|
||||
* Copyright 2026 Signal Messenger, LLC
|
||||
* SPDX-License-Identifier: AGPL-3.0-only
|
||||
*/
|
||||
|
||||
package org.thoughtcrime.securesms.database
|
||||
|
||||
import android.app.Application
|
||||
import androidx.test.core.app.ApplicationProvider
|
||||
import org.junit.After
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Assert.assertTrue
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
import org.robolectric.RobolectricTestRunner
|
||||
import org.robolectric.annotation.Config
|
||||
import org.thoughtcrime.securesms.testing.JdbcSqliteDatabase
|
||||
import org.thoughtcrime.securesms.testing.TestSignalDatabase
|
||||
|
||||
@RunWith(RobolectricTestRunner::class)
|
||||
@Config(manifest = Config.NONE, application = Application::class)
|
||||
class DatabaseTableTest {
|
||||
|
||||
@Before
|
||||
fun setUp() {
|
||||
DatabaseTable.clearTableReferencesForTests()
|
||||
}
|
||||
|
||||
@After
|
||||
fun tearDown() {
|
||||
DatabaseTable.clearTableReferencesForTests()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun snapshotDatabasesDoNotRegisterTheirTables() {
|
||||
createDatabase(SignalDatabase.DATABASE_NAME)
|
||||
|
||||
val recipientTableCount = DatabaseTable.recipientIdDatabaseTables.size
|
||||
val threadTableCount = DatabaseTable.threadIdDatabaseTables.size
|
||||
assertTrue(recipientTableCount > 0)
|
||||
assertTrue(threadTableCount > 0)
|
||||
|
||||
createDatabase("remote-signal-snapshot.db")
|
||||
|
||||
assertEquals(recipientTableCount, DatabaseTable.recipientIdDatabaseTables.size)
|
||||
assertEquals(threadTableCount, DatabaseTable.threadIdDatabaseTables.size)
|
||||
}
|
||||
|
||||
private fun createDatabase(name: String): TestSignalDatabase {
|
||||
val db = JdbcSqliteDatabase.createInMemory()
|
||||
return TestSignalDatabase(ApplicationProvider.getApplicationContext(), db, db, name)
|
||||
}
|
||||
}
|
||||
@@ -15,8 +15,9 @@ import net.zetetic.database.sqlcipher.SQLiteDatabase as SQLCipherSQLiteDatabase
|
||||
class TestSignalDatabase(
|
||||
context: Application,
|
||||
val supportReadableDatabase: SupportSQLiteDatabase,
|
||||
val supportWritableDatabase: SupportSQLiteDatabase
|
||||
) : SignalDatabase(context, DatabaseSecret(ByteArray(32).apply { SecureRandom().nextBytes(this) }), AttachmentSecret(null, null, ByteArray(32).apply { SecureRandom().nextBytes(this) })) {
|
||||
val supportWritableDatabase: SupportSQLiteDatabase,
|
||||
name: String = SignalDatabase.DATABASE_NAME
|
||||
) : SignalDatabase(context, DatabaseSecret(ByteArray(32).apply { SecureRandom().nextBytes(this) }), AttachmentSecret(null, null, ByteArray(32).apply { SecureRandom().nextBytes(this) }), name) {
|
||||
|
||||
constructor(context: Application, testOpenHelper: SupportSQLiteOpenHelper) : this(context, testOpenHelper.readableDatabase, testOpenHelper.writableDatabase)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user