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

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

Issue 2508603002: [Findit] Refactoring trigger swarming task pipelines (Closed)
Patch Set: 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 # 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 time
6
7 from model import analysis_status
8 from model.flake.flake_swarming_task import FlakeSwarmingTask 5 from model.flake.flake_swarming_task import FlakeSwarmingTask
9 from waterfall import swarming_util
10 from waterfall.swarming_task_request import SwarmingTaskRequest
11 from waterfall.test import wf_testcase 6 from waterfall.test import wf_testcase
12 from waterfall.trigger_flake_swarming_task_pipeline import ( 7 from waterfall.trigger_flake_swarming_task_pipeline import (
13 TriggerFlakeSwarmingTaskPipeline) 8 TriggerFlakeSwarmingTaskPipeline)
14 9
15 10
16 class TriggerFlakeSwarmingTaskPipelineTest(wf_testcase.WaterfallTestCase): 11 class TriggerFlakeSwarmingTaskPipelineTest(wf_testcase.WaterfallTestCase):
17 12
18 def testNoNewSwarmingTaskIsNeeded(self): 13 def testGetArgs(self):
19 master_name = 'm' 14 master_name = 'm'
20 builder_name = 'b' 15 builder_name = 'b'
21 build_number = 1 16 build_number = 123
22 step_name = 's' 17 step_name = 's'
23 tests = ['a.b'] 18 tests = ['t']
24 19
25 swarming_task = FlakeSwarmingTask.Create( 20 self.assertEqual(
26 master_name, builder_name, build_number, step_name, tests[0]) 21 (master_name, builder_name, build_number, step_name, tests[0]),
27 swarming_task.status = analysis_status.RUNNING 22 TriggerFlakeSwarmingTaskPipeline()._GetArgs(
28 swarming_task.task_id = 'task_id' 23 master_name, builder_name, build_number, step_name, tests))
29 swarming_task.put()
30 24
31 pipeline = TriggerFlakeSwarmingTaskPipeline() 25 def testGetSwarmingTask(self):
32 task_id = pipeline.run(
33 master_name, builder_name, build_number, step_name, tests)
34 self.assertEqual('task_id', task_id)
35
36 def testWaitingForTheTaskId(self):
37 master_name = 'm' 26 master_name = 'm'
38 builder_name = 'b' 27 builder_name = 'b'
39 build_number = 1 28 build_number = 123
40 step_name = 's' 29 step_name = 's'
41 tests = ['a.b'] 30 test_name = 't'
42 31
43 swarming_task = FlakeSwarmingTask.Create( 32 FlakeSwarmingTask.Create(
44 master_name, builder_name, build_number, step_name, tests[0]) 33 master_name, builder_name, build_number, step_name, test_name).put()
45 swarming_task.status = analysis_status.PENDING
46 swarming_task.put()
47 34
48 def MockedSleep(*_): 35 task = TriggerFlakeSwarmingTaskPipeline()._GetSwarmingTask(
49 swarming_task = FlakeSwarmingTask.Get( 36 master_name, builder_name, build_number, step_name, test_name)
50 master_name, builder_name, build_number, step_name, tests[0])
51 self.assertEqual(analysis_status.PENDING, swarming_task.status)
52 swarming_task.status = analysis_status.RUNNING
53 swarming_task.task_id = 'task_id'
54 swarming_task.put()
55 self.mock(time, 'sleep', MockedSleep)
56 37
57 pipeline = TriggerFlakeSwarmingTaskPipeline() 38 self.assertEqual(master_name, task.master_name)
58 task_id = pipeline.run( 39 self.assertEqual(builder_name, task.builder_name)
59 master_name, builder_name, build_number, step_name, tests) 40 self.assertEqual(build_number, task.build_number)
60 self.assertEqual('task_id', task_id) 41 self.assertEqual(step_name, task.step_name)
42 self.assertEqual(test_name, task.test_name)
61 43
62 def testTriggerANewSwarmingTask(self): 44 def testCreateSwarmingTask(self):
63 def MockedDownloadSwarmingTaskData(*_):
64 return [{'task_id': '1'}, {'task_id': '2'}]
65 self.mock(swarming_util, 'ListSwarmingTasksDataByTags',
66 MockedDownloadSwarmingTaskData)
67
68 def MockedGetSwarmingTaskRequest(ref_task_id, *_):
69 self.assertEqual('1', ref_task_id)
70 return SwarmingTaskRequest.Deserialize({
71 'expiration_secs': 3600,
72 'name': 'ref_task_request',
73 'parent_task_id': 'pti',
74 'priority': 25,
75 'properties': {
76 'command': 'cmd',
77 'dimensions': [{'key': 'k', 'value': 'v'}],
78 'env': [
79 {'key': 'a', 'value': '1'},
80 {'key': 'GTEST_SHARD_INDEX', 'value': '1'},
81 {'key': 'GTEST_TOTAL_SHARDS', 'value': '5'},
82 ],
83 'execution_timeout_secs': 3600,
84 'extra_args': ['--flag=value', '--gtest_filter=d.f'],
85 'grace_period_secs': 30,
86 'idempotent': True,
87 'inputs_ref': {'a': 1},
88 'io_timeout_secs': 1200,
89 },
90 'tags': ['master:a', 'buildername:b', 'name:a_tests'],
91 'user': 'user',
92 })
93 self.mock(swarming_util, 'GetSwarmingTaskRequest',
94 MockedGetSwarmingTaskRequest)
95
96 new_request_json = {}
97 def MockedTriggerSwarmingTask(new_request, *_):
98 new_request_json.update(new_request.Serialize())
99 return 'new_task_id'
100 self.mock(swarming_util, 'TriggerSwarmingTask', MockedTriggerSwarmingTask)
101
102 def MockedGetSwarmingTaskName(*_):
103 return 'new_task_name'
104 self.mock(TriggerFlakeSwarmingTaskPipeline, '_GetSwarmingTaskName',
105 MockedGetSwarmingTaskName)
106
107 master_name = 'm' 45 master_name = 'm'
108 builder_name = 'b' 46 builder_name = 'b'
109 build_number = 234 47 build_number = 123
110 step_name = 'a_tests on platform' 48 step_name = 's'
111 tests = ['a.b'] 49 test_name = 't'
112 50
113 expected_new_request_json = { 51 task = TriggerFlakeSwarmingTaskPipeline()._CreateSwarmingTask(
114 'expiration_secs': 3600, 52 master_name, builder_name, build_number, step_name, test_name)
115 'name': 'new_task_name', 53 self.assertEqual(master_name, task.master_name)
116 'parent_task_id': '', 54 self.assertEqual(builder_name, task.builder_name)
117 'priority': 25, 55 self.assertEqual(build_number, task.build_number)
118 'properties': { 56 self.assertEqual(step_name, task.step_name)
119 'command': 'cmd', 57 self.assertEqual(test_name, task.test_name)
120 'dimensions': [{'key': 'k', 'value': 'v'}],
121 'env': [
122 {'key': 'a', 'value': '1'},
123 ],
124 'execution_timeout_secs': 3600,
125 'extra_args': [
126 '--flag=value', '--gtest_repeat=100',
127 '--test-launcher-retry-limit=0',
128 '--gtest_filter=a.b'],
129 'grace_period_secs': 30,
130 'idempotent': False,
131 'inputs_ref': {'a': 1},
132 'io_timeout_secs': 1200,
133 },
134 'tags': ['purpose:deflake', 'ref_master:%s' % master_name,
135 'ref_buildername:%s' % builder_name,
136 'ref_buildnumber:%s' % build_number,
137 'ref_stepname:%s' % step_name,
138 'ref_task_id:1',
139 'ref_name:a_tests'],
140 'user': '',
141 }
142 58
143 pipeline = TriggerFlakeSwarmingTaskPipeline() 59 def testGetIterationsToRerun(self):
144 new_task_id = pipeline.run( 60 expected_iterations = 50
145 master_name, builder_name, build_number, step_name, tests) 61 self.UpdateUnitTestConfigSettings(
146 self.assertEqual('new_task_id', new_task_id) 62 config_property='check_flake_settings',
147 self.assertEqual(expected_new_request_json, new_request_json) 63 override_data={'iterations_to_rerun': expected_iterations})
148
149 swarming_task = FlakeSwarmingTask.Get(
150 master_name, builder_name, build_number, step_name, tests[0])
151 self.assertIsNotNone(swarming_task)
152 self.assertEqual('new_task_id', swarming_task.task_id)
153 self.assertEqual(tests, swarming_task.parameters['tests'])
154 self.assertEqual( 64 self.assertEqual(
155 pipeline._GetIterationsToRerun(), 65 expected_iterations,
156 swarming_task.parameters['iterations_to_rerun']) 66 TriggerFlakeSwarmingTaskPipeline()._GetIterationsToRerun())
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698