def testInitializeByCrashData(self): """Tests initializing ``CrashAnalysis`` from ``CrashData``.""" chrome_version = '50.2500.0.0' signature = 'signature/here' channel = 'canary' platform = 'mac' raw_crash_data = self.GetDummyChromeCrashData( client_id=CrashClient.FRACAS, channel=channel, platform=platform, signature=signature, version=chrome_version, process_type='renderer') predator = self.GetMockPredatorApp(client_id=CrashClient.FRACAS) crash_data = predator.GetCrashData(raw_crash_data) analysis = CrashAnalysis() analysis.Initialize(crash_data) self.assertEqual(analysis.stack_trace, crash_data.raw_stacktrace) self.assertEqual(analysis.signature, crash_data.signature) self.assertEqual(analysis.platform, crash_data.platform) self.assertEqual(analysis.regression_range, crash_data.regression_range) self.assertEqual(analysis.dependencies, crash_data.dependencies) self.assertEqual(analysis.dependency_rolls, crash_data.dependency_rolls)
def testStackTraceWriteBigStackTraceToStorage(self): """Tests ``stack_trace`` setter writes big stacktrace to cloud storage.""" identifiers = {'signature': 'sig'} analysis = CrashAnalysis.Create(identifiers) big_stacktrace = 'a' * 2048487 analysis.stack_trace = big_stacktrace analysis.put() self.assertEqual( CrashAnalysis.Get(identifiers).stack_trace, big_stacktrace)
def testLogProperty(self): """Tests ``log`` property.""" ids = {'id': '123'} log = Log.Create(ids) log.Log('DummyInfo', 'This is a dummy info.', 'info') analysis = CrashAnalysis.Create(ids) analysis.identifiers = ids self.assertEqual(log, analysis.log)
def testToCrashReport(self): """Tests converting ``CrashAnalysis`` to ``CrashReport``.""" signature = 'signature/here' channel = 'canary' platform = 'mac' regression_range = ('50.2450.0.2', '50.2982.0.0') raw_crash_data = self.GetDummyChromeCrashData( client_id=CrashClient.FRACAS, channel=channel, platform=platform, signature=signature, version=None, regression_range=regression_range, process_type='renderer') predator = self.GetMockPredatorApp(client_id=CrashClient.FRACAS) crash_data = predator.GetCrashData(raw_crash_data) analysis = CrashAnalysis() analysis.Initialize(crash_data) expected_crash_report = CrashReport(None, signature, platform, None, regression_range, {}, {}, CHROMIUM_REPO_URL, CHROMIUM_ROOT_PATH) self.assertTupleEqual(analysis.ToCrashReport(), expected_crash_report)
def testToCrashReport(self): """Tests converting ``CrashAnalysis`` to ``CrashReport``.""" chrome_version = '50.2500.0.0' signature = 'signature/here' channel = 'canary' platform = 'mac' regression_range = ('50.2450.0.2', '50.2982.0.0') raw_crash_data = self.GetDummyChromeCrashData( client_id=CrashClient.FRACAS, channel=channel, platform=platform, signature=signature, version=chrome_version, regression_range=regression_range, process_type='renderer') findit = self.GetMockFindit(client_id=CrashClient.FRACAS) crash_data = findit.GetCrashData(raw_crash_data) analysis = CrashAnalysis() analysis.Initialize(crash_data) expected_crash_report = CrashReport(chrome_version, signature, platform, None, regression_range, {}, {}) self.assertTupleEqual(analysis.ToCrashReport(), expected_crash_report)
def testCrashAnalysisReset(self): analysis = CrashAnalysis() analysis.pipeline_status_path = '' analysis.status = analysis_status.COMPLETED analysis.requested_time = datetime.utcnow() analysis.started_time = datetime.utcnow() analysis.predator_version = '' analysis.has_regression_range = True analysis.found_suspects = True analysis.solution = '' analysis.Reset() self.assertIsNone(analysis.pipeline_status_path) self.assertEqual(analysis_status.PENDING, analysis.status) self.assertIsNone(analysis.started_time) self.assertIsNone(analysis.predator_version) self.assertIsNone(analysis.has_regression_range) self.assertIsNone(analysis.found_suspects) self.assertIsNone(analysis.solution) self.assertEqual(analysis.result, None) self.assertEqual(analysis.regression_range_triage_status, triage_status.UNTRIAGED) self.assertEqual(analysis.suspected_cls_triage_status, triage_status.UNTRIAGED) self.assertEqual(analysis.suspected_project_triage_status, triage_status.UNTRIAGED) self.assertEqual(analysis.suspected_components_triage_status, triage_status.UNTRIAGED)
def testCrashAnalysisStatusIsNotFailed(self): for status in (analysis_status.PENDING, analysis_status.RUNNING, analysis_status.COMPLETED): analysis = CrashAnalysis() analysis.status = status self.assertFalse(analysis.failed)
def testCrashAnalysisStatusIsFailed(self): analysis = CrashAnalysis() analysis.status = analysis_status.ERROR self.assertTrue(analysis.failed)
def testCrashAnalysisDurationWhenStartTimeNotSet(self): analysis = CrashAnalysis() analysis.status = analysis_status.COMPLETED analysis.started_time = datetime(2015, 07, 30, 21, 15, 30, 40) analysis.completed_time = datetime(2015, 07, 30, 21, 16, 15, 50) self.assertEqual(45, analysis.duration)
def testCrashAnalysisDurationWhenNotCompleted(self): analysis = CrashAnalysis() analysis.status = analysis_status.RUNNING self.assertIsNone(analysis.duration)
def testCrashAnalysisStatusIsNotCompleted(self): for status in (analysis_status.PENDING, analysis_status.RUNNING): analysis = CrashAnalysis() analysis.status = status self.assertFalse(analysis.completed)
def testUpdateCrashAnalysis(self): update = {'note': 'dummy'} analysis = CrashAnalysis() analysis.Update(update) self.assertEqual(analysis.note, update['note'])
def testCreateCrashAnalysis(self): crash_identifiers = {'signature': 'sig'} analysis = CrashAnalysis.Create(crash_identifiers) analysis.put() self.assertIsNotNone(analysis) self.assertEqual(CrashAnalysis.Get(crash_identifiers), analysis)
def testUpdateCrashAnalysisWithNonExistentProperty(self): update = {'dummy': 'dummy_content'} analysis = CrashAnalysis() analysis.Update(update) self.assertFalse(hasattr(analysis, 'dummy'))
def GetAnalysis(self, crash_identifiers): return CrashAnalysis.Get(crash_identifiers)
def CreateAnalysis(self, crash_identifiers): return CrashAnalysis.Create(crash_identifiers)
def testCrashAnalysisStatusIsCompleted(self): for status in (analysis_status.COMPLETED, analysis_status.ERROR): analysis = CrashAnalysis() analysis.status = status self.assertTrue(analysis.completed)