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

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

Issue 2299883005: [Findit] Add findit_for_client to do analysis based on client_id (Closed)
Patch Set: Address comments. Created 4 years, 3 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 findit_for_client
11 from crash import findit_for_chromecrash
12 from crash.test.crash_testcase import CrashTestCase
13 from crash.type_enums import CrashClient
14 from model.crash.fracas_crash_analysis import FracasCrashAnalysis
15
16
17 class FinditForClientTest(CrashTestCase):
18
19 def testCheckPolicyUnsupportedPlatform(self):
20 chrome_version = '1'
21 signature = 'signature'
22 platform = 'unsupported_platform'
23 crash_identifiers = {
24 'chrome_version': chrome_version,
25 'signature': signature,
26 'channel': 'canary',
27 'platform': platform,
28 'process_type': 'browser',
29 }
30
31 pass_check, _ = findit_for_client.CheckPolicyForClient(
32 crash_identifiers, chrome_version, signature,
33 CrashClient.FRACAS, platform, 'stack_trace', {'channel': 'canary'})
34 self.assertFalse(pass_check)
35
36 def testCheckPolicyBlacklistedSignature(self):
37 chrome_version = '1'
38 signature = 'Blacklist marker signature'
39 platform = 'win'
40 crash_identifiers = {
41 'chrome_version': chrome_version,
42 'signature': signature,
43 'channel': 'canary',
44 'platform': platform,
45 'process_type': 'browser',
46 }
47
48 pass_check, _ = findit_for_client.CheckPolicyForClient(
49 crash_identifiers, chrome_version, signature,
50 CrashClient.FRACAS, platform, 'stack_trace', {'channel': 'canary'})
51 self.assertFalse(pass_check)
52
53 def testCheckPolicyPlatformRename(self):
54 chrome_version = '1'
55 signature = 'signature'
56 platform = 'linux'
57 crash_identifiers = {
58 'chrome_version': chrome_version,
59 'signature': signature,
60 'channel': 'canary',
61 'platform': platform,
62 'process_type': 'browser',
63 }
64
65 pass_check, args = findit_for_client.CheckPolicyForClient(
66 crash_identifiers, chrome_version, signature,
67 CrashClient.FRACAS, platform, 'stack_trace', {'channel': 'canary'})
68 self.assertTrue(pass_check)
69 self.assertEqual(args[4], 'unix')
70
71 def testGetAnalysisForClient(self):
72 crash_identifiers = {'signature': 'sig'}
73 analysis = FracasCrashAnalysis.Create(crash_identifiers)
74 analysis.put()
75
76 self.assertEqual(findit_for_client.GetAnalysisForClient(
77 crash_identifiers, CrashClient.FRACAS), analysis)
78
79 def testGetAnalysisForUnsuportedClient(self):
80 crash_identifiers = {'signature': 'sig'}
81 analysis = FracasCrashAnalysis.Create(crash_identifiers)
82 analysis.put()
83
84 self.assertIsNone(findit_for_client.GetAnalysisForClient(
85 crash_identifiers, 'Unsupported_client'), analysis)
86
87 def testSetAnalysisForFracas(self):
88 chrome_version = '1'
89 signature = 'signature'
90 platform = 'linux'
91 stack_trace = 'stack_trace'
92 crash_identifiers = {
93 'chrome_version': chrome_version,
94 'signature': signature,
95 'channel': 'canary',
96 'platform': platform,
97 'process_type': 'browser',
98 }
99 customized_data = {'channel': 'canary'}
100
101 analysis = FracasCrashAnalysis.Create(crash_identifiers)
102
103 findit_for_client.SetAnalysis(
104 analysis, chrome_version, signature, CrashClient.FRACAS, platform,
105 stack_trace, customized_data)
106
107 analysis = FracasCrashAnalysis.Get(crash_identifiers)
108 self.assertEqual(analysis.crashed_version, chrome_version)
109 self.assertEqual(analysis.signature, signature)
110 self.assertEqual(analysis.platform, platform)
111 self.assertEqual(analysis.stack_trace, stack_trace)
112 self.assertEqual(analysis.channel, customized_data['channel'])
113
114 def testCreateAnalysisForClient(self):
115 crash_identifiers = {'signature': 'sig'}
116 self.assertIsNotNone(findit_for_client.CreateAnalysisForClient(
117 crash_identifiers, CrashClient.FRACAS))
118
119 def testCreateAnalysisForUnsupportedClientId(self):
120 crash_identifiers = {'signature': 'sig'}
121 self.assertIsNone(findit_for_client.CreateAnalysisForClient(
122 crash_identifiers, 'unsupported_id'))
123
124 def testGetPublishResultFromAnalysisFoundTrue(self):
125 mock_host = 'https://host.com'
126 self.mock(app_identity, 'get_default_version_hostname', lambda: mock_host)
127
128 analysis_result = {
129 'found': True,
130 'suspected_cls': [
131 {'confidence': 0.21434,
132 'reason': ['reason1', 'reason2'],
133 'other': 'data'}
134 ],
135 'other_data': 'data',
136 }
137
138 processed_analysis_result = copy.deepcopy(analysis_result)
139 processed_analysis_result['feedback_url'] = (
140 mock_host + '/crash/fracas-result-feedback?'
141 'key=agx0ZXN0YmVkLXRlc3RyQQsSE0ZyYWNhc0NyYXNoQW5hbHlzaXMiKDMzNTY5MDU3'
142 'M2ZlYTFlZGZhMjViOTVjZmI4OGZhODFlNDk0YTEyODkM')
143
144 for cl in processed_analysis_result['suspected_cls']:
145 cl['confidence'] = round(cl['confidence'], 2)
146 cl.pop('reason', None)
147
148 crash_identifiers = {'signature': 'sig'}
149 expected_messages_data = {
150 'crash_identifiers': crash_identifiers,
151 'client_id': CrashClient.FRACAS,
152 'result': processed_analysis_result,
153 }
154
155 analysis = FracasCrashAnalysis.Create(crash_identifiers)
156 analysis.client_id = CrashClient.FRACAS
157 analysis.result = analysis_result
158
159 self.assertEqual(findit_for_client.GetPublishResultFromAnalysis(
160 analysis, crash_identifiers,
161 CrashClient.FRACAS), expected_messages_data)
162
163 def testGetPublishResultFromAnalysisFoundFalse(self):
164 mock_host = 'https://host.com'
165 self.mock(app_identity, 'get_default_version_hostname', lambda: mock_host)
166
167 analysis_result = {
168 'found': False,
169 }
170
171 processed_analysis_result = copy.deepcopy(analysis_result)
172 processed_analysis_result['feedback_url'] = (
173 mock_host + '/crash/fracas-result-feedback?'
174 'key=agx0ZXN0YmVkLXRlc3RyQQsSE0ZyYWNhc0NyYXNoQW5hbHlzaXMiKDMzNTY5MDU3'
175 'M2ZlYTFlZGZhMjViOTVjZmI4OGZhODFlNDk0YTEyODkM')
176
177 crash_identifiers = {'signature': 'sig'}
178 expected_messages_data = {
179 'crash_identifiers': crash_identifiers,
180 'client_id': CrashClient.FRACAS,
181 'result': processed_analysis_result,
182 }
183
184 analysis = FracasCrashAnalysis.Create(crash_identifiers)
185 analysis.client_id = CrashClient.FRACAS
186 analysis.result = analysis_result
187
188 self.assertEqual(findit_for_client.GetPublishResultFromAnalysis(
189 analysis, crash_identifiers,
190 CrashClient.FRACAS), expected_messages_data)
191
192 def testFindCulprit(self):
193 expected_result = {'found': False}
194 expected_tags = {'found_suspects': False,
195 'has_regression_range': False}
196
197 def _MockFindCulpritForChromeCrash(*_):
198 return expected_result, expected_tags
199
200 self.mock(findit_for_chromecrash, 'FindCulpritForChromeCrash',
201 _MockFindCulpritForChromeCrash)
202
203 analysis = FracasCrashAnalysis.Create({'signature': 'sig'})
204 analysis.client_id = CrashClient.FRACAS
205
206 result, tags = findit_for_client.FindCulprit(analysis)
207 self.assertEqual(result, expected_result)
208 self.assertEqual(tags, expected_tags)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698