def repair_db(): """Runs an automated database repair.""" sanity_tester = sanity.DatabaseSanity(db.Base, db.engine) sanity_tester.test() if sanity_tester.errors: output.series('Backing up database to cum.db.bak') db.backup_database() output.series('Running database repair') for error in sanity_tester.errors: error.fix()
def test_database(): """Runs a database sanity test.""" sanity_tester = sanity.DatabaseSanity(Base, engine) sanity_tester.test() if sanity_tester.errors: for error in sanity_tester.errors: err_target, err_msg = str(error).split(' ', 1) message = ' '.join([click.style(err_target, bold=True), err_msg]) output.warning(message) output.error('Database has failed sanity check; ' 'run `cum repair-db` to repair database') exit(1)
def test_repair_db(self): MESSAGES = [ 'Backing up database to cum.db.bak', 'Running database repair' ] self.copy_broken_database() backup_database = os.path.join(self.directory.name, 'cum.db.bak') result = self.invoke('repair-db') self.assertTrue(os.path.isfile(backup_database)) self.assertEqual(result.exit_code, 0) for message in MESSAGES: self.assertIn(message, result.output) sanity_tester = sanity.DatabaseSanity(self.db.Base, self.db.engine) sanity_tester.test() self.assertTrue(sanity_tester.is_sane)