def testGetScheduledBuildDict(self): """test GetScheduledBuildDict.""" config_name_1 = 'config_name_1' config_name_2 = 'config_name_2' config_name_3 = 'config_name_3' id_1 = 'id_1' id_2 = 'id_2' id_3 = 'id_3' slave_list = [(config_name_1, id_1, 1), (config_name_2, id_2, 2), (config_name_3, id_3, 3)] build_dict = buildbucket_lib.GetScheduledBuildDict(slave_list) self.assertEqual(len(build_dict), 3) self.assertEqual(build_dict[config_name_1].buildbucket_id, id_1) self.assertEqual(build_dict[config_name_2].buildbucket_id, id_2) self.assertEqual(build_dict[config_name_3].buildbucket_id, id_3) self.assertEqual(build_dict[config_name_1].retry, 0) self.assertEqual(build_dict[config_name_2].retry, 0) self.assertEqual(build_dict[config_name_3].retry, 0) self.assertEqual(build_dict[config_name_1].created_ts, 1) self.assertEqual(build_dict[config_name_2].created_ts, 2) self.assertEqual(build_dict[config_name_3].created_ts, 3) slave_list = [(config_name_1, id_1, 1), (config_name_2, id_2, 2), (config_name_1, id_3, 3)] build_dict = buildbucket_lib.GetScheduledBuildDict(slave_list) self.assertEqual(len(build_dict), 2) self.assertEqual(build_dict[config_name_1].buildbucket_id, id_3) self.assertEqual(build_dict[config_name_2].buildbucket_id, id_2) self.assertEqual(build_dict[config_name_1].retry, 1) self.assertEqual(build_dict[config_name_2].retry, 0) self.assertEqual(build_dict[config_name_1].created_ts, 3) self.assertEqual(build_dict[config_name_2].created_ts, 2) slave_list = [(config_name_1, id_1, 3), (config_name_2, id_2, 2), (config_name_1, id_3, 1)] build_dict = buildbucket_lib.GetScheduledBuildDict(slave_list) self.assertEqual(len(build_dict), 2) self.assertEqual(build_dict[config_name_1].buildbucket_id, id_1) self.assertEqual(build_dict[config_name_2].buildbucket_id, id_2) self.assertEqual(build_dict[config_name_1].retry, 1) self.assertEqual(build_dict[config_name_2].retry, 0) self.assertEqual(build_dict[config_name_1].created_ts, 3) self.assertEqual(build_dict[config_name_2].created_ts, 2) build_dict = buildbucket_lib.GetScheduledBuildDict([]) self.assertEqual(build_dict, {}) build_dict = buildbucket_lib.GetScheduledBuildDict(None) self.assertEqual(build_dict, {})
def _GetUncompletedExperimentalBuildbucketIDs(self): """Get buildbucket_ids for uncompleted experimental builds. Returns: A set of Buildbucket IDs (strings) of uncompleted experimental builds. """ flagged_experimental_builders = self.metadata.GetValueWithDefault( constants.METADATA_EXPERIMENTAL_BUILDERS, []) experimental_slaves = self.metadata.GetValueWithDefault( constants.METADATA_SCHEDULED_EXPERIMENTAL_SLAVES, []) important_slaves = self.metadata.GetValueWithDefault( constants.METADATA_SCHEDULED_IMPORTANT_SLAVES, []) experimental_slaves += [ (name, bb_id, time) for (name, bb_id, time) in important_slaves if name in flagged_experimental_builders ] all_experimental_bb_info_dict = ( builder_status_lib.SlaveBuilderStatus.GetAllSlaveBuildbucketInfo( self.buildbucket_client, buildbucket_lib.GetScheduledBuildDict(experimental_slaves), self.dry_run ) ) all_experimental_cidb_status_dict = ( builder_status_lib.SlaveBuilderStatus.GetAllSlaveCIDBStatusInfo( self.buildstore, self.master_build_identifier, all_experimental_bb_info_dict) ) completed_experimental_builds = set( name for name, info in all_experimental_bb_info_dict.items() if info.status == constants.BUILDBUCKET_BUILDER_STATUS_COMPLETED ) completed_experimental_builds |= set( name for name, info in all_experimental_cidb_status_dict.items() if info.status in constants.BUILDER_COMPLETED_STATUSES ) return set([bb_id for (name, bb_id, time) in experimental_slaves if name not in completed_experimental_builds])
def testAnnotateBuildStatusFromBuildbucket(self): """Test AnnotateBuildStatusFromBuildbucket""" stage = self.ConstructStage() scheduled_slaves_list = { ('build_1', 'buildbucket_id_1', 1), ('build_2', 'buildbucket_id_2', 2) } stage.buildbucket_info_dict = ( buildbucket_lib.GetScheduledBuildDict(scheduled_slaves_list)) mock_logging_link = self.PatchObject( logging, 'PrintBuildbotLink', side_effect=logging.PrintBuildbotLink) mock_logging_text = self.PatchObject( logging, 'PrintBuildbotStepText', side_effect=logging.PrintBuildbotStepText) no_stat = set(['not_scheduled_build_1']) stage._AnnotateBuildStatusFromBuildbucket(no_stat) mock_logging_text.assert_called_once_with( '%s wasn\'t scheduled by master.' % 'not_scheduled_build_1') build_content = { 'build': { 'status': 'COMPLETED', 'result': 'FAILURE', 'url': 'dashboard_url', "failure_reason": "BUILD_FAILURE", } } self.PatchObject(buildbucket_lib.BuildbucketClient, 'GetBuildRequest', return_value=build_content) no_stat = set(['build_1']) stage._AnnotateBuildStatusFromBuildbucket(no_stat) mock_logging_link.assert_called_once_with( '%s: [status] %s [result] %s [failure_reason] %s' % ('build_1', 'COMPLETED', 'FAILURE', 'BUILD_FAILURE'), 'dashboard_url') mock_logging_link.reset_mock() build_content = { 'build': { 'status': 'COMPLETED', 'result': 'CANCELED', 'url': 'dashboard_url', "cancelation_reason": "CANCELED_EXPLICITLY", } } self.PatchObject(buildbucket_lib.BuildbucketClient, 'GetBuildRequest', return_value=build_content) no_stat = set(['build_1']) stage._AnnotateBuildStatusFromBuildbucket(no_stat) mock_logging_link.assert_called_once_with( '%s: [status] %s [result] %s [cancelation_reason] %s' % ('build_1', 'COMPLETED', 'CANCELED', 'CANCELED_EXPLICITLY'), 'dashboard_url') mock_logging_text.reset_mock() self.PatchObject(buildbucket_lib.BuildbucketClient, 'GetBuildRequest', side_effect=buildbucket_lib.BuildbucketResponseException) no_stat = set(['build_1']) stage._AnnotateBuildStatusFromBuildbucket(no_stat) mock_logging_text.assert_called_once_with( 'No status found for build %s buildbucket_id %s' % ('build_1', 'buildbucket_id_1'))