Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(329)

Side by Side Diff: appengine/findit/crash/test/crash_pipeline_test.py

Issue 2673733002: [Predator] Add CrashData class to process raw json crash data. (Closed)
Patch Set: Rebase and fix nits. Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 # Copyright 2016 The Chromium Authors. All rights reserved. 1 # Copyright 2016 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 from common.pipeline_wrapper import pipeline_handlers 5 from common.pipeline_wrapper import pipeline_handlers
6 from crash import crash_pipeline 6 from crash import crash_pipeline
7 from crash.culprit import Culprit 7 from crash.culprit import Culprit
8 from crash.findit_for_chromecrash import FinditForFracas 8 from crash.findit_for_chromecrash import FinditForFracas
9 from crash.suspect import Suspect 9 from crash.suspect import Suspect
10 from crash.test.predator_testcase import PredatorTestCase 10 from crash.test.predator_testcase import PredatorTestCase
11 from crash.type_enums import CrashClient 11 from crash.type_enums import CrashClient
12 from libs.gitiles.change_log import ChangeLog 12 from libs.gitiles.change_log import ChangeLog
13 from libs.gitiles.change_log import Contributor 13 from libs.gitiles.change_log import Contributor
14 from model import analysis_status 14 from model import analysis_status
15 from model.crash.fracas_crash_analysis import FracasCrashAnalysis 15 from model.crash.fracas_crash_analysis import FracasCrashAnalysis
16 16
17 17
18 def DummyCrashData(
19 client_id=None,
20 version='1',
21 signature='signature',
22 platform='win',
23 stack_trace=None,
24 regression_range=None,
25 channel='canary',
26 historical_metadata=None,
27 crash_identifiers=True,
28 process_type='browser'):
29 if crash_identifiers is True: # pragma: no cover
30 crash_identifiers = {
31 'chrome_version': version,
32 'signature': signature,
33 'channel': channel,
34 'platform': platform,
35 'process_type': process_type,
36 }
37 crash_data = {
38 'crashed_version': version,
39 'signature': signature,
40 'platform': platform,
41 'stack_trace': stack_trace,
42 'regression_range': regression_range,
43 'crash_identifiers': crash_identifiers,
44 'customized_data': {
45 'historical_metadata': historical_metadata,
46 'channel': channel,
47 },
48 }
49 # This insertion of client_id is used for debugging ScheduleNewAnalysis.
50 if client_id is not None: # pragma: no cover
51 crash_data['client_id'] = client_id
52 return crash_data
53
54
55 class CrashPipelineTest(PredatorTestCase): 18 class CrashPipelineTest(PredatorTestCase):
56 app_module = pipeline_handlers._APP 19 app_module = pipeline_handlers._APP
57 20
58 def testAnalysisAborted(self): 21 def testAnalysisAborted(self):
59 crash_identifiers = DummyCrashData()['crash_identifiers'] 22 crash_identifiers = self.GetDummyCrashData()['crash_identifiers']
60 analysis = FracasCrashAnalysis.Create(crash_identifiers) 23 analysis = FracasCrashAnalysis.Create(crash_identifiers)
61 analysis.status = analysis_status.RUNNING 24 analysis.status = analysis_status.RUNNING
62 analysis.put() 25 analysis.put()
63 26
64 pipeline = crash_pipeline.CrashAnalysisPipeline( 27 pipeline = crash_pipeline.CrashAnalysisPipeline(
65 CrashClient.FRACAS, 28 CrashClient.FRACAS,
66 crash_identifiers) 29 crash_identifiers)
67 pipeline._PutAbortedError() 30 pipeline._PutAbortedError()
68 analysis = FracasCrashAnalysis.Get(crash_identifiers) 31 analysis = FracasCrashAnalysis.Get(crash_identifiers)
69 self.assertEqual(analysis_status.ERROR, analysis.status) 32 self.assertEqual(analysis_status.ERROR, analysis.status)
70 33
71 def testFindCulpritFails(self): 34 def testFindCulpritFails(self):
72 crash_identifiers = DummyCrashData()['crash_identifiers'] 35 crash_identifiers = self.GetDummyCrashData()['crash_identifiers']
73 analysis = FracasCrashAnalysis.Create(crash_identifiers) 36 analysis = FracasCrashAnalysis.Create(crash_identifiers)
74 analysis.status = analysis_status.RUNNING 37 analysis.status = analysis_status.RUNNING
75 analysis.put() 38 analysis.put()
76 39
77 self.mock(FinditForFracas, 'FindCulprit', lambda *_: None) 40 self.mock(FinditForFracas, 'FindCulprit', lambda *_: None)
78 pipeline = crash_pipeline.CrashAnalysisPipeline( 41 pipeline = crash_pipeline.CrashAnalysisPipeline(
79 CrashClient.FRACAS, 42 CrashClient.FRACAS,
80 crash_identifiers) 43 crash_identifiers)
81 pipeline.run() 44 pipeline.run()
82 45
83 analysis = FracasCrashAnalysis.Get(crash_identifiers) 46 analysis = FracasCrashAnalysis.Get(crash_identifiers)
84 self.assertEqual(analysis_status.COMPLETED, analysis.status) 47 self.assertEqual(analysis_status.COMPLETED, analysis.status)
85 self.assertFalse(analysis.result['found']) 48 self.assertFalse(analysis.result['found'])
86 self.assertFalse(analysis.found_suspects) 49 self.assertFalse(analysis.found_suspects)
87 self.assertFalse(analysis.found_project) 50 self.assertFalse(analysis.found_project)
88 self.assertFalse(analysis.found_components) 51 self.assertFalse(analysis.found_components)
89 52
90 def testFindCulpritSucceeds(self): 53 def testFindCulpritSucceeds(self):
91 crash_identifiers = DummyCrashData()['crash_identifiers'] 54 crash_identifiers = self.GetDummyCrashData()['crash_identifiers']
92 analysis = FracasCrashAnalysis.Create(crash_identifiers) 55 analysis = FracasCrashAnalysis.Create(crash_identifiers)
93 analysis.status = analysis_status.RUNNING 56 analysis.status = analysis_status.RUNNING
94 analysis.put() 57 analysis.put()
95 58
96 dummy_cl = ChangeLog( 59 dummy_cl = ChangeLog(
97 Contributor('AUTHOR_NAME', 'AUTHOR_EMAIL', 'AUTHOR_TIME'), 60 Contributor('AUTHOR_NAME', 'AUTHOR_EMAIL', 'AUTHOR_TIME'),
98 Contributor('COMITTER_NAME', 'COMITTER_EMAIL', 'COMITTER_TIME'), 61 Contributor('COMITTER_NAME', 'COMITTER_EMAIL', 'COMITTER_TIME'),
99 'REVISION', 62 'REVISION',
100 'COMMIT_POSITION', 63 'COMMIT_POSITION',
101 'MESSAGE', 64 'MESSAGE',
(...skipping 18 matching lines...) Expand all
120 pipeline.run() 83 pipeline.run()
121 84
122 analysis = FracasCrashAnalysis.Get(crash_identifiers) 85 analysis = FracasCrashAnalysis.Get(crash_identifiers)
123 self.assertEqual(analysis_status.COMPLETED, analysis.status) 86 self.assertEqual(analysis_status.COMPLETED, analysis.status)
124 self.assertTrue(analysis.result['found']) 87 self.assertTrue(analysis.result['found'])
125 self.assertTrue(analysis.found_suspects) 88 self.assertTrue(analysis.found_suspects)
126 self.assertTrue(analysis.found_project) 89 self.assertTrue(analysis.found_project)
127 self.assertTrue(analysis.found_components) 90 self.assertTrue(analysis.found_components)
128 dummy_suspect, dummy_tags = dummy_culprit.ToDicts() 91 dummy_suspect, dummy_tags = dummy_culprit.ToDicts()
129 self.assertDictEqual(analysis.result, dummy_suspect) 92 self.assertDictEqual(analysis.result, dummy_suspect)
OLDNEW
« no previous file with comments | « appengine/findit/crash/test/crash_data_test.py ('k') | appengine/findit/crash/test/findit_for_chromecrash_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698