def test_gpstart_fails_if_standby_heap_checksum_doesnt_match_master(self): sys.argv = ["gpstart", "-a"] self.gparray = GpArray([ self.master, self.primary0, self.primary1, self.mirror0, self.mirror1, self.standby ]) self.segments_by_content_id = GpArray.getSegmentsByContentId( self.gparray.getSegDbList()) self.mock_os_path_exists.side_effect = os_exists_check self.subject.unix.PgPortIsActive.local.return_value = False self.mock_heap_checksum.return_value.get_master_value.return_value = 1 self.mock_heap_checksum.return_value.get_standby_value.return_value = 0 parser = self.subject.GpStart.createParser() options, args = parser.parse_args() gpstart = self.subject.GpStart.createProgram(options, args) with patch("gpstart.GpArray.initFromCatalog", return_value=self.gparray): return_code = gpstart.run() self.assertEqual(return_code, 1) self.subject.logger.warning.assert_any_call( "Heap checksum settings on standby master do not match master <<<<<<<<" ) self.subject.logger.error.assert_any_call( "gpstart error: Heap checksum settings are not consistent across the cluster." )
def setUp(self): # because gpstart does not have a .py extension, # we have to use imp to import it # if we had a gpstart.py, this is equivalent to: # import gpstart # self.subject = gpstart gpstart_file = os.path.abspath( os.path.dirname(__file__) + "/../../../gpstart") self.subject = imp.load_source('gpstart', gpstart_file) self.subject.logger = Mock(spec=[ 'log', 'warn', 'info', 'debug', 'error', 'warning', 'fatal', 'warning_to_file_only' ]) self.os_environ = dict(MASTER_DATA_DIRECTORY='/tmp/mdd', GPHOME='/tmp/gphome', GP_MGMT_PROCESS_COUNT=1, LANGUAGE=None) self.gparray = self._createGpArrayWith2Primary2Mirrors() self.segments_by_content_id = GpArray.getSegmentsByContentId( self.gparray.getSegDbList()) start_result = StartSegmentsResult() start_result.addSuccess(self.primary0) self.apply_patches([ patch('os.getenv', side_effect=self._get_env), patch('gpstart.os.path.exists'), patch('gpstart.gp'), patch('gpstart.pgconf'), patch('gpstart.unix'), patch('gpstart.dbconn.DbURL'), patch('gpstart.dbconn.connect'), patch('gpstart.GpArray.initFromCatalog', return_value=self.gparray), patch('gpstart.GpArray.getSegmentsByContentId', return_value=self.segments_by_content_id), patch('gpstart.GpArray.getSegmentsGroupedByValue', side_effect=[{ 2: self.primary0, 3: self.primary1 }, [], []]), patch('gpstart.catalog.getCollationSettings', return_value=("x", "x", "x")), patch('gpstart.GpDbidFile'), patch('gpstart.GpEraFile'), patch('gpstart.userinput'), patch('gpstart.HeapChecksum'), patch('gpstart.log_to_file_only'), patch("gpstart.is_filespace_configured", return_value=True), patch("gpstart.CheckFilespaceConsistency"), patch("gpstart.StartSegmentsOperation"), patch("gpstart.base.WorkerPool"), patch("gpstart.gp.MasterStart.local"), patch("gpstart.pg.DbStatus.local"), patch("gpstart.TableLogger"), ]) self.mockFilespaceConsistency = self.get_mock_from_apply_patch( "CheckFilespaceConsistency") self.mockFilespaceConsistency.return_value.run.return_value = True self.mock_start_result = self.get_mock_from_apply_patch( 'StartSegmentsOperation') self.mock_start_result.return_value.startSegments.return_value.getSuccessfulSegments.return_value = start_result.getSuccessfulSegments( ) self.mock_os_path_exists = self.get_mock_from_apply_patch('exists') self.mock_gp = self.get_mock_from_apply_patch('gp') self.mock_pgconf = self.get_mock_from_apply_patch('pgconf') self.mock_userinput = self.get_mock_from_apply_patch('userinput') self.mock_heap_checksum = self.get_mock_from_apply_patch( 'HeapChecksum') self.mock_heap_checksum.return_value.get_segments_checksum_settings.return_value = ( [1], [1]) self.mock_heap_checksum.return_value.are_segments_consistent.return_value = True self.mock_heap_checksum.return_value.check_segment_consistency.return_value = ( [], [], None) self.mock_pgconf.readfile.return_value = Mock() self.mock_gplog_log_to_file_only = self.get_mock_from_apply_patch( "log_to_file_only") self.mock_gp.get_masterdatadir.return_value = 'masterdatadir' self.mock_gp.GpCatVersion.local.return_value = 1 self.mock_gp.GpCatVersionDirectory.local.return_value = 1 sys.argv = ["gpstart"] # reset to relatively empty args list
def setUp(self): # because gpstart does not have a .py extension, # we have to use imp to import it # if we had a gpstart.py, this is equivalent to: # import gpstart # self.subject = gpstart gpstart_file = os.path.abspath(os.path.dirname(__file__) + "/../../../gpstart") self.subject = imp.load_source('gpstart', gpstart_file) self.subject.logger = Mock( spec=['log', 'warn', 'info', 'debug', 'error', 'warning', 'fatal', 'warning_to_file_only']) self.os_environ = dict(MASTER_DATA_DIRECTORY='/tmp/mdd', GPHOME='/tmp/gphome', GP_MGMT_PROCESS_COUNT=1, LANGUAGE=None) self.gparray = self._createGpArrayWith2Primary2Mirrors() self.segments_by_content_id = GpArray.getSegmentsByContentId(self.gparray.getSegDbList()) start_result = StartSegmentsResult() start_result.addSuccess(self.primary0) self.apply_patches([ patch('os.getenv', side_effect=self._get_env), patch('gpstart.os.path.exists'), patch('gpstart.gp'), patch('gpstart.pgconf'), patch('gpstart.unix'), patch('gpstart.dbconn.DbURL'), patch('gpstart.dbconn.connect'), patch('gpstart.GpArray.initFromCatalog', return_value=self.gparray), patch('gpstart.GpArray.getSegmentsByContentId', return_value=self.segments_by_content_id), patch('gpstart.GpArray.getSegmentsGroupedByValue', side_effect=[{2: self.primary0, 3: self.primary1}, [], []]), patch('gpstart.catalog.getCollationSettings', return_value=("x", "x", "x")), patch('gpstart.GpDbidFile'), patch('gpstart.GpEraFile'), patch('gpstart.userinput'), patch('gpstart.HeapChecksum'), patch('gpstart.log_to_file_only'), patch("gpstart.is_filespace_configured", return_value=True), patch("gpstart.CheckFilespaceConsistency"), patch("gpstart.StartSegmentsOperation"), patch("gpstart.base.WorkerPool"), patch("gpstart.gp.MasterStart.local"), patch("gpstart.pg.DbStatus.local"), patch("gpstart.TableLogger"), patch('gpstart.PgControlData'), ]) self.mockFilespaceConsistency = self.get_mock_from_apply_patch("CheckFilespaceConsistency") self.mockFilespaceConsistency.return_value.run.return_value = True self.mock_start_result = self.get_mock_from_apply_patch('StartSegmentsOperation') self.mock_start_result.return_value.startSegments.return_value.getSuccessfulSegments.return_value = start_result.getSuccessfulSegments() self.mock_os_path_exists = self.get_mock_from_apply_patch('exists') self.mock_gp = self.get_mock_from_apply_patch('gp') self.mock_pgconf = self.get_mock_from_apply_patch('pgconf') self.mock_userinput = self.get_mock_from_apply_patch('userinput') self.mock_heap_checksum = self.get_mock_from_apply_patch('HeapChecksum') self.mock_heap_checksum.return_value.get_segments_checksum_settings.return_value = ([1], [1]) self.mock_heap_checksum.return_value.are_segments_consistent.return_value = True self.mock_heap_checksum.return_value.check_segment_consistency.return_value = ([], [], None) self.mock_pgconf.readfile.return_value = Mock() self.mock_gplog_log_to_file_only = self.get_mock_from_apply_patch("log_to_file_only") self.mock_gp.get_masterdatadir.return_value = 'masterdatadir' self.mock_gp.GpCatVersion.local.return_value = 1 self.mock_gp.GpCatVersionDirectory.local.return_value = 1 sys.argv = ["gpstart"] # reset to relatively empty args list