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

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

Issue 2414523002: [Findit] Reorganizing findit_for_*.py (Closed)
Patch Set: trying to fix some tests Created 4 years, 2 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
(Empty)
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
3 # found in the LICENSE file.
4
5 import copy
6 import json
7
8 from google.appengine.api import app_identity
9
10 from crash import detect_regression_range
11 from crash import findit_for_client
12 from crash import findit_for_chromecrash
13 from crash.chromecrash_parser import ChromeCrashParser
14 from crash.test.crash_testcase import CrashTestCase
15 from crash.type_enums import CrashClient
16 from model.crash.fracas_crash_analysis import FracasCrashAnalysis
17
18
19 class FinditForClientTest(CrashTestCase):
20
21 def testCheckPolicyUnsupportedClient(self):
22 pass_check, _ = findit_for_client.CheckPolicyForClient(
23 {'signature': 'sig'}, '1', 'sig', 'unsupported_client',
24 'canary', 'stack_trace', {'channel': 'canary'})
25 self.assertFalse(pass_check)
26
27 def testCheckPolicyUnsupportedPlatform(self):
28 chrome_version = '1'
29 signature = 'signature'
30 platform = 'unsupported_platform'
31 crash_identifiers = {
32 'chrome_version': chrome_version,
33 'signature': signature,
34 'channel': 'canary',
35 'platform': platform,
36 'process_type': 'browser',
37 }
38
39 pass_check, _ = findit_for_client.CheckPolicyForClient(
40 crash_identifiers, chrome_version, signature,
41 CrashClient.FRACAS, platform, 'stack_trace', {'channel': 'canary'})
42 self.assertFalse(pass_check)
43
44 def testCheckPolicyBlacklistedSignature(self):
45 chrome_version = '1'
46 signature = 'Blacklist marker signature'
47 platform = 'win'
48 crash_identifiers = {
49 'chrome_version': chrome_version,
50 'signature': signature,
51 'channel': 'canary',
52 'platform': platform,
53 'process_type': 'browser',
54 }
55
56 pass_check, _ = findit_for_client.CheckPolicyForClient(
57 crash_identifiers, chrome_version, signature,
58 CrashClient.FRACAS, platform, 'stack_trace', {'channel': 'canary'})
59 self.assertFalse(pass_check)
60
61 def testCheckPolicyPlatformRename(self):
62 chrome_version = '1'
63 signature = 'signature'
64 platform = 'linux'
65 crash_identifiers = {
66 'chrome_version': chrome_version,
67 'signature': signature,
68 'channel': 'canary',
69 'platform': platform,
70 'process_type': 'browser',
71 }
72
73 pass_check, args = findit_for_client.CheckPolicyForClient(
74 crash_identifiers, chrome_version, signature,
75 CrashClient.FRACAS, platform, 'stack_trace', {'channel': 'canary'})
76 self.assertTrue(pass_check)
77 self.assertEqual(args[4], 'unix')
78
79 def testGetAnalysisForClient(self):
80 crash_identifiers = {'signature': 'sig'}
81 analysis = FracasCrashAnalysis.Create(crash_identifiers)
82 analysis.put()
83
84 self.assertEqual(findit_for_client.GetAnalysisForClient(
85 crash_identifiers, CrashClient.FRACAS), analysis)
86
87 def testGetAnalysisForUnsuportedClient(self):
88 crash_identifiers = {'signature': 'sig'}
89 analysis = FracasCrashAnalysis.Create(crash_identifiers)
90 analysis.put()
91
92 self.assertIsNone(findit_for_client.GetAnalysisForClient(
93 crash_identifiers, 'Unsupported_client'), analysis)
94
95 def testResetAnalysisForFracas(self):
96 chrome_version = '1'
97 signature = 'signature'
98 platform = 'linux'
99 stack_trace = 'stack_trace'
100 crash_identifiers = {
101 'chrome_version': chrome_version,
102 'signature': signature,
103 'channel': 'canary',
104 'platform': platform,
105 'process_type': 'browser',
106 }
107 customized_data = {'channel': 'canary'}
108 regression_range = ['53.0.1235.1', '53.0.1235.1']
109
110 analysis = FracasCrashAnalysis.Create(crash_identifiers)
111
112 findit_for_client.ResetAnalysis(
113 analysis, chrome_version, signature, CrashClient.FRACAS, platform,
114 stack_trace, customized_data, regression_range)
115
116 analysis = FracasCrashAnalysis.Get(crash_identifiers)
117 self.assertEqual(analysis.crashed_version, chrome_version)
118 self.assertEqual(analysis.signature, signature)
119 self.assertEqual(analysis.platform, platform)
120 self.assertEqual(analysis.stack_trace, stack_trace)
121 self.assertEqual(analysis.channel, customized_data['channel'])
122 self.assertEqual(analysis.regression_range, regression_range)
123
124 def testCreateAnalysisForClient(self):
125 crash_identifiers = {'signature': 'sig'}
126 self.assertIsNotNone(findit_for_client.CreateAnalysisForClient(
127 crash_identifiers, CrashClient.FRACAS))
128
129 def testCreateAnalysisForUnsupportedClientId(self):
130 crash_identifiers = {'signature': 'sig'}
131 self.assertIsNone(findit_for_client.CreateAnalysisForClient(
132 crash_identifiers, 'unsupported_id'))
133
134 def testGetPublishResultFromAnalysisFoundTrue(self):
135 mock_host = 'https://host.com'
136 self.mock(app_identity, 'get_default_version_hostname', lambda: mock_host)
137
138 analysis_result = {
139 'found': True,
140 'suspected_cls': [
141 {'confidence': 0.21434,
142 'reason': ['reason1', 'reason2'],
143 'other': 'data'}
144 ],
145 'other_data': 'data',
146 }
147
148 processed_analysis_result = copy.deepcopy(analysis_result)
149 processed_analysis_result['feedback_url'] = (
150 mock_host + '/crash/fracas-result-feedback?'
151 'key=agx0ZXN0YmVkLXRlc3RyQQsSE0ZyYWNhc0NyYXNoQW5hbHlzaXMiKDMzNTY5MDU3'
152 'M2ZlYTFlZGZhMjViOTVjZmI4OGZhODFlNDk0YTEyODkM')
153
154 for cl in processed_analysis_result['suspected_cls']:
155 cl['confidence'] = round(cl['confidence'], 2)
156 cl.pop('reason', None)
157
158 crash_identifiers = {'signature': 'sig'}
159 expected_messages_data = {
160 'crash_identifiers': crash_identifiers,
161 'client_id': CrashClient.FRACAS,
162 'result': processed_analysis_result,
163 }
164
165 analysis = FracasCrashAnalysis.Create(crash_identifiers)
166 analysis.client_id = CrashClient.FRACAS
167 analysis.result = analysis_result
168
169 self.assertEqual(findit_for_client.GetPublishResultFromAnalysis(
170 analysis, crash_identifiers,
171 CrashClient.FRACAS), expected_messages_data)
172
173 def testGetPublishResultFromAnalysisFoundFalse(self):
174 mock_host = 'https://host.com'
175 self.mock(app_identity, 'get_default_version_hostname', lambda: mock_host)
176
177 analysis_result = {
178 'found': False,
179 }
180
181 processed_analysis_result = copy.deepcopy(analysis_result)
182 processed_analysis_result['feedback_url'] = (
183 mock_host + '/crash/fracas-result-feedback?'
184 'key=agx0ZXN0YmVkLXRlc3RyQQsSE0ZyYWNhc0NyYXNoQW5hbHlzaXMiKDMzNTY5MDU3'
185 'M2ZlYTFlZGZhMjViOTVjZmI4OGZhODFlNDk0YTEyODkM')
186
187 crash_identifiers = {'signature': 'sig'}
188 expected_messages_data = {
189 'crash_identifiers': crash_identifiers,
190 'client_id': CrashClient.FRACAS,
191 'result': processed_analysis_result,
192 }
193
194 analysis = FracasCrashAnalysis.Create(crash_identifiers)
195 analysis.client_id = CrashClient.FRACAS
196 analysis.result = analysis_result
197
198 self.assertEqual(findit_for_client.GetPublishResultFromAnalysis(
199 analysis, crash_identifiers,
200 CrashClient.FRACAS), expected_messages_data)
201
202 def testFindCulprit(self):
203 expected_result = {'found': False}
204 expected_tags = {'found_suspects': False,
205 'has_regression_range': False}
206
207 class _MockFinditForChromeCrash(object):
208 def __init__(self, *_):
209 pass
210 def FindCulprit(self, *_):
211 return expected_result, expected_tags
212 self.mock(findit_for_chromecrash, 'FinditForChromeCrash',
213 _MockFinditForChromeCrash)
214
215 analysis = FracasCrashAnalysis.Create({'signature': 'sig'})
216 analysis.client_id = CrashClient.FRACAS
217
218 result, tags = findit_for_client.FindCulprit(analysis)
219 self.assertEqual(result, expected_result)
220 self.assertEqual(tags, expected_tags)
221
222 analysis.client_id = 'unsupported_client'
223 result, tags = findit_for_client.FindCulprit(analysis)
224 self.assertEqual(result, expected_result)
225 self.assertEqual(tags, expected_tags)
226
227
228 def testGetRegressionRange(self):
229 expected_regression_range = ['51.0.1233.1', '51.0.1233.2']
230 def _MockDetectRegressionRange(*_):
231 return expected_regression_range
232
233 self.mock(detect_regression_range, 'DetectRegressionRange',
234 _MockDetectRegressionRange)
235 historical_metadata = [{'chrome_version': '51.0.1233.0', 'cpm': 0},
236 {'chrome_version': '51.0.1233.1', 'cpm': 0},
237 {'chrome_version': '51.0.1233.2', 'cpm': 0.89}]
238
239 regression_range = findit_for_client.GetRegressionRange(
240 CrashClient.FRACAS, {'historical_metadata': historical_metadata})
241 self.assertEqual(regression_range, expected_regression_range)
242
243 regression_range = findit_for_client.GetRegressionRange(
244 'unsupported_client', {'historical_metadata': historical_metadata})
245 self.assertEqual(regression_range, None)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698