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

Side by Side Diff: appengine/cr-buildbucket/test/api_test.py

Issue 1877083003: buildbucket: add retry API. (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: Created 4 years, 8 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 2014 The Chromium Authors. All rights reserved. 1 # Copyright 2014 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 6 import json
7 7
8 from components import auth 8 from components import auth
9 from components import utils 9 from components import utils
10 from google.appengine.ext import ndb 10 from google.appengine.ext import ndb
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
69 def test_get_nonexistent_build(self): 69 def test_get_nonexistent_build(self):
70 service.get.return_value = None 70 service.get.return_value = None
71 self.expect_error('get', {'id': 1}, 'BUILD_NOT_FOUND') 71 self.expect_error('get', {'id': 1}, 'BUILD_NOT_FOUND')
72 72
73 ##################################### PUT #################################### 73 ##################################### PUT ####################################
74 74
75 def test_put(self): 75 def test_put(self):
76 self.test_build.tags = ['owner:ivan'] 76 self.test_build.tags = ['owner:ivan']
77 service.add.return_value = self.test_build 77 service.add.return_value = self.test_build
78 req = { 78 req = {
79 'client_operation_id': '42',
79 'bucket': self.test_build.bucket, 80 'bucket': self.test_build.bucket,
80 'tags': self.test_build.tags, 81 'tags': self.test_build.tags,
81 'pubsub_callback': { 82 'pubsub_callback': {
82 'topic': 'projects/foo/topic/bar', 83 'topic': 'projects/foo/topic/bar',
83 'user_data': 'hello', 84 'user_data': 'hello',
84 'auth_token': 'secret', 85 'auth_token': 'secret',
85 } 86 }
86 } 87 }
87 resp = self.call_api('put', req).json_body 88 resp = self.call_api('put', req).json_body
88 service.add.assert_called_once_with( 89 service.add.assert_called_once_with(
89 bucket=self.test_build.bucket, 90 bucket=self.test_build.bucket,
90 tags=req['tags'], 91 tags=req['tags'],
91 parameters=None, 92 parameters=None,
92 lease_expiration_date=None, 93 lease_expiration_date=None,
93 client_operation_id=None, 94 client_operation_id='42',
94 pubsub_callback=model.PubSubCallback( 95 pubsub_callback=model.PubSubCallback(
95 topic='projects/foo/topic/bar', 96 topic='projects/foo/topic/bar',
96 user_data='hello', 97 user_data='hello',
97 auth_token='secret', 98 auth_token='secret',
98 ), 99 ),
99 ) 100 )
100 self.assertEqual(resp['build']['id'], str(self.test_build.key.id())) 101 self.assertEqual(resp['build']['id'], str(self.test_build.key.id()))
101 self.assertEqual(resp['build']['bucket'], req['bucket']) 102 self.assertEqual(resp['build']['bucket'], req['bucket'])
102 self.assertEqual(resp['build']['tags'], req['tags']) 103 self.assertEqual(resp['build']['tags'], req['tags'])
103 104
(...skipping 25 matching lines...) Expand all
129 self.assertEqual( 130 self.assertEqual(
130 resp['build']['lease_expiration_ts'], req['lease_expiration_ts']) 131 resp['build']['lease_expiration_ts'], req['lease_expiration_ts'])
131 132
132 def test_put_with_malformed_parameters_json(self): 133 def test_put_with_malformed_parameters_json(self):
133 req = { 134 req = {
134 'bucket': 'chromium', 135 'bucket': 'chromium',
135 'parameters_json': '}non-json', 136 'parameters_json': '}non-json',
136 } 137 }
137 self.expect_error('put', req, 'INVALID_INPUT') 138 self.expect_error('put', req, 'INVALID_INPUT')
138 139
140 #################################### RETRY ###################################
141
142 def test_retry(self):
143 build = model.Build(
144 bucket='chromium',
145 parameters={'builder_name': 'debug'},
146 tags = ['a:b'],
147 )
148 build.put()
149 service.retry.return_value = build
150
151 req = {
152 'id': build.key.id(),
153 'client_operation_id': '42',
154 'pubsub_callback': {
155 'topic': 'projects/foo/topic/bar',
156 'user_data': 'hello',
157 'auth_token': 'secret',
158 }
159 }
160 resp = self.call_api('retry', req).json_body
161 service.retry.assert_called_once_with(
162 build.key.id(),
163 client_operation_id='42',
164 lease_expiration_date=None,
165 pubsub_callback=model.PubSubCallback(
166 topic='projects/foo/topic/bar',
167 user_data='hello',
168 auth_token='secret',
169 ),
170 )
171 self.assertEqual(resp['build']['id'], str(build.key.id()))
172 self.assertEqual(resp['build']['bucket'], build.bucket)
173 self.assertEqual(
174 json.loads(resp['build']['parameters_json']), build.parameters)
175 self.assertEqual(resp['build']['tags'], build.tags)
176
177 def test_retry_not_found(self):
178 service.retry.side_effect = errors.BuildNotFoundError
179 self.expect_error('retry', {'id': 42}, 'BUILD_NOT_FOUND')
180
139 ################################## PUT_BATCH ################################# 181 ################################## PUT_BATCH #################################
140 182
141 def test_put_batch(self): 183 def test_put_batch(self):
142 self.test_build.tags = ['owner:ivan'] 184 self.test_build.tags = ['owner:ivan']
143 build1_future = ndb.Future() 185 build1_future = ndb.Future()
144 build1_future.set_result(self.test_build) 186 build1_future.set_result(self.test_build)
145 187
146 build2 = model.Build(id=2, bucket='v8') 188 build2 = model.Build(id=2, bucket='v8')
147 build2_future = ndb.Future() 189 build2_future = ndb.Future()
148 build2_future.set_result(build2) 190 build2_future.set_result(build2)
(...skipping 358 matching lines...) Expand 10 before | Expand all | Expand 10 after
507 def test_invalid_input_error(self): 549 def test_invalid_input_error(self):
508 self.error_test(errors.InvalidInputError, 'INVALID_INPUT') 550 self.error_test(errors.InvalidInputError, 'INVALID_INPUT')
509 551
510 def test_lease_expired_error(self): 552 def test_lease_expired_error(self):
511 self.error_test(errors.LeaseExpiredError, 'LEASE_EXPIRED') 553 self.error_test(errors.LeaseExpiredError, 'LEASE_EXPIRED')
512 554
513 def test_auth_error(self): 555 def test_auth_error(self):
514 with self.call_should_fail(403): 556 with self.call_should_fail(403):
515 service.get.side_effect = auth.AuthorizationError 557 service.get.side_effect = auth.AuthorizationError
516 self.call_api('get', {'id': 123}) 558 self.call_api('get', {'id': 123})
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698