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

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: 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 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.loglinear.changelist_classifier import LogLinearChangelistClassifier 13 from crash.loglinear.changelist_classifier import LogLinearChangelistClassifier
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 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
93 _FinditForChromeCrash(GitilesRepository.Factory(HttpClientAppengine()))) 92 _FinditForChromeCrash(GitilesRepository.Factory(HttpClientAppengine())))
94 self.assertIsNone(findit_client.FindCulprit(analysis)) 93 self.assertIsNone(findit_client.FindCulprit(analysis))
95 94
96 95
97 class FinditForFracasTest(PredatorTestCase): 96 class FinditForFracasTest(PredatorTestCase):
98 97
99 def testPlatformRename(self): 98 def testPlatformRename(self):
100 self.assertEqual(_FinditForFracas().RenamePlatform('linux'), 'unix') 99 self.assertEqual(_FinditForFracas().RenamePlatform('linux'), 'unix')
101 100
102 def testCheckPolicyUnsupportedPlatform(self): 101 def testCheckPolicyUnsupportedPlatform(self):
103 self.assertIsNone(_FinditForFracas().CheckPolicy(DummyCrashData( 102 self.assertIsNone(_FinditForFracas().CheckPolicy(self.GetDummyCrashData(
104 platform = 'unsupported_platform'))) 103 platform = 'unsupported_platform')))
105 104
106 def testCheckPolicyBlacklistedSignature(self): 105 def testCheckPolicyBlacklistedSignature(self):
107 self.assertIsNone(_FinditForFracas().CheckPolicy(DummyCrashData( 106 self.assertIsNone(_FinditForFracas().CheckPolicy(self.GetDummyCrashData(
108 signature = 'Blacklist marker signature'))) 107 signature = 'Blacklist marker signature')))
109 108
110 def testCheckPolicyPlatformRename(self): 109 def testCheckPolicyPlatformRename(self):
111 new_crash_data = _FinditForFracas().CheckPolicy(DummyCrashData( 110 new_crash_data = _FinditForFracas().CheckPolicy(self.GetDummyCrashData(
112 platform = 'linux')) 111 platform = 'linux'))
113 self.assertIsNotNone(new_crash_data, 112 self.assertIsNotNone(new_crash_data,
114 'FinditForFracas.CheckPolicy unexpectedly returned None') 113 'FinditForFracas.CheckPolicy unexpectedly returned None')
115 self.assertEqual(new_crash_data['platform'], 'unix') 114 self.assertEqual(new_crash_data['platform'], 'unix')
116 115
117 def testCreateAnalysis(self): 116 def testCreateAnalysis(self):
118 self.assertIsNotNone(_FinditForFracas().CreateAnalysis( 117 self.assertIsNotNone(_FinditForFracas().CreateAnalysis(
119 {'signature': 'sig'})) 118 {'signature': 'sig'}))
120 119
121 def testGetAnalysis(self): 120 def testGetAnalysis(self):
122 crash_identifiers = {'signature': 'sig'} 121 crash_identifiers = {'signature': 'sig'}
123 # TODO(wrengr): would be less fragile to call 122 # TODO(wrengr): would be less fragile to call
124 # FinditForFracas.CreateAnalysis instead. 123 # FinditForFracas.CreateAnalysis instead.
125 analysis = FracasCrashAnalysis.Create(crash_identifiers) 124 analysis = FracasCrashAnalysis.Create(crash_identifiers)
126 analysis.put() 125 analysis.put()
127 self.assertEqual(_FinditForFracas().GetAnalysis(crash_identifiers), 126 self.assertEqual(_FinditForFracas().GetAnalysis(crash_identifiers),
128 analysis) 127 analysis)
129 128
130 def testInitializeAnalysisForFracas(self): 129 def testInitializeAnalysisForFracas(self):
131 crash_data = DummyCrashData(platform = 'linux') 130 crash_data = self.GetDummyCrashData(platform = 'linux')
132 crash_identifiers = crash_data['crash_identifiers'] 131 crash_identifiers = crash_data['crash_identifiers']
133 132
134 findit_client = _FinditForFracas() 133 findit_client = _FinditForFracas()
135 analysis = findit_client.CreateAnalysis(crash_identifiers) 134 analysis = findit_client.CreateAnalysis(crash_identifiers)
136 findit_client._InitializeAnalysis(analysis, crash_data) 135 findit_client._InitializeAnalysis(analysis, crash_data)
137 analysis.put() 136 analysis.put()
138 analysis = findit_client.GetAnalysis(crash_identifiers) 137 analysis = findit_client.GetAnalysis(crash_identifiers)
139 self.assertIsNotNone(analysis, 138 self.assertIsNotNone(analysis,
140 'FinditForFracas.GetAnalysis unexpectedly returned None') 139 'FinditForFracas.GetAnalysis unexpectedly returned None')
141 140
142 self.assertEqual(analysis.crashed_version, crash_data['crashed_version']) 141 self.assertEqual(analysis.crashed_version, crash_data['chrome_version'])
143 self.assertEqual(analysis.signature, crash_data['signature']) 142 self.assertEqual(analysis.signature, crash_data['signature'])
144 self.assertEqual(analysis.platform, crash_data['platform']) 143 self.assertEqual(analysis.platform, crash_data['platform'])
145 self.assertEqual(analysis.stack_trace, crash_data['stack_trace']) 144 self.assertEqual(analysis.stack_trace, crash_data['stack_trace'])
146 channel = crash_data['customized_data'].get('channel', None) 145 channel = crash_data['customized_data'].get('channel', None)
147 self.assertIsNotNone(channel, 146 self.assertIsNotNone(channel,
148 'channel is unexpectedly not defined in crash_data') 147 'channel is unexpectedly not defined in crash_data')
149 self.assertEqual(analysis.channel, channel) 148 self.assertEqual(analysis.channel, channel)
150 149
151 def testNeedsNewAnalysisIsTrueIfNoAnalysisYet(self): 150 def testNeedsNewAnalysisIsTrueIfNoAnalysisYet(self):
152 self.assertTrue(_FinditForFracas()._NeedsNewAnalysis(DummyCrashData())) 151 self.assertTrue(_FinditForFracas()._NeedsNewAnalysis(
152 self.GetDummyCrashData()))
153 153
154 def testNeedsNewAnalysisIsTrueIfLastOneFailed(self): 154 def testNeedsNewAnalysisIsTrueIfLastOneFailed(self):
155 findit_client = _FinditForFracas() 155 findit_client = _FinditForFracas()
156 crash_data = DummyCrashData() 156 crash_data = self.GetDummyCrashData()
157 analysis = findit_client.CreateAnalysis(crash_data['crash_identifiers']) 157 analysis = findit_client.CreateAnalysis(crash_data['crash_identifiers'])
158 analysis.status = analysis_status.ERROR 158 analysis.status = analysis_status.ERROR
159 analysis.put() 159 analysis.put()
160 self.assertTrue(findit_client._NeedsNewAnalysis(crash_data)) 160 self.assertTrue(findit_client._NeedsNewAnalysis(crash_data))
161 161
162 def testNeedsNewAnalysisIsFalseIfLastOneIsNotFailed(self): 162 def testNeedsNewAnalysisIsFalseIfLastOneIsNotFailed(self):
163 findit_client = _FinditForFracas() 163 findit_client = _FinditForFracas()
164 crash_data = DummyCrashData() 164 crash_data = self.GetDummyCrashData()
165 crash_identifiers = crash_data['crash_identifiers'] 165 crash_identifiers = crash_data['crash_identifiers']
166 for status in (analysis_status.PENDING, analysis_status.RUNNING, 166 for status in (analysis_status.PENDING, analysis_status.RUNNING,
167 analysis_status.COMPLETED, analysis_status.SKIPPED): 167 analysis_status.COMPLETED, analysis_status.SKIPPED):
168 analysis = findit_client.CreateAnalysis(crash_identifiers) 168 analysis = findit_client.CreateAnalysis(crash_identifiers)
169 analysis.status = status 169 analysis.status = status
170 analysis.put() 170 analysis.put()
171 self.assertFalse(findit_client._NeedsNewAnalysis(crash_data)) 171 self.assertFalse(findit_client._NeedsNewAnalysis(crash_data))
172 172
173 def testFindCulpritForChromeCrashEmptyStacktrace(self): 173 def testFindCulpritForChromeCrashEmptyStacktrace(self):
174 self.mock(chrome_dependency_fetcher.ChromeDependencyFetcher, 174 self.mock(chrome_dependency_fetcher.ChromeDependencyFetcher,
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
285 'feedback_url': ( 285 'feedback_url': (
286 findit_for_chromecrash._FRACAS_FEEDBACK_URL_TEMPLATE % ( 286 findit_for_chromecrash._FRACAS_FEEDBACK_URL_TEMPLATE % (
287 mocked_host, urlsafe_key)), 287 mocked_host, urlsafe_key)),
288 'other': 'data' 288 'other': 'data'
289 } 289 }
290 } 290 }
291 291
292 self.assertDictEqual(findit_object.GetPublishableResult(crash_identifiers, 292 self.assertDictEqual(findit_object.GetPublishableResult(crash_identifiers,
293 analysis), 293 analysis),
294 expected_processed_suspect) 294 expected_processed_suspect)
OLDNEW
« no previous file with comments | « appengine/findit/crash/test/crash_pipeline_test.py ('k') | appengine/findit/crash/test/findit_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698