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

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

Issue 1082303002: buildbucket: put_batch endpoint (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: Created 5 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 httplib 6 import httplib
7 import json 7 import json
8 import mock 8 import mock
9 9
10 from components import auth 10 from components import auth
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
71 self.assertEqual( 71 self.assertEqual(
72 resp['build']['parameters_json'], '{"buildername": "linux_rel"}') 72 resp['build']['parameters_json'], '{"buildername": "linux_rel"}')
73 73
74 def test_get_nonexistent_build(self): 74 def test_get_nonexistent_build(self):
75 self.service.get.return_value = None 75 self.service.get.return_value = None
76 self.expect_error('get', {'id': 1}, 'BUILD_NOT_FOUND') 76 self.expect_error('get', {'id': 1}, 'BUILD_NOT_FOUND')
77 77
78 ##################################### PUT #################################### 78 ##################################### PUT ####################################
79 79
80 def test_put(self): 80 def test_put(self):
81 self.test_build.tags = ['owner=ivan'] 81 self.test_build.tags = ['owner:ivan']
82 self.service.add.return_value = self.test_build 82 self.service.add.return_value = self.test_build
83 req = { 83 req = {
84 'bucket': self.test_build.bucket, 84 'bucket': self.test_build.bucket,
85 'tags': self.test_build.tags, 85 'tags': self.test_build.tags,
86 } 86 }
87 resp = self.call_api('put', req).json_body 87 resp = self.call_api('put', req).json_body
88 self.service.add.assert_called_once_with( 88 self.service.add.assert_called_once_with(
89 bucket=self.test_build.bucket, 89 bucket=self.test_build.bucket,
90 tags=req['tags'], 90 tags=req['tags'],
91 parameters=None, 91 parameters=None,
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
124 def test_put_with_empty_bucket(self): 124 def test_put_with_empty_bucket(self):
125 self.expect_error('put', {'bucket': ''}, 'INVALID_INPUT') 125 self.expect_error('put', {'bucket': ''}, 'INVALID_INPUT')
126 126
127 def test_put_with_malformed_parameters_json(self): 127 def test_put_with_malformed_parameters_json(self):
128 req = { 128 req = {
129 'bucket':'chromium', 129 'bucket':'chromium',
130 'parameters_json': '}non-json', 130 'parameters_json': '}non-json',
131 } 131 }
132 self.expect_error('put', req, 'INVALID_INPUT') 132 self.expect_error('put', req, 'INVALID_INPUT')
133 133
134 ################################## PUT_BATCH #################################
135
136 def test_put_batch(self):
137 self.test_build.tags = ['owner:ivan']
138 build2 = model.Build(bucket='v8')
139 build2.put()
140 self.service.add_batch.return_value = [self.test_build, build2]
141 req = {
142 'builds': [
143 {
144 'bucket': self.test_build.bucket,
145 'tags': self.test_build.tags,
146 },
147 {
148 'bucket': build2.bucket,
149 },
150 ],
151 }
152 resp = self.call_api('put_batch', req).json_body
153 self.service.add_batch.assert_called_once_with([
154 {
155 'bucket': self.test_build.bucket,
156 'tags': self.test_build.tags,
157 'parameters': None,
158 'lease_expiration_date': None,
159 },
160 {
161 'bucket': build2.bucket,
162 'tags': [],
163 'parameters': None,
164 'lease_expiration_date': None,
165 },
166 ])
167
168 res_build0 = resp['builds'][0]
169 self.assertEqual(res_build0['id'], str(self.test_build.key.id()))
170 self.assertEqual(res_build0['bucket'], self.test_build.bucket)
171 self.assertEqual(res_build0['tags'], self.test_build.tags)
172
173 res_build1 = resp['builds'][1]
174 self.assertEqual(res_build1['id'], str(self.test_build.key.id()))
175 self.assertEqual(res_build1['bucket'], build2.bucket)
176
134 #################################### SEARCH ################################## 177 #################################### SEARCH ##################################
135 178
136 def test_search(self): 179 def test_search(self):
137 self.test_build.put() 180 self.test_build.put()
138 self.service.search.return_value = ([self.test_build], 'the cursor') 181 self.service.search.return_value = ([self.test_build], 'the cursor')
139 req = { 182 req = {
140 'bucket': ['chromium'], 183 'bucket': ['chromium'],
141 'cancelation_reason': 'CANCELED_EXPLICITLY', 184 'cancelation_reason': 'CANCELED_EXPLICITLY',
142 'created_by': 'user:x@chromium.org', 185 'created_by': 'user:x@chromium.org',
143 'result': 'CANCELED', 186 'result': 'CANCELED',
(...skipping 343 matching lines...) Expand 10 before | Expand all | Expand 10 after
487 self.error_test(errors.BuildNotFoundError, 'BUILD_NOT_FOUND') 530 self.error_test(errors.BuildNotFoundError, 'BUILD_NOT_FOUND')
488 531
489 def test_invalid_input_error(self): 532 def test_invalid_input_error(self):
490 self.error_test(errors.InvalidInputError, 'INVALID_INPUT') 533 self.error_test(errors.InvalidInputError, 'INVALID_INPUT')
491 534
492 def test_invalid_build_state_error(self): 535 def test_invalid_build_state_error(self):
493 self.error_test(errors.InvalidBuildStateError, 'INVALID_BUILD_STATE') 536 self.error_test(errors.InvalidBuildStateError, 'INVALID_BUILD_STATE')
494 537
495 def test_lease_expired_error(self): 538 def test_lease_expired_error(self):
496 self.error_test(errors.LeaseExpiredError, 'LEASE_EXPIRED') 539 self.error_test(errors.LeaseExpiredError, 'LEASE_EXPIRED')
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698