private void testRecreateDuringMigration(boolean upgrade) { // insert some data to check for later badDatabase.persist(new Employee().setName("Alice")); badDatabase.persist(new Employee().setName("Bob")); badDatabase.persist(new Employee().setName("Cindy")); assertEquals(3, badDatabase.countAll(Employee.class)); testMigrationFailureCalled(upgrade, false, true); // verify the db was recreated with the appropriate version and no previous data SQLiteDatabaseWrapper db = badDatabase.getDatabase(); assertEquals(badDatabase.getVersion(), db.getVersion()); assertEquals(0, badDatabase.countAll(Employee.class)); }
public void testCustomMigrationException() { TestDatabase database = new TestDatabase(getContext()); SQLiteDatabaseWrapper db = database.getDatabase(); // force a downgrade final int version = db.getVersion(); final int previousVersion = version + 1; db.setVersion(previousVersion); database.close(); database.getDatabase(); try { assertTrue(database.caughtCustomMigrationException); } finally { database.clear(); // clean up since this is the only test using it } }
private void testMigrationFailureCalled( boolean upgrade, boolean shouldThrow, boolean shouldRecreate) { badDatabase.setShouldThrowDuringMigration(shouldThrow); badDatabase.setShouldRecreate(shouldRecreate); // set version manually SQLiteDatabaseWrapper db = badDatabase.getDatabase(); final int version = db.getVersion(); final int previousVersion = upgrade ? version - 1 : version + 1; db.setVersion(previousVersion); // close and reopen to trigger an upgrade/downgrade badDatabase.onTablesCreatedCalled = false; badDatabase.close(); badDatabase.getDatabase(); assertTrue(upgrade ? badDatabase.onUpgradeCalled : badDatabase.onDowngradeCalled); if (shouldRecreate) { assertTrue(badDatabase.onTablesCreatedCalled); } else { assertTrue(badDatabase.onMigrationFailedCalled); assertEquals(previousVersion, badDatabase.migrationFailedOldVersion); assertEquals(version, badDatabase.migrationFailedNewVersion); } }