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

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

Issue 2563383002: [Findit] Flake Checker: Extract commit position and git hash and display to UI for each analyzed bu… (Closed)
Patch Set: Fixing nit Created 4 years 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 8
7 from model import analysis_status 9 from model import analysis_status
8 from model.flake.flake_swarming_task import FlakeSwarmingTask 10 from model.flake.flake_swarming_task import FlakeSwarmingTask
9 from model.flake.master_flake_analysis import MasterFlakeAnalysis 11 from model.flake.master_flake_analysis import MasterFlakeAnalysis
12 from model.wf_build import WfBuild
13 from waterfall import build_util
10 from waterfall import swarming_util 14 from waterfall import swarming_util
15 from waterfall import (
16 process_flake_swarming_task_result_pipeline as flake_result_pipeline)
11 from waterfall.process_flake_swarming_task_result_pipeline import ( 17 from waterfall.process_flake_swarming_task_result_pipeline import (
12 ProcessFlakeSwarmingTaskResultPipeline) 18 ProcessFlakeSwarmingTaskResultPipeline)
13 from waterfall.test import ( 19 from waterfall.test import (
14 process_base_swarming_task_result_pipeline_test as base_test) 20 process_base_swarming_task_result_pipeline_test as base_test)
15 from waterfall.test import wf_testcase 21 from waterfall.test import wf_testcase
16 22
17 23
18 class ProcessFlakeSwarmingTaskResultPipelineTest(wf_testcase.WaterfallTestCase): 24 class ProcessFlakeSwarmingTaskResultPipelineTest(wf_testcase.WaterfallTestCase):
19 25
20 def _MockedGetSwarmingTaskResultById(self, task_id, _): 26 def _MockedGetSwarmingTaskResultById(self, task_id, _):
21 return base_test._SWARMING_TASK_RESULTS[task_id], None 27 return base_test._SWARMING_TASK_RESULTS[task_id], None
22 28
23 def setUp(self): 29 def setUp(self):
24 super(ProcessFlakeSwarmingTaskResultPipelineTest, self).setUp() 30 super(ProcessFlakeSwarmingTaskResultPipelineTest, self).setUp()
25 self.pipeline = ProcessFlakeSwarmingTaskResultPipeline() 31 self.pipeline = ProcessFlakeSwarmingTaskResultPipeline()
26 self.master_name = 'm' 32 self.master_name = 'm'
27 self.builder_name = 'b' 33 self.builder_name = 'b'
28 self.build_number = 121 34 self.build_number = 121
29 self.step_name = 'abc_tests on platform' 35 self.step_name = 'abc_tests on platform'
30 self.test_name = 'TestSuite1.test1' 36 self.test_name = 'TestSuite1.test1'
31 self.version_number = 1 37 self.version_number = 1
32 self.mock(swarming_util, 'GetSwarmingTaskResultById', 38 self.mock(swarming_util, 'GetSwarmingTaskResultById',
33 self._MockedGetSwarmingTaskResultById) 39 self._MockedGetSwarmingTaskResultById)
34 40
35 def testCheckTestsRunStatuses(self): 41 @mock.patch.object(flake_result_pipeline,
42 '_GetCommitPositionAndGitHash',
43 return_value=(12345, 'git_hash'))
44 def testCheckTestsRunStatuses(self, _):
36 analysis = MasterFlakeAnalysis.Create( 45 analysis = MasterFlakeAnalysis.Create(
37 self.master_name, self.builder_name, 46 self.master_name, self.builder_name,
38 self.build_number, self.step_name, self.test_name) 47 self.build_number, self.step_name, self.test_name)
39 analysis.Save() 48 analysis.Save()
40 49
41 task = FlakeSwarmingTask.Create( 50 task = FlakeSwarmingTask.Create(
42 self.master_name, self.builder_name, 51 self.master_name, self.builder_name,
43 self.build_number, self.step_name, self.test_name) 52 self.build_number, self.step_name, self.test_name)
44 task.put() 53 task.put()
45 54
46 call_params = ProcessFlakeSwarmingTaskResultPipeline._GetArgs( 55 call_params = ProcessFlakeSwarmingTaskResultPipeline._GetArgs(
47 self.pipeline, self.master_name, self.builder_name, 56 self.pipeline, self.master_name, self.builder_name,
48 self.build_number, self.step_name, self.build_number, 57 self.build_number, self.step_name, self.build_number,
49 self.test_name, self.version_number) 58 self.test_name, self.version_number)
50 59
51 tests_statuses = ( 60 tests_statuses = (
52 ProcessFlakeSwarmingTaskResultPipeline._CheckTestsRunStatuses( 61 ProcessFlakeSwarmingTaskResultPipeline._CheckTestsRunStatuses(
53 self.pipeline, 62 self.pipeline,
54 base_test._SAMPLE_FAILURE_LOG, *call_params)) 63 base_test._SAMPLE_FAILURE_LOG, *call_params))
55 self.assertEqual(base_test._EXPECTED_TESTS_STATUS, tests_statuses) 64 self.assertEqual(base_test._EXPECTED_TESTS_STATUS, tests_statuses)
56 65
57 def testCheckTestsRunStatusesWhenTestDoesNotExist(self): 66 @mock.patch.object(flake_result_pipeline,
67 '_GetCommitPositionAndGitHash',
68 return_value=(12345, 'git_hash'))
69 def testCheckTestsRunStatusesWhenTestDoesNotExist(self, _):
58 test_name = 'TestSuite1.new_test' 70 test_name = 'TestSuite1.new_test'
59 analysis = MasterFlakeAnalysis.Create( 71 analysis = MasterFlakeAnalysis.Create(
60 self.master_name, self.builder_name, 72 self.master_name, self.builder_name,
61 self.build_number, self.step_name, test_name) 73 self.build_number, self.step_name, test_name)
62 analysis.Save() 74 analysis.Save()
63 75
64 task = FlakeSwarmingTask.Create( 76 task = FlakeSwarmingTask.Create(
65 self.master_name, self.builder_name, 77 self.master_name, self.builder_name,
66 self.build_number, self.step_name, test_name) 78 self.build_number, self.step_name, test_name)
67 task.put() 79 task.put()
(...skipping 10 matching lines...) Expand all
78 self.master_name, self.builder_name, 90 self.master_name, self.builder_name,
79 self.build_number, self.step_name, test_name) 91 self.build_number, self.step_name, test_name)
80 self.assertEqual(0, task.tries) 92 self.assertEqual(0, task.tries)
81 self.assertEqual(0, task.successes) 93 self.assertEqual(0, task.successes)
82 94
83 analysis = MasterFlakeAnalysis.GetVersion( 95 analysis = MasterFlakeAnalysis.GetVersion(
84 self.master_name, self.builder_name, 96 self.master_name, self.builder_name,
85 self.build_number, self.step_name, test_name, self.version_number) 97 self.build_number, self.step_name, test_name, self.version_number)
86 self.assertTrue(analysis.data_points[-1].pass_rate < 0) 98 self.assertTrue(analysis.data_points[-1].pass_rate < 0)
87 99
88 def _MockedGetSwarmingTaskFailureLog(self, *_): 100 @mock.patch.object(swarming_util, 'GetSwarmingTaskFailureLog',
89 return base_test._SAMPLE_FAILURE_LOG, None 101 return_value=(base_test._SAMPLE_FAILURE_LOG, None))
90 102 @mock.patch.object(flake_result_pipeline,
91 def testProcessFlakeSwarmingTaskResultPipeline(self): 103 '_GetCommitPositionAndGitHash',
104 return_value=(12345, 'git_hash'))
105 def testProcessFlakeSwarmingTaskResultPipeline(self, *_):
92 # End to end test. 106 # End to end test.
93 self.mock(swarming_util, 'GetSwarmingTaskFailureLog',
94 self._MockedGetSwarmingTaskFailureLog)
95
96 task = FlakeSwarmingTask.Create( 107 task = FlakeSwarmingTask.Create(
97 self.master_name, self.builder_name, 108 self.master_name, self.builder_name,
98 self.build_number, self.step_name, self.test_name) 109 self.build_number, self.step_name, self.test_name)
99 task.task_id = 'task_id1' 110 task.task_id = 'task_id1'
100 task.put() 111 task.put()
101 112
102 analysis = MasterFlakeAnalysis.Create( 113 analysis = MasterFlakeAnalysis.Create(
103 self.master_name, self.builder_name, 114 self.master_name, self.builder_name,
104 self.build_number, self.step_name, self.test_name) 115 self.build_number, self.step_name, self.test_name)
105 analysis.Save() 116 analysis.Save()
(...skipping 13 matching lines...) Expand all
119 130
120 self.assertEqual(analysis_status.COMPLETED, task.status) 131 self.assertEqual(analysis_status.COMPLETED, task.status)
121 self.assertEqual(base_test._EXPECTED_TESTS_STATUS, task.tests_statuses) 132 self.assertEqual(base_test._EXPECTED_TESTS_STATUS, task.tests_statuses)
122 133
123 self.assertEqual(datetime.datetime(2016, 2, 10, 18, 32, 6, 538220), 134 self.assertEqual(datetime.datetime(2016, 2, 10, 18, 32, 6, 538220),
124 task.created_time) 135 task.created_time)
125 self.assertEqual(datetime.datetime(2016, 2, 10, 18, 32, 9, 90550), 136 self.assertEqual(datetime.datetime(2016, 2, 10, 18, 32, 9, 90550),
126 task.started_time) 137 task.started_time)
127 self.assertEqual(datetime.datetime(2016, 2, 10, 18, 33, 9), 138 self.assertEqual(datetime.datetime(2016, 2, 10, 18, 33, 9),
128 task.completed_time) 139 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