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

Unified 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: removed memcache import 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « appengine/cr-buildbucket/service.py ('k') | appengine/cr-buildbucket/test/service_test.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: appengine/cr-buildbucket/test/api_test.py
diff --git a/appengine/cr-buildbucket/test/api_test.py b/appengine/cr-buildbucket/test/api_test.py
index dca6f417f44192f31c5fbe0ceb093b3c8ff853d6..8c91ddc9449ba1d9237e2680cb737799c5e251a9 100644
--- a/appengine/cr-buildbucket/test/api_test.py
+++ b/appengine/cr-buildbucket/test/api_test.py
@@ -78,7 +78,7 @@ class BuildBucketApiTest(testing.EndpointsTestCase):
##################################### PUT ####################################
def test_put(self):
- self.test_build.tags = ['owner=ivan']
+ self.test_build.tags = ['owner:ivan']
self.service.add.return_value = self.test_build
req = {
'bucket': self.test_build.bucket,
@@ -90,6 +90,7 @@ class BuildBucketApiTest(testing.EndpointsTestCase):
tags=req['tags'],
parameters=None,
lease_expiration_date=None,
+ client_operation_id=None,
)
self.assertEqual(resp['build']['id'], str(self.test_build.key.id()))
self.assertEqual(resp['build']['bucket'], req['bucket'])
@@ -117,13 +118,11 @@ class BuildBucketApiTest(testing.EndpointsTestCase):
tags=[],
parameters=None,
lease_expiration_date=self.future_date,
+ client_operation_id=None,
)
self.assertEqual(
resp['build']['lease_expiration_ts'], req['lease_expiration_ts'])
- def test_put_with_empty_bucket(self):
- self.expect_error('put', {'bucket': ''}, 'INVALID_INPUT')
-
def test_put_with_malformed_parameters_json(self):
req = {
'bucket':'chromium',
@@ -131,6 +130,72 @@ class BuildBucketApiTest(testing.EndpointsTestCase):
}
self.expect_error('put', req, 'INVALID_INPUT')
+ ################################## PUT_BATCH #################################
+
+ def test_put_batch(self):
+ self.test_build.tags = ['owner:ivan']
+ build1_future = ndb.Future()
+ build1_future.set_result(self.test_build)
+
+ build2 = model.Build(id=2, bucket='v8')
+ build2_future = ndb.Future()
+ build2_future.set_result(build2)
+
+ bad_build_future = ndb.Future()
+ bad_build_future.set_exception(errors.InvalidInputError('Just bad'))
+
+ self.service.add_async.side_effect = [
+ build1_future, build2_future, bad_build_future]
+ req = {
+ 'builds': [
+ {
+ 'bucket': self.test_build.bucket,
+ 'tags': self.test_build.tags,
+ 'client_operation_id': '0',
+ },
+ {
+ 'bucket': build2.bucket,
+ 'client_operation_id': '1',
+ },
+ {
+ 'bucket': 'bad name',
+ 'client_operation_id': '2',
+ },
+ ],
+ }
+ resp = self.call_api('put_batch', req).json_body
+ self.service.add_async.assert_any_call(
+ bucket=self.test_build.bucket,
+ tags=self.test_build.tags,
+ parameters=None,
+ lease_expiration_date=None,
+ client_operation_id='0',
+ )
+ self.service.add_async.assert_any_call(
+ bucket=build2.bucket,
+ tags=[],
+ parameters=None,
+ lease_expiration_date=None,
+ client_operation_id='1',
+ )
+
+ res0 = resp['results'][0]
+ self.assertEqual(res0['client_operation_id'], '0')
+ self.assertEqual(res0['build']['id'], str(self.test_build.key.id()))
+ self.assertEqual(res0['build']['bucket'], self.test_build.bucket)
+ self.assertEqual(res0['build']['tags'], self.test_build.tags)
+
+ res1 = resp['results'][1]
+ self.assertEqual(res1['client_operation_id'], '1')
+ self.assertEqual(res1['build']['id'], str(build2.key.id()))
+ self.assertEqual(res1['build']['bucket'], build2.bucket)
+
+ res2 = resp['results'][2]
+ self.assertEqual(res2, {
+ 'client_operation_id': '2',
+ 'error': {'reason': 'INVALID_INPUT', 'message': 'Just bad'},
+ })
+
#################################### SEARCH ##################################
def test_search(self):
@@ -247,9 +312,7 @@ class BuildBucketApiTest(testing.EndpointsTestCase):
self.assertEqual(res['build']['url'], req['url'])
def test_start_completed_build(self):
- def raise_completed(*_, **__):
- raise errors.BuildIsCompletedError()
- self.service.start.side_effect = raise_completed
+ self.service.start.side_effect = errors.BuildIsCompletedError
req = {
'id': self.test_build.key.id(),
'lease_key': 42,
@@ -478,9 +541,7 @@ class BuildBucketApiTest(testing.EndpointsTestCase):
#################################### ERRORS ##################################
def error_test(self, error_class, reason):
- def raise_service_error(*_, **__):
- raise error_class()
- self.service.get.side_effect = raise_service_error
+ self.service.get.side_effect = error_class
self.expect_error('get', {'id': 123}, reason)
def test_build_not_found_error(self):
« no previous file with comments | « appengine/cr-buildbucket/service.py ('k') | appengine/cr-buildbucket/test/service_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698