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

Side by Side Diff: dashboard/dashboard/pinpoint/models/quest/find_isolate_test.py

Issue 3013013002: [pinpoint] Change refactor. (Closed)
Patch Set: UI Created 3 years, 3 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. 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 unittest 5 import unittest
6 6
7 import mock 7 import mock
8 8
9 from google.appengine.ext import ndb 9 from google.appengine.ext import ndb
10 from google.appengine.ext import testbed 10 from google.appengine.ext import testbed
11 11
12 from dashboard.common import namespaced_stored_object 12 from dashboard.common import namespaced_stored_object
13 from dashboard.pinpoint.models import change as change_module 13 from dashboard.pinpoint.models import change as change_module
14 from dashboard.pinpoint.models import isolate 14 from dashboard.pinpoint.models import isolate
15 from dashboard.pinpoint.models.quest import find_isolate 15 from dashboard.pinpoint.models.quest import find_isolate
16 16
17 17
18 class _FindIsolateTest(unittest.TestCase): 18 class _FindIsolateTest(unittest.TestCase):
19 19
20 def setUp(self): 20 def setUp(self):
21 self.testbed = testbed.Testbed() 21 self.testbed = testbed.Testbed()
22 self.testbed.activate() 22 self.testbed.activate()
23 self.testbed.init_datastore_v3_stub() 23 self.testbed.init_datastore_v3_stub()
24 self.testbed.init_memcache_stub() 24 self.testbed.init_memcache_stub()
25 ndb.get_context().clear_cache() 25 ndb.get_context().clear_cache()
26 26
27 change = change_module.Change(change_module.Dep('src', 'f9f2b720')) 27 change = change_module.Change((change_module.Commit('src', 'f9f2b720'),))
28 isolate.Put(( 28 isolate.Put((
29 ('Mac Builder', change, 'telemetry_perf_tests', '7c7e90be'), 29 ('Mac Builder', change, 'telemetry_perf_tests', '7c7e90be'),
30 )) 30 ))
31 31
32 namespaced_stored_object.Set('repositories', { 32 namespaced_stored_object.Set('repositories', {
33 'src': { 33 'src': {
34 'repository_url': 'https://chromium.googlesource.com/chromium/src' 34 'repository_url': 'https://chromium.googlesource.com/chromium/src'
35 }, 35 },
36 'v8': { 36 'v8': {
37 'repository_url': 'https://chromium.googlesource.com/v8/v8' 37 'repository_url': 'https://chromium.googlesource.com/v8/v8'
(...skipping 13 matching lines...) Expand all
51 51
52 def assertExecutionSuccess(self, execution): 52 def assertExecutionSuccess(self, execution):
53 self.assertTrue(execution.completed) 53 self.assertTrue(execution.completed)
54 self.assertFalse(execution.failed) 54 self.assertFalse(execution.failed)
55 self.assertIsNone(execution.exception) 55 self.assertIsNone(execution.exception)
56 56
57 57
58 class IsolateLookupTest(_FindIsolateTest): 58 class IsolateLookupTest(_FindIsolateTest):
59 59
60 def testIsolateLookupSuccess(self): 60 def testIsolateLookupSuccess(self):
61 change = change_module.Change(change_module.Dep('src', 'f9f2b720')) 61 change = change_module.Change((change_module.Commit('src', 'f9f2b720'),))
62 quest = find_isolate.FindIsolate('Mac Pro Perf', 'telemetry_perf_tests') 62 quest = find_isolate.FindIsolate('Mac Pro Perf', 'telemetry_perf_tests')
63 execution = quest.Start(change) 63 execution = quest.Start(change)
64 execution.Poll() 64 execution.Poll()
65 65
66 self.assertExecutionSuccess(execution) 66 self.assertExecutionSuccess(execution)
67 self.assertEqual(execution.result_values, ()) 67 self.assertEqual(execution.result_values, ())
68 self.assertEqual(execution.result_arguments, {'isolate_hash': '7c7e90be'}) 68 self.assertEqual(execution.result_arguments, {'isolate_hash': '7c7e90be'})
69 self.assertEqual( 69 self.assertEqual(
70 { 70 {
71 'completed': True, 71 'completed': True,
(...skipping 11 matching lines...) Expand all
83 builder_testers = ( 83 builder_testers = (
84 ('arm-builder-rel', 'health-plan-clankium-phone'), 84 ('arm-builder-rel', 'health-plan-clankium-phone'),
85 ('Android Builder', 'Android Nexus5 Perf'), 85 ('Android Builder', 'Android Nexus5 Perf'),
86 ('Android arm64 Builder', 'Android Nexus5X Perf'), 86 ('Android arm64 Builder', 'Android Nexus5X Perf'),
87 ('Linux Builder', 'Linux Perf'), 87 ('Linux Builder', 'Linux Perf'),
88 ('Mac Builder', 'Mac Air Perf'), 88 ('Mac Builder', 'Mac Air Perf'),
89 ('Win Builder', 'Win 7 Perf'), 89 ('Win Builder', 'Win 7 Perf'),
90 ('Win x64 Builder', 'Win Zenbook Perf'), 90 ('Win x64 Builder', 'Win Zenbook Perf'),
91 ) 91 )
92 92
93 change = change_module.Change(change_module.Dep('src', 'git hash')) 93 change = change_module.Change((change_module.Commit('src', 'git hash'),))
94 isolate.Put( 94 isolate.Put(
95 (builder, change, 'telemetry_perf_tests', hex(hash(builder))) 95 (builder, change, 'telemetry_perf_tests', hex(hash(builder)))
96 for builder, _ in builder_testers) 96 for builder, _ in builder_testers)
97 97
98 for builder, tester in builder_testers: 98 for builder, tester in builder_testers:
99 quest = find_isolate.FindIsolate(tester, 'telemetry_perf_tests') 99 quest = find_isolate.FindIsolate(tester, 'telemetry_perf_tests')
100 execution = quest.Start(change) 100 execution = quest.Start(change)
101 execution.Poll() 101 execution.Poll()
102 102
103 self.assertExecutionSuccess(execution) 103 self.assertExecutionSuccess(execution)
104 self.assertEqual(execution.result_arguments, 104 self.assertEqual(execution.result_arguments,
105 {'isolate_hash': hex(hash(builder))}) 105 {'isolate_hash': hex(hash(builder))})
106 106
107 def testUnknownBuilder(self): 107 def testUnknownBuilder(self):
108 with self.assertRaises(NotImplementedError): 108 with self.assertRaises(NotImplementedError):
109 find_isolate.FindIsolate('Unix Perf', 'telemetry_perf_tests') 109 find_isolate.FindIsolate('Unix Perf', 'telemetry_perf_tests')
110 110
111 111
112 @mock.patch('dashboard.services.buildbucket_service.GetJobStatus') 112 @mock.patch('dashboard.services.buildbucket_service.GetJobStatus')
113 @mock.patch('dashboard.services.buildbucket_service.Put') 113 @mock.patch('dashboard.services.buildbucket_service.Put')
114 class BuildTest(_FindIsolateTest): 114 class BuildTest(_FindIsolateTest):
115 115
116 def testBuildLifecycle(self, put, get_job_status): 116 def testBuildLifecycle(self, put, get_job_status):
117 change = change_module.Change( 117 change = change_module.Change(
118 change_module.Dep('src', 'base git hash'), 118 (change_module.Commit('src', 'base git hash'),
119 (change_module.Dep('v8', 'dep git hash'),), 119 change_module.Commit('v8', 'dep git hash')),
120 patch=change_module.Patch('https://example.org', 2565263002, 20001)) 120 patch=change_module.Patch('https://example.org', 2565263002, 20001))
121 quest = find_isolate.FindIsolate('Mac Pro Perf', 'telemetry_perf_tests') 121 quest = find_isolate.FindIsolate('Mac Pro Perf', 'telemetry_perf_tests')
122 execution = quest.Start(change) 122 execution = quest.Start(change)
123 123
124 # Request a build. 124 # Request a build.
125 put.return_value = {'build': {'id': 'build_id'}} 125 put.return_value = {'build': {'id': 'build_id'}}
126 execution.Poll() 126 execution.Poll()
127 127
128 self.assertFalse(execution.completed) 128 self.assertFalse(execution.completed)
129 put.assert_called_once_with(find_isolate.BUCKET, { 129 put.assert_called_once_with(find_isolate.BUCKET, {
(...skipping 21 matching lines...) Expand all
151 # Look up isolate hash. 151 # Look up isolate hash.
152 isolate.Put((('Mac Builder', change, 152 isolate.Put((('Mac Builder', change,
153 'telemetry_perf_tests', 'isolate git hash'),)) 153 'telemetry_perf_tests', 'isolate git hash'),))
154 execution.Poll() 154 execution.Poll()
155 155
156 self.assertExecutionSuccess(execution) 156 self.assertExecutionSuccess(execution)
157 157
158 def testSimultaneousBuilds(self, put, get_job_status): 158 def testSimultaneousBuilds(self, put, get_job_status):
159 # Two builds started at the same time on the same Change should reuse the 159 # Two builds started at the same time on the same Change should reuse the
160 # same build request. 160 # same build request.
161 change = change_module.Change(change_module.Dep('src', 'base git hash')) 161 change = change_module.Change(
162 (change_module.Commit('src', 'base git hash'),))
162 quest = find_isolate.FindIsolate('Mac Pro Perf', 'telemetry_perf_tests') 163 quest = find_isolate.FindIsolate('Mac Pro Perf', 'telemetry_perf_tests')
163 execution_1 = quest.Start(change) 164 execution_1 = quest.Start(change)
164 execution_2 = quest.Start(change) 165 execution_2 = quest.Start(change)
165 166
166 # Request a build. 167 # Request a build.
167 put.return_value = {'build': {'id': 'build_id'}} 168 put.return_value = {'build': {'id': 'build_id'}}
168 execution_1.Poll() 169 execution_1.Poll()
169 execution_2.Poll() 170 execution_2.Poll()
170 171
171 self.assertFalse(execution_1.completed) 172 self.assertFalse(execution_1.completed)
(...skipping 13 matching lines...) Expand all
185 isolate.Put((('Mac Builder', change, 186 isolate.Put((('Mac Builder', change,
186 'telemetry_perf_tests', 'isolate git hash'),)) 187 'telemetry_perf_tests', 'isolate git hash'),))
187 execution_1.Poll() 188 execution_1.Poll()
188 execution_2.Poll() 189 execution_2.Poll()
189 190
190 self.assertExecutionSuccess(execution_1) 191 self.assertExecutionSuccess(execution_1)
191 self.assertExecutionSuccess(execution_2) 192 self.assertExecutionSuccess(execution_2)
192 193
193 def testBuildFailure(self, put, get_job_status): 194 def testBuildFailure(self, put, get_job_status):
194 change = change_module.Change( 195 change = change_module.Change(
195 change_module.Dep('src', 'base git hash'), 196 (change_module.Commit('src', 'base git hash'),
196 (change_module.Dep('v8', 'dep git hash'),), 197 change_module.Commit('v8', 'dep git hash')),
197 patch=change_module.Patch('https://example.org', 2565263002, 20001)) 198 patch=change_module.Patch('https://example.org', 2565263002, 20001))
198 quest = find_isolate.FindIsolate('Mac Pro Perf', 'telemetry_perf_tests') 199 quest = find_isolate.FindIsolate('Mac Pro Perf', 'telemetry_perf_tests')
199 execution = quest.Start(change) 200 execution = quest.Start(change)
200 201
201 # Request a build. 202 # Request a build.
202 put.return_value = {'build': {'id': 'build_id'}} 203 put.return_value = {'build': {'id': 'build_id'}}
203 execution.Poll() 204 execution.Poll()
204 205
205 # Check build status. 206 # Check build status.
206 get_job_status.return_value = { 207 get_job_status.return_value = {
207 'build': { 208 'build': {
208 'status': 'COMPLETED', 209 'status': 'COMPLETED',
209 'result': 'FAILURE', 210 'result': 'FAILURE',
210 'failure_reason': 'BUILD_FAILURE', 211 'failure_reason': 'BUILD_FAILURE',
211 } 212 }
212 } 213 }
213 execution.Poll() 214 execution.Poll()
214 215
215 self.assertExecutionFailure(execution, find_isolate.BuildError) 216 self.assertExecutionFailure(execution, find_isolate.BuildError)
216 217
217 def testBuildCanceled(self, put, get_job_status): 218 def testBuildCanceled(self, put, get_job_status):
218 change = change_module.Change( 219 change = change_module.Change(
219 change_module.Dep('src', 'base git hash'), 220 (change_module.Commit('src', 'base git hash'),
220 (change_module.Dep('v8', 'dep git hash'),), 221 change_module.Commit('v8', 'dep git hash')),
221 patch=change_module.Patch('https://example.org', 2565263002, 20001)) 222 patch=change_module.Patch('https://example.org', 2565263002, 20001))
222 quest = find_isolate.FindIsolate('Mac Pro Perf', 'telemetry_perf_tests') 223 quest = find_isolate.FindIsolate('Mac Pro Perf', 'telemetry_perf_tests')
223 execution = quest.Start(change) 224 execution = quest.Start(change)
224 225
225 # Request a build. 226 # Request a build.
226 put.return_value = {'build': {'id': 'build_id'}} 227 put.return_value = {'build': {'id': 'build_id'}}
227 execution.Poll() 228 execution.Poll()
228 229
229 # Check build status. 230 # Check build status.
230 get_job_status.return_value = { 231 get_job_status.return_value = {
231 'build': { 232 'build': {
232 'status': 'COMPLETED', 233 'status': 'COMPLETED',
233 'result': 'CANCELED', 234 'result': 'CANCELED',
234 'cancelation_reason': 'TIMEOUT', 235 'cancelation_reason': 'TIMEOUT',
235 } 236 }
236 } 237 }
237 execution.Poll() 238 execution.Poll()
238 239
239 self.assertExecutionFailure(execution, find_isolate.BuildError) 240 self.assertExecutionFailure(execution, find_isolate.BuildError)
240 241
241 def testBuildSucceededButIsolateIsMissing(self, put, get_job_status): 242 def testBuildSucceededButIsolateIsMissing(self, put, get_job_status):
242 change = change_module.Change( 243 change = change_module.Change(
243 change_module.Dep('src', 'base git hash'), 244 (change_module.Commit('src', 'base git hash'),
244 (change_module.Dep('v8', 'dep git hash'),), 245 change_module.Commit('v8', 'dep git hash')),
245 patch=change_module.Patch('https://example.org', 2565263002, 20001)) 246 patch=change_module.Patch('https://example.org', 2565263002, 20001))
246 quest = find_isolate.FindIsolate('Mac Pro Perf', 'telemetry_perf_tests') 247 quest = find_isolate.FindIsolate('Mac Pro Perf', 'telemetry_perf_tests')
247 execution = quest.Start(change) 248 execution = quest.Start(change)
248 249
249 # Request a build. 250 # Request a build.
250 put.return_value = {'build': {'id': 'build_id'}} 251 put.return_value = {'build': {'id': 'build_id'}}
251 execution.Poll() 252 execution.Poll()
252 253
253 # Check build status. 254 # Check build status.
254 get_job_status.return_value = { 255 get_job_status.return_value = {
255 'build': { 256 'build': {
256 'status': 'COMPLETED', 257 'status': 'COMPLETED',
257 'result': 'SUCCESS', 258 'result': 'SUCCESS',
258 } 259 }
259 } 260 }
260 execution.Poll() 261 execution.Poll()
261 262
262 self.assertExecutionFailure(execution, find_isolate.BuildError) 263 self.assertExecutionFailure(execution, find_isolate.BuildError)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698