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

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

Issue 2673733002: [Predator] Add CrashData class to process raw json crash data. (Closed)
Patch Set: Rename CrashBuffer to CrashData 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 import mock 5 import mock
6 6
7 from common import chrome_dependency_fetcher 7 from common import chrome_dependency_fetcher
8 from common.dependency import DependencyRoll 8 from common.dependency import DependencyRoll
9 from crash import chromecrash_parser 9 from crash import chromecrash_parser
10 from crash import detect_regression_range 10 from crash import detect_regression_range
11 from crash import findit 11 from crash import findit
12 from crash import findit_for_chromecrash 12 from crash import findit_for_chromecrash
13 from crash.changelist_classifier import ChangelistClassifier 13 from crash.changelist_classifier import ChangelistClassifier
14 from crash.chromecrash_parser import ChromeCrashParser 14 from crash.chromecrash_parser import ChromeCrashParser
15 from crash.component_classifier import ComponentClassifier 15 from crash.component_classifier import ComponentClassifier
16 from crash.crash_report import CrashReport 16 from crash.crash_report import CrashReport
17 from crash.culprit import Culprit 17 from crash.culprit import Culprit
18 from crash.findit_for_chromecrash import FinditForChromeCrash 18 from crash.findit_for_chromecrash import FinditForChromeCrash
19 from crash.findit_for_chromecrash import FinditForFracas 19 from crash.findit_for_chromecrash import FinditForFracas
20 from crash.project_classifier import ProjectClassifier 20 from crash.project_classifier import ProjectClassifier
21 from crash.suspect import Suspect 21 from crash.suspect import Suspect
22 from crash.stacktrace import CallStack 22 from crash.stacktrace import CallStack
23 from crash.stacktrace import Stacktrace 23 from crash.stacktrace import Stacktrace
24 from crash.test.crash_pipeline_test import DummyCrashData
25 from crash.test.predator_testcase import PredatorTestCase 24 from crash.test.predator_testcase import PredatorTestCase
26 from crash.type_enums import CrashClient 25 from crash.type_enums import CrashClient
27 from gae_libs.http.http_client_appengine import HttpClientAppengine 26 from gae_libs.http.http_client_appengine import HttpClientAppengine
28 from libs.gitiles.gitiles_repository import GitilesRepository 27 from libs.gitiles.gitiles_repository import GitilesRepository
29 from model import analysis_status 28 from model import analysis_status
30 from model.crash.crash_analysis import CrashAnalysis 29 from model.crash.crash_analysis import CrashAnalysis
31 from model.crash.fracas_crash_analysis import FracasCrashAnalysis 30 from model.crash.fracas_crash_analysis import FracasCrashAnalysis
32 31
33 MOCK_GET_REPOSITORY = lambda _: None # pragma: no cover 32 MOCK_GET_REPOSITORY = lambda _: None # pragma: no cover
34 33
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
92 _FinditForChromeCrash(GitilesRepository.Factory(HttpClientAppengine()))) 91 _FinditForChromeCrash(GitilesRepository.Factory(HttpClientAppengine())))
93 self.assertIsNone(findit_client.FindCulprit(analysis)) 92 self.assertIsNone(findit_client.FindCulprit(analysis))
94 93
95 94
96 class FinditForFracasTest(PredatorTestCase): 95 class FinditForFracasTest(PredatorTestCase):
97 96
98 def testPlatformRename(self): 97 def testPlatformRename(self):
99 self.assertEqual(_FinditForFracas().RenamePlatform('linux'), 'unix') 98 self.assertEqual(_FinditForFracas().RenamePlatform('linux'), 'unix')
100 99
101 def testCheckPolicyUnsupportedPlatform(self): 100 def testCheckPolicyUnsupportedPlatform(self):
102 self.assertIsNone(_FinditForFracas().CheckPolicy(DummyCrashData( 101 self.assertIsNone(_FinditForFracas().CheckPolicy(self.GetDummyCrashData(
103 platform = 'unsupported_platform'))) 102 platform = 'unsupported_platform')))
104 103
105 def testCheckPolicyBlacklistedSignature(self): 104 def testCheckPolicyBlacklistedSignature(self):
106 self.assertIsNone(_FinditForFracas().CheckPolicy(DummyCrashData( 105 self.assertIsNone(_FinditForFracas().CheckPolicy(self.GetDummyCrashData(
107 signature = 'Blacklist marker signature'))) 106 signature = 'Blacklist marker signature')))
108 107
109 def testCheckPolicyPlatformRename(self): 108 def testCheckPolicyPlatformRename(self):
110 new_crash_data = _FinditForFracas().CheckPolicy(DummyCrashData( 109 new_crash_data = _FinditForFracas().CheckPolicy(self.GetDummyCrashData(
111 platform = 'linux')) 110 platform = 'linux'))
112 self.assertIsNotNone(new_crash_data, 111 self.assertIsNotNone(new_crash_data,
113 'FinditForFracas.CheckPolicy unexpectedly returned None') 112 'FinditForFracas.CheckPolicy unexpectedly returned None')
114 self.assertEqual(new_crash_data['platform'], 'unix') 113 self.assertEqual(new_crash_data['platform'], 'unix')
115 114
116 def testCreateAnalysis(self): 115 def testCreateAnalysis(self):
117 self.assertIsNotNone(_FinditForFracas().CreateAnalysis( 116 self.assertIsNotNone(_FinditForFracas().CreateAnalysis(
118 {'signature': 'sig'})) 117 {'signature': 'sig'}))
119 118
120 def testGetAnalysis(self): 119 def testGetAnalysis(self):
121 crash_identifiers = {'signature': 'sig'} 120 crash_identifiers = {'signature': 'sig'}
122 # TODO(wrengr): would be less fragile to call 121 # TODO(wrengr): would be less fragile to call
123 # FinditForFracas.CreateAnalysis instead. 122 # FinditForFracas.CreateAnalysis instead.
124 analysis = FracasCrashAnalysis.Create(crash_identifiers) 123 analysis = FracasCrashAnalysis.Create(crash_identifiers)
125 analysis.put() 124 analysis.put()
126 self.assertEqual(_FinditForFracas().GetAnalysis(crash_identifiers), 125 self.assertEqual(_FinditForFracas().GetAnalysis(crash_identifiers),
127 analysis) 126 analysis)
128 127
129 def testInitializeAnalysisForFracas(self): 128 def testInitializeAnalysisForFracas(self):
130 crash_data = DummyCrashData(platform = 'linux') 129 crash_data = self.GetDummyCrashData(platform = 'linux')
131 crash_identifiers = crash_data['crash_identifiers'] 130 crash_identifiers = crash_data['crash_identifiers']
132 131
133 findit_client = _FinditForFracas() 132 findit_client = _FinditForFracas()
134 analysis = findit_client.CreateAnalysis(crash_identifiers) 133 analysis = findit_client.CreateAnalysis(crash_identifiers)
135 findit_client._InitializeAnalysis(analysis, crash_data) 134 findit_client._InitializeAnalysis(analysis, crash_data)
136 analysis.put() 135 analysis.put()
137 analysis = findit_client.GetAnalysis(crash_identifiers) 136 analysis = findit_client.GetAnalysis(crash_identifiers)
138 self.assertIsNotNone(analysis, 137 self.assertIsNotNone(analysis,
139 'FinditForFracas.GetAnalysis unexpectedly returned None') 138 'FinditForFracas.GetAnalysis unexpectedly returned None')
140 139
141 self.assertEqual(analysis.crashed_version, crash_data['crashed_version']) 140 self.assertEqual(analysis.crashed_version, crash_data['chrome_version'])
142 self.assertEqual(analysis.signature, crash_data['signature']) 141 self.assertEqual(analysis.signature, crash_data['signature'])
143 self.assertEqual(analysis.platform, crash_data['platform']) 142 self.assertEqual(analysis.platform, crash_data['platform'])
144 self.assertEqual(analysis.stack_trace, crash_data['stack_trace']) 143 self.assertEqual(analysis.stack_trace, crash_data['stack_trace'])
145 channel = crash_data['customized_data'].get('channel', None) 144 channel = crash_data['customized_data'].get('channel', None)
146 self.assertIsNotNone(channel, 145 self.assertIsNotNone(channel,
147 'channel is unexpectedly not defined in crash_data') 146 'channel is unexpectedly not defined in crash_data')
148 self.assertEqual(analysis.channel, channel) 147 self.assertEqual(analysis.channel, channel)
149 148
150 def testNeedsNewAnalysisIsTrueIfNoAnalysisYet(self): 149 def testNeedsNewAnalysisIsTrueIfNoAnalysisYet(self):
151 self.assertTrue(_FinditForFracas()._NeedsNewAnalysis(DummyCrashData())) 150 self.assertTrue(_FinditForFracas()._NeedsNewAnalysis(
151 self.GetDummyCrashData()))
152 152
153 def testNeedsNewAnalysisIsTrueIfLastOneFailed(self): 153 def testNeedsNewAnalysisIsTrueIfLastOneFailed(self):
154 findit_client = _FinditForFracas() 154 findit_client = _FinditForFracas()
155 crash_data = DummyCrashData() 155 crash_data = self.GetDummyCrashData()
156 analysis = findit_client.CreateAnalysis(crash_data['crash_identifiers']) 156 analysis = findit_client.CreateAnalysis(crash_data['crash_identifiers'])
157 analysis.status = analysis_status.ERROR 157 analysis.status = analysis_status.ERROR
158 analysis.put() 158 analysis.put()
159 self.assertTrue(findit_client._NeedsNewAnalysis(crash_data)) 159 self.assertTrue(findit_client._NeedsNewAnalysis(crash_data))
160 160
161 def testNeedsNewAnalysisIsFalseIfLastOneIsNotFailed(self): 161 def testNeedsNewAnalysisIsFalseIfLastOneIsNotFailed(self):
162 findit_client = _FinditForFracas() 162 findit_client = _FinditForFracas()
163 crash_data = DummyCrashData() 163 crash_data = self.GetDummyCrashData()
164 crash_identifiers = crash_data['crash_identifiers'] 164 crash_identifiers = crash_data['crash_identifiers']
165 for status in (analysis_status.PENDING, analysis_status.RUNNING, 165 for status in (analysis_status.PENDING, analysis_status.RUNNING,
166 analysis_status.COMPLETED, analysis_status.SKIPPED): 166 analysis_status.COMPLETED, analysis_status.SKIPPED):
167 analysis = findit_client.CreateAnalysis(crash_identifiers) 167 analysis = findit_client.CreateAnalysis(crash_identifiers)
168 analysis.status = status 168 analysis.status = status
169 analysis.put() 169 analysis.put()
170 self.assertFalse(findit_client._NeedsNewAnalysis(crash_data)) 170 self.assertFalse(findit_client._NeedsNewAnalysis(crash_data))
171 171
172 def testFindCulpritForChromeCrashEmptyStacktrace(self): 172 def testFindCulpritForChromeCrashEmptyStacktrace(self):
173 self.mock(chrome_dependency_fetcher.ChromeDependencyFetcher, 173 self.mock(chrome_dependency_fetcher.ChromeDependencyFetcher,
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
283 'feedback_url': ( 283 'feedback_url': (
284 findit_for_chromecrash._FRACAS_FEEDBACK_URL_TEMPLATE % ( 284 findit_for_chromecrash._FRACAS_FEEDBACK_URL_TEMPLATE % (
285 mocked_host, urlsafe_key)), 285 mocked_host, urlsafe_key)),
286 'other': 'data' 286 'other': 'data'
287 } 287 }
288 } 288 }
289 289
290 self.assertDictEqual(findit_object.GetPublishableResult(crash_identifiers, 290 self.assertDictEqual(findit_object.GetPublishableResult(crash_identifiers,
291 analysis), 291 analysis),
292 expected_processed_suspect) 292 expected_processed_suspect)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698