def test_convert_bucket_access_check(self): config.put_bucket( 'chromium', 'a' * 40, test_util.parse_bucket_cfg('name: "secret"'), ) with self.assertRaises(auth.AuthorizationError): api.convert_bucket('secret')
def get_task_def(self, request): """Returns a swarming task definition for a build request.""" try: # Checks access too. request.build_request.bucket = api.convert_bucket( request.build_request.bucket) build_request = api.put_request_message_to_build_request( request.build_request) # Find builder config. builder_id = build_request.schedule_build_request.builder builder_cfg = None bucket_id = config.format_bucket_id(builder_id.project, builder_id.bucket) _, bucket_cfg = config.get_bucket_async(bucket_id).get_result() assert bucket_cfg, 'if there is no bucket, access check would fail' for cfg in bucket_cfg.swarming.builders: # pragma: no branch if cfg.name == builder_id.builder: builder_cfg = cfg break if not builder_cfg: raise endpoints.NotFoundException( 'Builder %s/%s/%s not found' % (builder_id.project, builder_id.bucket, builder_id.builder)) settings = config.get_settings_async().get_result() # Create a fake build and prepare a task definition. identity = auth.get_current_identity() build = build_request.create_build_async( 1, settings, builder_cfg, identity, utils.utcnow()).get_result() assert build.proto.HasField('infra') build.proto.number = 1 settings = config.get_settings_async().get_result() task_def = swarming.compute_task_def(build, settings, fake_build=True) task_def_json = json.dumps(task_def) return GetTaskDefinitionResponseMessage( task_definition=task_def_json, swarming_host=build.proto.infra.swarming.hostname, ) except errors.InvalidInputError as ex: raise endpoints.BadRequestException('invalid build request: %s' % ex.message)
def set_next_build_number(self, request): """Sets the build number that will be used for the next build.""" bucket_id = api.convert_bucket(request.bucket) if not user.can_set_next_number_async(bucket_id).get_result(): raise endpoints.ForbiddenException('access denied') _, bucket = config.get_bucket(bucket_id) if not any(b.name == request.builder for b in bucket.swarming.builders): raise endpoints.BadRequestException( 'builder "%s" not found in bucket "%s"' % (request.builder, bucket_id)) project, bucket = config.parse_bucket_id(bucket_id) builder_id = build_pb2.BuilderID(project=project, bucket=bucket, builder=request.builder) seq_name = sequence.builder_seq_name(builder_id) try: sequence.set_next(seq_name, request.next_number) except ValueError as ex: raise endpoints.BadRequestException(str(ex)) return message_types.VoidMessage()
def test_convert_bucket_resolution_fails(self): with self.assertRaises(auth.AuthorizationError): api.convert_bucket('master.x')
def test_convert_bucket_luci(self): self.assertEqual(api.convert_bucket('luci.chromium.try'), 'chromium/try')
def test_convert_bucket_native(self): self.assertEqual(api.convert_bucket('chromium/try'), 'chromium/try')