def test_complete_workflow_exception(self, mock_pgbasebackup_run, mock_pgbasebackup_init, mock_pgrewind_run, mock_pgrewind_init): mock_pgrewind_run.side_effect = [Exception('pg_rewind failed')] mock_pgbasebackup_run.side_effect = [ Exception('pg_basebackup failed once'), Exception('pg_basebackup failed twice') ] mix_confinfo = gppylib.recoveryinfo.serialize_list( [self.full_r1, self.incr_r2]) sys.argv = [ 'gpsegrecovery', '-l', '/tmp/logdir', '--era={}'.format(self.era), '-c {}'.format(mix_confinfo) ] buf = io.StringIO() with redirect_stderr(buf): with self.assertRaises(SystemExit) as ex: SegRecovery().main() self.assertCountEqual( '[{"error_type": "incremental", "error_msg": "pg_rewind failed", "dbid": 4, "datadir": "target_data_dir4", ' '"port": 5004, "progress_file": "/tmp/progress_file4"} , ' '{"error_type": "full", "error_msg": "pg_basebackup failed twice", "dbid": 1,' '"datadir": "target_data_dir1", "port": 5001, "progress_file": "/tmp/progress_file1"}]', buf.getvalue().strip()) self.assertEqual(1, ex.exception.code) self.assertEqual(1, mock_pgrewind_run.call_count) self.assertEqual(1, mock_pgrewind_init.call_count) self.assertEqual(2, mock_pgbasebackup_run.call_count) self.assertEqual(2, mock_pgbasebackup_init.call_count) self.assertRegex(gplog.get_logfile(), '/gpsegrecovery.py_\d+\.log')
def test_get_recovery_cmds_mix_recoveryinfo_forceoverwrite(self): cmd_list = SegRecovery().get_recovery_cmds( [self.full_r1, self.incr_r2], True, self.mock_logger, self.era) self._assert_validation_full_call(cmd_list[0], self.full_r1, expected_forceoverwrite=True) self._assert_setup_incr_call(cmd_list[1], self.incr_r2)
def test_complete_workflow(self, mock_pgbasebackup_run, mock_pgbasebackup_init, mock_pgrewind_run, mock_pgrewind_init): mix_confinfo = gppylib.recoveryinfo.serialize_recovery_info_list( [self.full_r1, self.incr_r2]) sys.argv = ['gpsegrecovery', '-c {}'.format(mix_confinfo)] buf = io.StringIO() with redirect_stderr(buf): with self.assertRaises(SystemExit) as ex: seg_recovery = SegRecovery() seg_recovery.main() self.assertEqual('', buf.getvalue()) self.assertEqual(0, ex.exception.code) self.assertEqual(1, mock_pgrewind_run.call_count) self.assertEqual(1, mock_pgrewind_init.call_count) self.assertEqual(1, mock_pgbasebackup_run.call_count) self.assertEqual(1, mock_pgbasebackup_init.call_count) self.assertRegex(gplog.get_logfile(), '/gpsegrecovery.py_\d+\.log')
def test_get_recovery_cmds_is_called(self, mock_get_recovery_cmds, mock_recovery_base_main, mock_logger): mix_confinfo = gppylib.recoveryinfo.serialize_list( [self.full_r1, self.incr_r2]) sys.argv = [ 'gpsegrecovery', '-l', '/tmp/logdir', '--era={}'.format(self.era), '-f', '-c {}'.format(mix_confinfo) ] SegRecovery().main() mock_get_recovery_cmds.assert_called_once_with( [self.full_r1, self.incr_r2], True, mock_logger.return_value, self.era) mock_recovery_base_main.assert_called_once_with( mock_get_recovery_cmds.return_value)
def test_get_recovery_cmds_mix_recoveryinfo(self): cmd_list = SegRecovery().get_recovery_cmds( [self.full_r1, self.incr_r2], False, self.mock_logger, self.era) self._assert_validation_full_call(cmd_list[0], self.full_r1) self._assert_setup_incr_call(cmd_list[1], self.incr_r2)
def test_empty_recovery_info_list(self): cmd_list = SegRecovery().get_recovery_cmds([], False, None, self.era) self.assertEqual([], cmd_list)
def test_get_recovery_cmds_incr_recoveryinfo(self): cmd_list = SegRecovery().get_recovery_cmds( [self.incr_r1, self.incr_r2], False, self.mock_logger) self._assert_setup_incr_call(cmd_list[0], self.incr_r1) self._assert_setup_incr_call(cmd_list[1], self.incr_r2)