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

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

Issue 2477343003: [Findit] Refactoring monitor swarming task pipelines (Closed)
Patch Set: Addressing nit Created 4 years, 1 month 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
1 import datetime 1 import datetime
2 2
3 from waterfall.test import wf_testcase 3 from model import analysis_status
4 from model.flake.flake_swarming_task import FlakeSwarmingTask
5 from model.flake.master_flake_analysis import MasterFlakeAnalysis
6 from model.wf_swarming_task import WfSwarmingTask
7 from waterfall import swarming_util
4 from waterfall.process_base_swarming_task_result_pipeline import ( 8 from waterfall.process_base_swarming_task_result_pipeline import (
5 ProcessBaseSwarmingTaskResultPipeline) 9 ProcessBaseSwarmingTaskResultPipeline)
10 from waterfall.process_flake_swarming_task_result_pipeline import (
11 ProcessFlakeSwarmingTaskResultPipeline)
12 from waterfall.process_swarming_task_result_pipeline import (
13 ProcessSwarmingTaskResultPipeline)
14 from waterfall.test import wf_testcase
15
16
17 _ISOLATED_SERVER = 'https://isolateserver.appspot.com'
18 _ISOLATED_STORAGE_URL = 'isolateserver.storage.googleapis.com'
19 _SAMPLE_FAILURE_LOG = {
20 'per_iteration_data': [
21 {
22 'TestSuite1.test1': [
23 {
24 'status': 'SUCCESS',
25 'other_info': 'N/A'
26 }
27 ],
28 'TestSuite1.test2': [
29 {
30 'status': 'FAILURE',
31 'other_info': 'N/A'
32 },
33 {
34 'status': 'FAILURE',
35 'other_info': 'N/A'
36 },
37 {
38 'status': 'SUCCESS',
39 'other_info': 'N/A'
40 }
41 ],
42 'TestSuite1.test3': [
43 {
44 'status': 'FAILURE',
45 'other_info': 'N/A'
46 },
47 {
48 'status': 'FAILURE',
49 'other_info': 'N/A'
50 },
51 {
52 'status': 'FAILURE',
53 'other_info': 'N/A'
54 }
55 ]
56 },
57 {
58 'TestSuite1.test1': [
59 {
60 'status': 'SUCCESS',
61 'other_info': 'N/A'
62 }
63 ],
64 'TestSuite1.test2': [
65 {
66 'status': 'SUCCESS',
67 'other_info': 'N/A'
68 }
69 ],
70 'TestSuite1.test3': [
71 {
72 'status': 'FAILURE',
73 'other_info': 'N/A'
74 },
75 {
76 'status': 'FAILURE',
77 'other_info': 'N/A'
78 },
79 {
80 'status': 'FAILURE',
81 'other_info': 'N/A'
82 }
83 ]
84 }
85 ]
86 }
87
88
89 _SWARMING_TASK_RESULTS = {
90 'task_id1': {
91 'state': 'COMPLETED',
92 'exit_code': '1',
93 'tags': [
94 'priority:25',
95 'ref_name:abc_tests'
96 ],
97 'outputs_ref': {
98 'isolatedserver': _ISOLATED_SERVER,
99 'namespace': 'default-gzip',
100 'isolated': 'shard1_isolated'
101 },
102 'created_ts': '2016-02-10T18:32:06.538220',
103 'started_ts': '2016-02-10T18:32:09.090550',
104 'completed_ts': '2016-02-10T18:33:09'
105 },
106 'task_id2': {
107 'state': 'TIMED_OUT',
108 'outputs_ref': None
109 }
110 }
111
112
113 _EXPECTED_TESTS_STATUS = {
114 'TestSuite1.test1': {
115 'total_run': 2,
116 'SUCCESS': 2
117 },
118 'TestSuite1.test2': {
119 'total_run': 4,
120 'SUCCESS': 2,
121 'FAILURE': 2
122 },
123 'TestSuite1.test3': {
124 'total_run': 6,
125 'FAILURE': 6
126 }
127 }
128
129
130 _EXPECTED_CLASSIFIED_TESTS = {
131 'flaky_tests': ['TestSuite1.test2', 'TestSuite1.test1'],
132 'reliable_tests': ['TestSuite1.test3']
133 }
134
6 135
7 class ProcessBaseSwarmingTaskResultPipelineTest(wf_testcase.WaterfallTestCase): 136 class ProcessBaseSwarmingTaskResultPipelineTest(wf_testcase.WaterfallTestCase):
137
138 def _MockedGetSwarmingTaskResultById(self, task_id, _):
139 return _SWARMING_TASK_RESULTS[task_id]
140
8 def setUp(self): 141 def setUp(self):
9 super(ProcessBaseSwarmingTaskResultPipelineTest, self).setUp() 142 super(ProcessBaseSwarmingTaskResultPipelineTest, self).setUp()
10 self.pipeline = ProcessBaseSwarmingTaskResultPipeline() 143 self.pipeline = ProcessBaseSwarmingTaskResultPipeline()
11 self.master_name = 'm' 144 self.master_name = 'm'
12 self.builder_name = 'b' 145 self.builder_name = 'b'
13 self.build_number = 121 146 self.build_number = 121
14 self.step_name = 'abc_tests on platform' 147 self.step_name = 'abc_tests on platform'
15 self.test_name = 'test' 148 self.test_name = 'test'
149 self.mock(swarming_util, 'GetSwarmingTaskResultById',
150 self._MockedGetSwarmingTaskResultById)
16 151
17 def testConvertDateTime(self): 152 def testConvertDateTime(self):
18 fmt = '%Y-%m-%dT%H:%M:%S.%f' 153 fmt = '%Y-%m-%dT%H:%M:%S.%f'
19 time_string = '2016-02-10T18:32:06.538220' 154 time_string = '2016-02-10T18:32:06.538220'
20 test_time = self.pipeline._ConvertDateTime(time_string) 155 test_time = self.pipeline._ConvertDateTime(time_string)
21 time = datetime.datetime.strptime(time_string, fmt) 156 time = datetime.datetime.strptime(time_string, fmt)
22 self.assertEqual(test_time, time) 157 self.assertEqual(test_time, time)
23 158
24 def testConvertDateTimeNone(self): 159 def testConvertDateTimeNone(self):
25 time_string = '' 160 time_string = ''
26 test_time = self.pipeline._ConvertDateTime(time_string) 161 test_time = self.pipeline._ConvertDateTime(time_string)
27 self.assertIsNone(test_time) 162 self.assertIsNone(test_time)
28 163
29 def testConvertDateTimefailure(self): 164 def testConvertDateTimefailure(self):
30 with self.assertRaises(ValueError): 165 with self.assertRaises(ValueError):
31 self.pipeline._ConvertDateTime('abc') 166 self.pipeline._ConvertDateTime('abc')
167
168 def testCheckTestsRunStatusesNoOutPutJson(self):
169 self.assertEqual(
170 {},
171 ProcessBaseSwarmingTaskResultPipeline._CheckTestsRunStatuses(
172 self.pipeline, None, ()))
173
174 def testCheckTestsRunStatuses(self):
175 tests_statuses = (
176 ProcessSwarmingTaskResultPipeline()._CheckTestsRunStatuses(
177 _SAMPLE_FAILURE_LOG))
178 self.assertEqual(_EXPECTED_TESTS_STATUS, tests_statuses)
179
180 def testMonitorSwarmingTaskTimeOut(self):
181 # Override swarming config settings to force a timeout.
182 override_swarming_settings = {
183 'task_timeout_hours': -1
184 }
185 self.UpdateUnitTestConfigSettings(
186 'swarming_settings', override_swarming_settings)
187
188 task = FlakeSwarmingTask.Create(
189 self.master_name, self.builder_name, self.build_number, self.step_name,
190 self.test_name)
191 task.task_id = 'task_id1'
192 task.put()
193
194 analysis = MasterFlakeAnalysis.Create(
195 self.master_name, self.builder_name, self.build_number, self.step_name,
196 self.test_name)
197 analysis.Save()
198
199 pipeline = ProcessFlakeSwarmingTaskResultPipeline()
200 step_name, task_info = pipeline.run(
201 self.master_name, self.builder_name, self.build_number, self.step_name,
202 'task_id1', self.build_number, self.test_name, 1)
203 self.assertEqual('abc_tests', task_info)
204 self.assertEqual(self.step_name, step_name)
205
206 task = FlakeSwarmingTask.Get(
207 self.master_name, self.builder_name, self.build_number, self.step_name,
208 self.test_name)
209 self.assertEqual(analysis_status.ERROR, task.status)
210 self.assertEqual({}, task.tests_statuses)
211
212 def testMonitorSwarmingTaskNotRunning(self):
213 task = WfSwarmingTask.Create(
214 self.master_name, self.builder_name,
215 self.build_number, self.step_name)
216 task.task_id = 'task_id2'
217 task.put()
218
219 pipeline = ProcessSwarmingTaskResultPipeline()
220 step_name, task_info = pipeline.run(
221 self.master_name, self.builder_name,
222 self.build_number, self.step_name)
223
224 self.assertEqual(self.step_name, step_name)
225 self.assertIsNone(task_info[0])
226 self.assertEqual([], task_info[1])
227
228 task = WfSwarmingTask.Get(
229 self.master_name, self.builder_name, self.build_number, self.step_name)
230
231 self.assertEqual(analysis_status.ERROR, task.status)
232 self.assertEqual({}, task.tests_statuses)
233 self.assertEqual({}, task.classified_tests)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698