def test_trimming_exclude(self, get_async): get_async.return_value = future( test_util.build(input=dict( properties=bbutil.dict_to_struct({'a': 'b'}))), ) req = rpc_pb2.GetBuildRequest(id=1) res = self.call(self.api.GetBuild, req) self.assertFalse(res.input.HasField('properties'))
def test_valid_number(self): msg = rpc_pb2.GetBuildRequest( builder=build_pb2.BuilderID(project='chromium', bucket='try', builder='linux-rel'), build_number=1, ) self.assert_valid(msg)
def test_not_found_by_number(self): builder_id = build_pb2.BuilderID(project='chromium', bucket='try', builder='linux-try') req = rpc_pb2.GetBuildRequest(builder=builder_id, build_number=2) self.call(self.api.GetBuild, req, expected_code=prpc.StatusCode.NOT_FOUND)
def test_trimming_include(self, get_async): get_async.return_value = future( test_util.build(input=dict( properties=bbutil.dict_to_struct({'a': 'b'}))), ) req = rpc_pb2.GetBuildRequest(id=1, fields=dict(paths=['input.properties'])) res = self.call(self.api.GetBuild, req) self.assertEqual(res.input.properties.items(), [('a', 'b')])
def test_invalid_field_mask(self): req = rpc_pb2.GetBuildRequest(fields=dict(paths=['invalid'])) self.call( self.api.GetBuild, req, expected_code=prpc.StatusCode.INVALID_ARGUMENT, expected_details=('invalid fields: invalid path "invalid": ' 'field "invalid" does not exist in message ' 'buildbucket.v2.Build'))
def error_handling_test(self, ex, expected_code, expected_details): @api.rpc_impl_async('GetBuild') @ndb.tasklet def get_build_async(_req, _res, _ctx, _mask): raise ex ctx = prpc_context.ServicerContext() req = rpc_pb2.GetBuildRequest(id=1) res = build_pb2.Build() # pylint: disable=no-value-for-parameter get_build_async(req, res, ctx).get_result() self.assertEqual(ctx.code, expected_code) self.assertEqual(ctx.details, expected_details)
def test_by_number(self, search_async): builder_id = build_pb2.BuilderID(project='chromium', bucket='try', builder='linux-try') build = test_util.build(id=1, builder=builder_id, number=2) search_async.return_value = future(([build], None)) req = rpc_pb2.GetBuildRequest(builder=builder_id, build_number=2) res = self.call(self.api.GetBuild, req) self.assertEqual(res.id, 1) self.assertEqual(res.builder, builder_id) self.assertEqual(res.number, 2) search_async.assert_called_once_with( search.Query( bucket_ids=['chromium/try'], tags=['build_address:luci.chromium.try/linux-try/2'], include_experimental=True, ))
def test_id_and_builder(self): msg = rpc_pb2.GetBuildRequest( id=1, builder=build_pb2.BuilderID(project='chromium'), ) self.assert_invalid(msg, r'mutually exclusive')
def test_empty(self): msg = rpc_pb2.GetBuildRequest() self.assert_invalid( msg, r'id or \(builder and build_number\) are required')
def test_valid_id(self): msg = rpc_pb2.GetBuildRequest(id=1) self.assert_valid(msg)
def test_id_with_number(self): req = rpc_pb2.GetBuildRequest(id=1, build_number=1) self.call(self.api.GetBuild, req, expected_code=prpc.StatusCode.INVALID_ARGUMENT)
def test_empty_request(self): req = rpc_pb2.GetBuildRequest() self.call(self.api.GetBuild, req, expected_code=prpc.StatusCode.INVALID_ARGUMENT)
def test_not_found_by_id(self): req = rpc_pb2.GetBuildRequest(id=54) self.call(self.api.GetBuild, req, expected_code=prpc.StatusCode.NOT_FOUND)
def test_by_id(self, get_async): get_async.return_value = future(test_util.build(id=54)) req = rpc_pb2.GetBuildRequest(id=54) res = self.call(self.api.GetBuild, req) self.assertEqual(res.id, 54) get_async.assert_called_once_with(54)