def testMasterFlakeAnalysisStatusDescriptionPending(self): analysis = MasterFlakeAnalysis.Create('m', 'b', 123, 's', 't') analysis.status = analysis_status.PENDING self.assertEqual('Pending', analysis.status_description)
def testMasterFlakeAnalysisStatusIsFailed(self): analysis = MasterFlakeAnalysis.Create('m', 'b', 123, 's', 't') analysis.status = analysis_status.ERROR self.assertTrue(analysis.failed)
def testMasterFlakeAnalysisStatusIsNotFailed(self): for status in (analysis_status.PENDING, analysis_status.RUNNING, analysis_status.COMPLETED): analysis = MasterFlakeAnalysis.Create('m', 'b', 123, 's', 't') analysis.status = status self.assertFalse(analysis.failed)
def testMasterFlakeAnalysisDurationWhenEndTimeNotSet(self): analysis = MasterFlakeAnalysis.Create('m', 'b', 123, 's', 't') analysis.status = analysis_status.COMPLETED analysis.start_time = datetime(2015, 07, 30, 21, 15, 30, 40) self.assertIsNone(analysis.duration)
def testMasterFlakeAnalysisDurationWhenCompleted(self): analysis = MasterFlakeAnalysis.Create('m', 'b', 123, 's', 't') analysis.status = analysis_status.COMPLETED analysis.start_time = datetime(2015, 07, 30, 21, 15, 30, 40) analysis.end_time = datetime(2015, 07, 30, 21, 16, 15, 50) self.assertEqual(45, analysis.duration)
def testMasterFlakeAnalysisDurationWhenNotCompleted(self): analysis = MasterFlakeAnalysis.Create('m', 'b', 123, 's', 't') analysis.status = analysis_status.RUNNING self.assertIsNone(analysis.duration)
def testGetDataPointOfSuspectedBuildNoSuspectedFlakeBuildNumber(self): analysis = MasterFlakeAnalysis.Create('m', 'b', 123, 's', 't') self.assertIsNone(analysis.GetDataPointOfSuspectedBuild())
def testMasterFlakeAnalysisStatusIsCompleted(self): for status in (analysis_status.COMPLETED, analysis_status.ERROR): analysis = MasterFlakeAnalysis.Create('m', 'b', 123, 's', 't') analysis.status = status self.assertTrue(analysis.completed)
def testMasterFlakeAnalysisUpdateTriageResultIncorrectCulprit(self): analysis = MasterFlakeAnalysis.Create('m', 'b', 123, 's', 't') analysis.UpdateTriageResult(triage_status.TRIAGED_INCORRECT, {'culprit_revision': 'rev'}, 'test') self.assertEqual(analysis.result_status, result_status.FOUND_INCORRECT) self.assertFalse(analysis.correct_culprit)
def _NeedANewAnalysis(normalized_test, original_test, flake_settings, bug_id=None, allow_new_analysis=False, force=False, user_email='', triggering_source=triggering_sources.FINDIT_PIPELINE): """Checks status of analysis for the test and decides if a new one is needed. A MasterFlakeAnalysis entity for the given parameters will be created if none exists. When a new analysis is needed, this function will create and save a MasterFlakeAnalysis entity to the datastore. Args: normalized_test (TestInfo): Info of the normalized flaky test after mapping a CQ trybot step to a Waterfall buildbot step, striping prefix "PRE_" from a gtest, etc. original_test (TestInfo): Info of the original flaky test. flake_settings (dict): The flake settings run on this analysis. bug_id (int): The monorail bug id to update when analysis is done. allow_new_analysis (bool): Indicate whether a new analysis is allowed. force (bool): Indicate whether to force a rerun of current analysis. user_email (str): The user triggering this analysis. triggering_source (int): The source from which this analysis was triggered. Returns: (need_new_analysis, analysis) need_new_analysis (bool): True if an analysis is needed, otherwise False. analysis (MasterFlakeAnalysis): The MasterFlakeAnalysis entity. """ analysis = MasterFlakeAnalysis.GetVersion(normalized_test.master_name, normalized_test.builder_name, normalized_test.build_number, normalized_test.step_name, normalized_test.test_name) def PopulateAnalysisInfo(analysis): analysis.Reset() analysis.request_time = time_util.GetUTCNow() analysis.status = analysis_status.PENDING analysis.algorithm_parameters = flake_settings analysis.version = appengine_util.GetCurrentVersion() analysis.triggering_user_email = user_email analysis.triggering_user_email_obscured = False analysis.triggering_source = triggering_source analysis.original_master_name = original_test.master_name analysis.original_builder_name = original_test.builder_name analysis.original_build_number = original_test.build_number analysis.original_step_name = original_test.step_name analysis.original_test_name = original_test.test_name analysis.bug_id = bug_id if not analysis: if not allow_new_analysis: return False, None analysis = MasterFlakeAnalysis.Create(normalized_test.master_name, normalized_test.builder_name, normalized_test.build_number, normalized_test.step_name, normalized_test.test_name) PopulateAnalysisInfo(analysis) _, saved = analysis.Save() return saved, analysis elif (analysis.status == analysis_status.PENDING or analysis.status == analysis_status.RUNNING): return False, analysis elif allow_new_analysis and force and analysis.status in ( analysis_status.ERROR, analysis_status.COMPLETED): PopulateAnalysisInfo(analysis) _, saved = analysis.Save() return saved, analysis else: return False, analysis