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

Side by Side Diff: appengine/findit/crash/test/chrome_crash_data_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
« no previous file with comments | « appengine/findit/crash/crash_data.py ('k') | appengine/findit/crash/test/crash_data_test.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 # Copyright 2017 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 mock
6
7 from common.chrome_dependency_fetcher import ChromeDependencyFetcher
8 from common.dependency import Dependency
9 from common.dependency import DependencyRoll
10 from crash.chromecrash_parser import ChromeCrashParser
11 from crash.chrome_crash_data import ChromeCrashData
12 from crash.crash_report import CrashReport
13 from crash.stacktrace import CallStack
14 from crash.stacktrace import StackFrame
15 from crash.stacktrace import Stacktrace
16 from crash.test.predator_testcase import PredatorTestCase
17 from crash.test.stacktrace_test_suite import StacktraceTestSuite
18
19
20 class ChromeCrashDataTest(StacktraceTestSuite):
21 """Tests ``ChromeCrashData`` class."""
22
23 def testProperties(self):
24 """Tests ``ChromeCrashData`` specific properties."""
25 raw_crash_data = self.GetDummyCrashData()
26 crash_data = ChromeCrashData(raw_crash_data, None)
27 self.assertEqual(crash_data.channel,
28 raw_crash_data['customized_data']['channel'])
29 self.assertEqual(crash_data.historical_metadata,
30 raw_crash_data['customized_data']['historical_metadata'])
31
32 def testParseStacktraceFailed(self):
33 """Tests that ``stacktrace`` is None when failed to pars stacktrace."""
34 self.mock(ChromeDependencyFetcher, 'GetDependency', lambda *_: {})
35 crash_data = ChromeCrashData(
36 self.GetDummyCrashData(),
37 ChromeDependencyFetcher(self.GetMockRepoFactory()))
38 self.mock(ChromeCrashParser, 'Parse', lambda *args, **kwargs: None)
39 self.assertIsNone(crash_data.stacktrace)
40
41 def testParseStacktraceSucceeded(self):
42 """Tests parsing ``stacktrace``."""
43 self.mock(ChromeDependencyFetcher, 'GetDependency', lambda *_: {})
44 crash_data = ChromeCrashData(
45 self.GetDummyCrashData(),
46 ChromeDependencyFetcher(self.GetMockRepoFactory()))
47 stack = CallStack(0)
48 stacktrace = Stacktrace([stack], stack)
49 self.mock(ChromeCrashParser, 'Parse',
50 lambda *args, **kwargs: stacktrace)
51 self._VerifyTwoStacktracesEqual(crash_data.stacktrace, stacktrace)
52
53 def testParseStacktraceReturnsCache(self):
54 """Tests that ``stacktrace`` returns cached ``_stacktrace`` value."""
55 crash_data = ChromeCrashData(self.GetDummyCrashData(), None)
56 stack = CallStack(1)
57 stacktrace = Stacktrace([stack], stack)
58 crash_data._stacktrace = stacktrace
59 self._VerifyTwoStacktracesEqual(crash_data.stacktrace, stacktrace)
60
61 def testDetectRegressionRangeFailed(self):
62 """Tests that ``regression_range`` is None when detection failed."""
63 crash_data = ChromeCrashData(
64 self.GetDummyCrashData(),
65 ChromeDependencyFetcher(self.GetMockRepoFactory()))
66
67 with mock.patch('crash.detect_regression_range.DetectRegressionRange',
68 lambda *_: None):
69 self.assertIsNone(crash_data.regression_range)
70
71 def testDetectRegressionRangeSucceeded(self):
72 """Tests detecting ``regression_range``."""
73 crash_data = ChromeCrashData(
74 self.GetDummyCrashData(),
75 ChromeDependencyFetcher(self.GetMockRepoFactory()))
76
77 regression_range = ('1', '3')
78 with mock.patch('crash.detect_regression_range.DetectRegressionRange',
79 lambda *_: regression_range):
80 self.assertEqual(crash_data.regression_range, regression_range)
81
82 def testDetectRegressionRangeReturnsCache(self):
83 """Tests that ``regression_range`` returns cached ``_regression_range``."""
84 crash_data = ChromeCrashData(self.GetDummyCrashData(), None)
85 regression_range = ('1', '5')
86 crash_data._regression_range = regression_range
87 self.assertEqual(crash_data.regression_range, regression_range)
88
89 def testCrashedVersionDepsReturnsCache(self):
90 """Tests that ``_CrashedVersionDeps`` returns cached value."""
91 crash_data = ChromeCrashData(self.GetDummyCrashData(), None)
92 crashed_version_deps = {'src/': Dependency('src/', 'https://repo', 'rev')}
93 crash_data._crashed_version_deps = crashed_version_deps
94 self.assertEqual(crash_data._CrashedVersionDeps(), crashed_version_deps)
95
96 def testDependencies(self):
97 """Tests that ``dependencies`` returns filtered ``_CrashedVersionDeps``."""
98 crash_data = ChromeCrashData(self.GetDummyCrashData(), None)
99
100 chromium_dep = Dependency('src/', 'https://repo', 'rev1')
101 crash_data._crashed_version_deps = {
102 chromium_dep.path: chromium_dep,
103 'src/dummy': Dependency('src/dummy', 'https://r', 'rev2')}
104 stack = CallStack(0, frame_list=[
105 StackFrame(0, 'src/', 'func', 'a.cc', 'src/a.cc', [5])])
106 stacktrace = Stacktrace([stack], stack)
107 crash_data._stacktrace = stacktrace
108 self.assertEqual(crash_data.dependencies,
109 {chromium_dep.path: chromium_dep})
110
111 def testDependenciesReturnsCache(self):
112 """Tests that ``dependencies`` returns cached ``_dependencies`` value."""
113 crash_data = ChromeCrashData(self.GetDummyCrashData(), None)
114 crashed_version_deps = {'src/': Dependency('src/', 'https://repo', 'rev')}
115 crash_data._dependencies = crashed_version_deps
116 self.assertEqual(crash_data.dependencies, crashed_version_deps)
117
118 def testDependencyRollsReturnsCache(self):
119 """Tests that ``dependency_rolls`` returns cached ``_dependency_rolls``."""
120 crash_data = ChromeCrashData(self.GetDummyCrashData(), None)
121 dep_roll = {'src/': DependencyRoll('src/', 'https://repo', 'rev0', 'rev3')}
122 crash_data._dependency_rolls = dep_roll
123 self.assertEqual(crash_data.dependency_rolls, dep_roll)
124
125 def testDependencyRollsWhenRegressionRangeIsEmpty(self):
126 """Tests that ``regression_rolls`` is {} when regression_range is empty."""
127 crash_data = ChromeCrashData(self.GetDummyCrashData(), None)
128 crash_data._regression_range = None
129 self.assertEqual(crash_data.dependency_rolls, {})
130
131 def testDependencyRoll(self):
132 """Tests parsing ``regression_rolls`` from regression_range."""
133 dep_roll = DependencyRoll('src/', 'https://repo', 'rev1', 'rev6')
134 regression_rolls = {
135 dep_roll.path: dep_roll,
136 'src/dummy': DependencyRoll('src/dummy', 'https://r', 'rev2', 'rev4'),
137 'src/add': DependencyRoll('src/add', 'https://rr', None, 'rev5')
138 }
139
140 self.mock(ChromeDependencyFetcher, 'GetDependencyRollsDict',
141 lambda *_: regression_rolls)
142 crash_data = ChromeCrashData(
143 self.GetDummyCrashData(),
144 ChromeDependencyFetcher(self.GetMockRepoFactory()))
145
146 crash_data._regression_range = ('rev1', 'rev6')
147 chromium_dep = Dependency('src/', 'https://repo', 'rev1')
148 crash_data._crashed_version_deps = {
149 chromium_dep.path: chromium_dep,
150 'src/dummy': Dependency('src/dummy', 'https://r', 'rev2')}
151 stack = CallStack(0, frame_list=[
152 StackFrame(0, 'src/', 'func', 'a.cc', 'src/a.cc', [5])])
153 stacktrace = Stacktrace([stack], stack)
154 crash_data._stacktrace = stacktrace
155
156 self.assertEqual(crash_data.dependency_rolls, {dep_roll.path: dep_roll})
OLDNEW
« no previous file with comments | « appengine/findit/crash/crash_data.py ('k') | appengine/findit/crash/test/crash_data_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698