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

Side by Side Diff: appengine/findit/waterfall/test/process_flake_swarming_task_result_pipeline_test.py

Issue 2597373002: [Findit] Flake checker: Get full build info for each flake build analyzed (Closed)
Patch Set: Removing incorrect line Created 3 years, 11 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/waterfall/test/process_base_swarming_task_result_pipeline_test.py ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 datetime 5 import datetime
6 import json
7 import mock 6 import mock
8 7
9 from model import analysis_status 8 from model import analysis_status
10 from model.flake.flake_swarming_task import FlakeSwarmingTask 9 from model.flake.flake_swarming_task import FlakeSwarmingTask
11 from model.flake.master_flake_analysis import MasterFlakeAnalysis 10 from model.flake.master_flake_analysis import MasterFlakeAnalysis
12 from model.wf_build import WfBuild
13 from waterfall import build_util 11 from waterfall import build_util
14 from waterfall import swarming_util 12 from waterfall import swarming_util
15 from waterfall import ( 13 from waterfall.build_info import BuildInfo
16 process_flake_swarming_task_result_pipeline as flake_result_pipeline)
17 from waterfall.process_flake_swarming_task_result_pipeline import ( 14 from waterfall.process_flake_swarming_task_result_pipeline import (
18 ProcessFlakeSwarmingTaskResultPipeline) 15 ProcessFlakeSwarmingTaskResultPipeline)
19 from waterfall.test import ( 16 from waterfall.test import (
20 process_base_swarming_task_result_pipeline_test as base_test) 17 process_base_swarming_task_result_pipeline_test as base_test)
21 from waterfall.test import wf_testcase 18 from waterfall.test import wf_testcase
22 19
23 20
24 class ProcessFlakeSwarmingTaskResultPipelineTest(wf_testcase.WaterfallTestCase): 21 class ProcessFlakeSwarmingTaskResultPipelineTest(wf_testcase.WaterfallTestCase):
25 22
26 def _MockedGetSwarmingTaskResultById(self, task_id, _): 23 def _MockedGetSwarmingTaskResultById(self, task_id, _):
27 return base_test._SWARMING_TASK_RESULTS[task_id], None 24 return base_test._SWARMING_TASK_RESULTS[task_id], None
28 25
29 def setUp(self): 26 def setUp(self):
30 super(ProcessFlakeSwarmingTaskResultPipelineTest, self).setUp() 27 super(ProcessFlakeSwarmingTaskResultPipelineTest, self).setUp()
31 self.pipeline = ProcessFlakeSwarmingTaskResultPipeline() 28 self.pipeline = ProcessFlakeSwarmingTaskResultPipeline()
32 self.master_name = 'm' 29 self.master_name = 'm'
33 self.builder_name = 'b' 30 self.builder_name = 'b'
34 self.build_number = 121 31 self.build_number = 121
35 self.step_name = 'abc_tests on platform' 32 self.step_name = 'abc_tests on platform'
36 self.test_name = 'TestSuite1.test1' 33 self.test_name = 'TestSuite1.test1'
37 self.version_number = 1 34 self.version_number = 1
38 self.mock(swarming_util, 'GetSwarmingTaskResultById', 35 self.mock(swarming_util, 'GetSwarmingTaskResultById',
39 self._MockedGetSwarmingTaskResultById) 36 self._MockedGetSwarmingTaskResultById)
40 37
41 @mock.patch.object(flake_result_pipeline, 38 @mock.patch.object(build_util, 'GetBuildInfo')
42 '_GetCommitPositionAndGitHash', 39 def testCheckTestsRunStatuses(self, mocked_fn):
43 return_value=(12345, 'git_hash')) 40 build_info = BuildInfo(
44 def testCheckTestsRunStatuses(self, _): 41 self.master_name, self.build_number, self.build_number)
42 build_info.commit_position = 12345
43 build_info.chromium_revision = 'a1b2c3d4'
44 mocked_fn.return_value = build_info
45 analysis = MasterFlakeAnalysis.Create( 45 analysis = MasterFlakeAnalysis.Create(
46 self.master_name, self.builder_name, 46 self.master_name, self.builder_name,
47 self.build_number, self.step_name, self.test_name) 47 self.build_number, self.step_name, self.test_name)
48 analysis.Save() 48 analysis.Save()
49 49
50 task = FlakeSwarmingTask.Create( 50 task = FlakeSwarmingTask.Create(
51 self.master_name, self.builder_name, 51 self.master_name, self.builder_name,
52 self.build_number, self.step_name, self.test_name) 52 self.build_number, self.step_name, self.test_name)
53 task.put() 53 task.put()
54 54
55 call_params = ProcessFlakeSwarmingTaskResultPipeline._GetArgs( 55 call_params = ProcessFlakeSwarmingTaskResultPipeline._GetArgs(
56 self.pipeline, self.master_name, self.builder_name, 56 self.pipeline, self.master_name, self.builder_name,
57 self.build_number, self.step_name, self.build_number, 57 self.build_number, self.step_name, self.build_number,
58 self.test_name, self.version_number) 58 self.test_name, self.version_number)
59 59
60 tests_statuses = ( 60 tests_statuses = (
61 ProcessFlakeSwarmingTaskResultPipeline._CheckTestsRunStatuses( 61 ProcessFlakeSwarmingTaskResultPipeline._CheckTestsRunStatuses(
62 self.pipeline, 62 self.pipeline,
63 base_test._SAMPLE_FAILURE_LOG, *call_params)) 63 base_test._SAMPLE_FAILURE_LOG, *call_params))
64 self.assertEqual(base_test._EXPECTED_TESTS_STATUS, tests_statuses) 64 self.assertEqual(base_test._EXPECTED_TESTS_STATUS, tests_statuses)
65 65
66 @mock.patch.object(flake_result_pipeline, 66 @mock.patch.object(build_util, 'GetBuildInfo')
67 '_GetCommitPositionAndGitHash', 67 def testCheckTestsRunStatusesZeroBuildNumber(self, mocked_fn):
68 return_value=(12345, 'git_hash')) 68 build_info = BuildInfo(self.master_name, self.build_number, 0)
69 def testCheckTestsRunStatusesWhenTestDoesNotExist(self, _): 69 build_info.commit_position = 12345
70 build_info.chromium_revision = 'a1b2c3d4'
71 mocked_fn.return_value = build_info
72
73 analysis = MasterFlakeAnalysis.Create(
74 self.master_name, self.builder_name, 0, self.step_name, self.test_name)
75 analysis.Save()
76
77 task = FlakeSwarmingTask.Create(
78 self.master_name, self.builder_name, 0, self.step_name, self.test_name)
79 task.put()
80
81 ProcessFlakeSwarmingTaskResultPipeline()._CheckTestsRunStatuses(
82 {}, self.master_name, self.builder_name, 0, self.step_name, 0,
83 self.test_name, 1)
84 self.assertIsNone(analysis.data_points[0].previous_build_commit_position)
85
86 @mock.patch.object(build_util, 'GetBuildInfo')
87 def testCheckTestsRunStatusesWhenTestDoesNotExist(self, mocked_fn):
88 build_info = BuildInfo(
89 self.master_name, self.builder_name, self.build_number)
90 build_info.commit_position = 12345
91 build_info.chromium_revision = 'a1b2c3d4'
92 mocked_fn.return_value = build_info
93
70 test_name = 'TestSuite1.new_test' 94 test_name = 'TestSuite1.new_test'
71 analysis = MasterFlakeAnalysis.Create( 95 analysis = MasterFlakeAnalysis.Create(
72 self.master_name, self.builder_name, 96 self.master_name, self.builder_name,
73 self.build_number, self.step_name, test_name) 97 self.build_number, self.step_name, test_name)
74 analysis.Save() 98 analysis.Save()
75 99
76 task = FlakeSwarmingTask.Create( 100 task = FlakeSwarmingTask.Create(
77 self.master_name, self.builder_name, 101 self.master_name, self.builder_name,
78 self.build_number, self.step_name, test_name) 102 self.build_number, self.step_name, test_name)
79 task.put() 103 task.put()
(...skipping 12 matching lines...) Expand all
92 self.assertEqual(0, task.tries) 116 self.assertEqual(0, task.tries)
93 self.assertEqual(0, task.successes) 117 self.assertEqual(0, task.successes)
94 118
95 analysis = MasterFlakeAnalysis.GetVersion( 119 analysis = MasterFlakeAnalysis.GetVersion(
96 self.master_name, self.builder_name, 120 self.master_name, self.builder_name,
97 self.build_number, self.step_name, test_name, self.version_number) 121 self.build_number, self.step_name, test_name, self.version_number)
98 self.assertTrue(analysis.data_points[-1].pass_rate < 0) 122 self.assertTrue(analysis.data_points[-1].pass_rate < 0)
99 123
100 @mock.patch.object(swarming_util, 'GetSwarmingTaskFailureLog', 124 @mock.patch.object(swarming_util, 'GetSwarmingTaskFailureLog',
101 return_value=(base_test._SAMPLE_FAILURE_LOG, None)) 125 return_value=(base_test._SAMPLE_FAILURE_LOG, None))
102 @mock.patch.object(flake_result_pipeline, 126 @mock.patch.object(build_util, 'GetBuildInfo',
103 '_GetCommitPositionAndGitHash', 127 return_value=BuildInfo('m', 'b', 123))
104 return_value=(12345, 'git_hash'))
105 def testProcessFlakeSwarmingTaskResultPipeline(self, *_): 128 def testProcessFlakeSwarmingTaskResultPipeline(self, *_):
106 # End to end test. 129 # End to end test.
107 task = FlakeSwarmingTask.Create( 130 task = FlakeSwarmingTask.Create(
108 self.master_name, self.builder_name, 131 self.master_name, self.builder_name,
109 self.build_number, self.step_name, self.test_name) 132 self.build_number, self.step_name, self.test_name)
110 task.task_id = 'task_id1' 133 task.task_id = 'task_id1'
111 task.put() 134 task.put()
112 135
113 analysis = MasterFlakeAnalysis.Create( 136 analysis = MasterFlakeAnalysis.Create(
114 self.master_name, self.builder_name, 137 self.master_name, self.builder_name,
(...skipping 15 matching lines...) Expand all
130 153
131 self.assertEqual(analysis_status.COMPLETED, task.status) 154 self.assertEqual(analysis_status.COMPLETED, task.status)
132 self.assertEqual(base_test._EXPECTED_TESTS_STATUS, task.tests_statuses) 155 self.assertEqual(base_test._EXPECTED_TESTS_STATUS, task.tests_statuses)
133 156
134 self.assertEqual(datetime.datetime(2016, 2, 10, 18, 32, 6, 538220), 157 self.assertEqual(datetime.datetime(2016, 2, 10, 18, 32, 6, 538220),
135 task.created_time) 158 task.created_time)
136 self.assertEqual(datetime.datetime(2016, 2, 10, 18, 32, 9, 90550), 159 self.assertEqual(datetime.datetime(2016, 2, 10, 18, 32, 9, 90550),
137 task.started_time) 160 task.started_time)
138 self.assertEqual(datetime.datetime(2016, 2, 10, 18, 33, 9), 161 self.assertEqual(datetime.datetime(2016, 2, 10, 18, 33, 9),
139 task.completed_time) 162 task.completed_time)
140
141 @mock.patch.object(build_util, '_BuildDataNeedUpdating', return_value=False)
142 def testGetCommitPositionAndGitHash(self, _):
143 build = WfBuild.Create('m', 'b', 123)
144 build.data = json.dumps({
145 'properties': [
146 ['got_revision', 'a_git_hash'],
147 ['got_revision_cp', 'refs/heads/master@{#12345}']
148 ],
149 })
150 build.put()
151 self.assertEqual(
152 (12345, 'a_git_hash'),
153 flake_result_pipeline._GetCommitPositionAndGitHash('m', 'b', 123))
154 self.assertEqual(
155 (None, None),
156 flake_result_pipeline._GetCommitPositionAndGitHash('m', 'b', -1))
157
158 @mock.patch.object(build_util, '_BuildDataNeedUpdating', return_value=False)
159 def testGetCommitPositionAndGitHashNoBuildDataAvailable(self, _):
160 build = WfBuild.Create('m', 'b', 123)
161 build.data = {}
162 build.put()
163
164 self.assertEqual(
165 (None, None),
166 flake_result_pipeline._GetCommitPositionAndGitHash('m', 'b', 123))
167
168 @mock.patch.object(flake_result_pipeline,
169 '_GetCommitPositionAndGitHash',
170 return_value=(12345, 'git_hash'))
171 def testNoGitHashForPreviousBuildNumberIfZero(self, _):
172 analysis = MasterFlakeAnalysis.Create(
173 self.master_name, self.builder_name, 0, self.step_name, self.test_name)
174 analysis.Save()
175
176 task = FlakeSwarmingTask.Create(
177 self.master_name, self.builder_name, 0, self.step_name, self.test_name)
178 task.put()
179
180 call_params = ProcessFlakeSwarmingTaskResultPipeline._GetArgs(
181 self.pipeline, self.master_name, self.builder_name, 0, self.step_name,
182 0, self.test_name, self.version_number)
183
184 ProcessFlakeSwarmingTaskResultPipeline._CheckTestsRunStatuses(
185 self.pipeline, base_test._SAMPLE_FAILURE_LOG, *call_params)
186
187 self.assertIsNone(analysis.data_points[0].previous_build_commit_position)
188 self.assertIsNone(analysis.data_points[0].previous_build_git_hash)
OLDNEW
« no previous file with comments | « appengine/findit/waterfall/test/process_base_swarming_task_result_pipeline_test.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698