1.9 KiB
Testing database migration
Creating a reference database
Databases are encrypted, the key to decrypt is needed to setup the test. A special build property must be enabled to extract it.
Set vector.debugPrivateData=true
in ~/.gradle/gradle.properties
(to avoid committing by mistake)
Launch the app in your emulator, login and use the app to fill up the database.
Save the key for the tested database
RealmKeysUtils W Database key for alias `session_db_fe9f212a611ccf6dea1141777065ed0a`: 935a6dfa0b0fc5cce1414194ed190....
RealmKeysUtils W Database key for alias `crypto_module_fe9f212a611ccf6dea1141777065ed0a`: 7b9a21a8a311e85d75b069a343.....
Use the Device File Explorer to extrat the database file from the emulator.
Go to data/data/im.vector.app.debug/files/<hash>/
Pick the database you want to test (name can be found in SessionRealmConfigurationFactory):
- crypto_store.realm for crypto
- disk_store.realm for session
- etc...
Download the file on your disk
Testing
Copy the file in src/AndroidTest/assets
see CryptoSanityMigrationTest
or RealmSessionStoreMigration43Test
for sample tests.
There are already some databases in the assets folder. The existing test will properly detect schema changes, and fail with such errors if a migration is missing:
io.realm.exceptions.RealmMigrationNeededException: Migration is required due to the following errors:
- Property 'CryptoMetadataEntity.foo' has been added.
If you want to test properly more complex database migration (dynamic transforms) ensure that the database contains the entity you want to migrate.
You can explore the database with realm studio if needed.