示例#1
0
 def testMasterFlakeAnalysisStatusDescriptionPending(self):
     analysis = MasterFlakeAnalysis.Create('m', 'b', 123, 's', 't')
     analysis.status = analysis_status.PENDING
     self.assertEqual('Pending', analysis.status_description)
示例#2
0
 def testMasterFlakeAnalysisStatusIsFailed(self):
     analysis = MasterFlakeAnalysis.Create('m', 'b', 123, 's', 't')
     analysis.status = analysis_status.ERROR
     self.assertTrue(analysis.failed)
示例#3
0
 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)
示例#4
0
 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)
示例#5
0
 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)
示例#6
0
 def testMasterFlakeAnalysisDurationWhenNotCompleted(self):
     analysis = MasterFlakeAnalysis.Create('m', 'b', 123, 's', 't')
     analysis.status = analysis_status.RUNNING
     self.assertIsNone(analysis.duration)
示例#7
0
 def testGetDataPointOfSuspectedBuildNoSuspectedFlakeBuildNumber(self):
     analysis = MasterFlakeAnalysis.Create('m', 'b', 123, 's', 't')
     self.assertIsNone(analysis.GetDataPointOfSuspectedBuild())
示例#8
0
 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)
示例#9
0
 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)
示例#10
0
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