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

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

Issue 2130543004: Waterfall components of regression range finder. (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: added another init whoooo Created 4 years, 4 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
OLDNEW
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
3 # found in the LICENSE file.
4
5 import time 1 import time
2 import json
6 3
7 from model import analysis_status 4 from model import analysis_status
8 from model.wf_swarming_task import WfSwarmingTask 5 from model.flake.flake_swarming_task import FlakeSwarmingTask
9 from waterfall import swarming_util 6 from waterfall import swarming_util
10 from waterfall import trigger_swarming_task_pipeline
11 from waterfall import waterfall_config
12 from waterfall.swarming_task_request import SwarmingTaskRequest 7 from waterfall.swarming_task_request import SwarmingTaskRequest
13 from waterfall.test import wf_testcase 8 from waterfall.test import wf_testcase
14 from waterfall.trigger_swarming_task_pipeline import TriggerSwarmingTaskPipeline 9 from waterfall.trigger_flake_swarming_task_pipeline import (
10 TriggerFlakeSwarmingTaskPipeline)
15 11
16 12
17 class TriggerSwarmingTaskPipelineTest(wf_testcase.WaterfallTestCase): 13 class TriggerFlakeSwarmingTaskPipelineTest(wf_testcase.WaterfallTestCase):
18 14
19 def testNoNewSwarmingTaskIsNeeded(self): 15 def testNoNewSwarmingTaskIsNeeded(self):
20 master_name = 'm' 16 master_name = 'm'
21 builder_name = 'b' 17 builder_name = 'b'
22 build_number = 1 18 build_number = 1
23 step_name = 's' 19 step_name = 's'
24 tests = ['a.b'] 20 tests = ['a.b']
25 21
26 def MockedListSwarmingTasksDataByTags(*_): 22 swarming_task = FlakeSwarmingTask.Create(
27 raise Exception('Fail.') # pragma: no cover. Should never be reached. 23 master_name, builder_name, build_number, step_name, tests[0])
28 self.mock(swarming_util, 'ListSwarmingTasksDataByTags',
29 MockedListSwarmingTasksDataByTags)
30 swarming_task = WfSwarmingTask.Create(
31 master_name, builder_name, build_number, step_name)
32 swarming_task.status = analysis_status.RUNNING 24 swarming_task.status = analysis_status.RUNNING
33 swarming_task.task_id = 'task_id' 25 swarming_task.task_id = 'task_id'
34 swarming_task.put() 26 swarming_task.put()
35 27
36 pipeline = TriggerSwarmingTaskPipeline() 28 pipeline = TriggerFlakeSwarmingTaskPipeline()
37 task_id = pipeline.run( 29 task_id = pipeline.run(
38 master_name, builder_name, build_number, step_name, tests) 30 master_name, builder_name, build_number, step_name, tests)
39 self.assertEqual('task_id', task_id) 31 self.assertEqual('task_id', task_id)
40 32
41 def testWaitingForTheTaskId(self): 33 def testWaitingForTheTaskId(self):
42 master_name = 'm' 34 master_name = 'm'
43 builder_name = 'b' 35 builder_name = 'b'
44 build_number = 1 36 build_number = 1
45 step_name = 's' 37 step_name = 's'
46 tests = ['a.b'] 38 tests = ['a.b']
47 39
48 swarming_task = WfSwarmingTask.Create( 40 swarming_task = FlakeSwarmingTask.Create(
49 master_name, builder_name, build_number, step_name) 41 master_name, builder_name, build_number, step_name, tests[0])
50 swarming_task.status = analysis_status.PENDING 42 swarming_task.status = analysis_status.PENDING
51 swarming_task.put() 43 swarming_task.put()
52 44
53 def MockedSleep(*_): 45 def MockedSleep(*_):
54 swarming_task = WfSwarmingTask.Get( 46 swarming_task = FlakeSwarmingTask.Get(
55 master_name, builder_name, build_number, step_name) 47 master_name, builder_name, build_number, step_name, tests[0])
56 self.assertEqual(analysis_status.PENDING, swarming_task.status) 48 self.assertEqual(analysis_status.PENDING, swarming_task.status)
57 swarming_task.status = analysis_status.RUNNING 49 swarming_task.status = analysis_status.RUNNING
58 swarming_task.task_id = 'task_id' 50 swarming_task.task_id = 'task_id'
59 swarming_task.put() 51 swarming_task.put()
60 self.mock(time, 'sleep', MockedSleep) 52 self.mock(time, 'sleep', MockedSleep)
61 53
62 pipeline = TriggerSwarmingTaskPipeline() 54 pipeline = TriggerFlakeSwarmingTaskPipeline()
63 task_id = pipeline.run( 55 task_id = pipeline.run(
64 master_name, builder_name, build_number, step_name, tests) 56 master_name, builder_name, build_number, step_name, tests)
65 self.assertEqual('task_id', task_id) 57 self.assertEqual('task_id', task_id)
66 58
67 def testTriggerANewSwarmingTask(self): 59 def testTriggerANewSwarmingTask(self):
68 def MockedDownloadSwarmingTaskData(*_): 60 def MockedDownloadSwarmingTaskData(*_):
69 return [{'task_id': '1'}, {'task_id': '2'}] 61 return [{'task_id': '1'}, {'task_id': '2'}]
70 self.mock(swarming_util, 'ListSwarmingTasksDataByTags', 62 self.mock(swarming_util, 'ListSwarmingTasksDataByTags',
71 MockedDownloadSwarmingTaskData) 63 MockedDownloadSwarmingTaskData)
72 64
(...skipping 26 matching lines...) Expand all
99 MockedGetSwarmingTaskRequest) 91 MockedGetSwarmingTaskRequest)
100 92
101 new_request_json = {} 93 new_request_json = {}
102 def MockedTriggerSwarmingTask(new_request, *_): 94 def MockedTriggerSwarmingTask(new_request, *_):
103 new_request_json.update(new_request.Serialize()) 95 new_request_json.update(new_request.Serialize())
104 return 'new_task_id' 96 return 'new_task_id'
105 self.mock(swarming_util, 'TriggerSwarmingTask', MockedTriggerSwarmingTask) 97 self.mock(swarming_util, 'TriggerSwarmingTask', MockedTriggerSwarmingTask)
106 98
107 def MockedGetSwarmingTaskName(*_): 99 def MockedGetSwarmingTaskName(*_):
108 return 'new_task_name' 100 return 'new_task_name'
109 self.mock(trigger_swarming_task_pipeline, '_GetSwarmingTaskName', 101 self.mock(TriggerFlakeSwarmingTaskPipeline, '_GetSwarmingTaskName',
110 MockedGetSwarmingTaskName) 102 MockedGetSwarmingTaskName)
111 103
112 master_name = 'm' 104 master_name = 'm'
113 builder_name = 'b' 105 builder_name = 'b'
114 build_number = 234 106 build_number = 234
115 step_name = 'a_tests on platform' 107 step_name = 'a_tests on platform'
116 tests = ['a.b', 'a.c'] 108 tests = ['a.b']
117 109
118 expected_new_request_json = { 110 expected_new_request_json = {
119 'expiration_secs': 3600, 111 'expiration_secs': 3600,
120 'name': 'new_task_name', 112 'name': 'new_task_name',
121 'parent_task_id': '', 113 'parent_task_id': '',
122 'priority': 25, 114 'priority': 25,
123 'properties': { 115 'properties': {
124 'command': 'cmd', 116 'command': 'cmd',
125 'dimensions': [{'key': 'k', 'value': 'v'}], 117 'dimensions': [{'key': 'k', 'value': 'v'}],
126 'env': [ 118 'env': [
127 {'key': 'a', 'value': '1'}, 119 {'key': 'a', 'value': '1'},
128 ], 120 ],
129 'execution_timeout_secs': 3600, 121 'execution_timeout_secs': 3600,
130 'extra_args': [ 122 'extra_args': [
131 '--flag=value', '--gtest_repeat=10', 123 '--flag=value', '--gtest_repeat=10',
132 '--test-launcher-retry-limit=0', 124 '--test-launcher-retry-limit=0',
133 '--gtest_filter=a.b:a.c'], 125 '--gtest_filter=a.b'],
134 'grace_period_secs': 30, 126 'grace_period_secs': 30,
135 'idempotent': False, 127 'idempotent': False,
136 'inputs_ref': {'a': 1}, 128 'inputs_ref': {'a': 1},
137 'io_timeout_secs': 1200, 129 'io_timeout_secs': 1200,
138 }, 130 },
139 'tags': ['purpose:deflake', 'ref_master:%s' % master_name, 131 'tags': ['purpose:deflake', 'ref_master:%s' % master_name,
140 'ref_buildername:%s' % builder_name, 132 'ref_buildername:%s' % builder_name,
141 'ref_buildnumber:%s' % build_number, 133 'ref_buildnumber:%s' % build_number,
142 'ref_stepname:%s' % step_name, 134 'ref_stepname:%s' % step_name,
143 'ref_task_id:1', 135 'ref_task_id:1',
144 'ref_name:a_tests'], 136 'ref_name:a_tests'],
145 'user': '', 137 'user': '',
146 } 138 }
147 139
148 pipeline = TriggerSwarmingTaskPipeline() 140 pipeline = TriggerFlakeSwarmingTaskPipeline()
149 new_task_id = pipeline.run( 141 new_task_id = pipeline.run(
150 master_name, builder_name, build_number, step_name, tests) 142 master_name, builder_name, build_number, step_name, tests)
151 self.assertEqual('new_task_id', new_task_id) 143 self.assertEqual('new_task_id', new_task_id)
152 self.assertEqual(expected_new_request_json, new_request_json) 144 self.assertEqual(expected_new_request_json, new_request_json)
153 145
154 swarming_task = WfSwarmingTask.Get( 146 swarming_task = FlakeSwarmingTask.Get(
155 master_name, builder_name, build_number, step_name) 147 master_name, builder_name, build_number, step_name, tests[0])
156 self.assertIsNotNone(swarming_task) 148 self.assertIsNotNone(swarming_task)
157 self.assertEqual('new_task_id', swarming_task.task_id) 149 self.assertEqual('new_task_id', swarming_task.task_id)
158 self.assertEqual(tests, swarming_task.parameters['tests']) 150 self.assertEqual(tests, swarming_task.parameters['tests'])
159 self.assertEqual( 151 self.assertEqual(
160 waterfall_config.GetSwarmingSettings()['iterations_to_rerun'], 152 pipeline._GetIterationsToRerun(),
161 swarming_task.parameters['iterations_to_rerun']) 153 swarming_task.parameters['iterations_to_rerun'])
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698