Exemplo n.º 1
0
 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')
Exemplo n.º 2
0
    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)
Exemplo n.º 3
0
    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()
Exemplo n.º 4
0
 def test_convert_bucket_resolution_fails(self):
   with self.assertRaises(auth.AuthorizationError):
     api.convert_bucket('master.x')
Exemplo n.º 5
0
 def test_convert_bucket_luci(self):
   self.assertEqual(api.convert_bucket('luci.chromium.try'), 'chromium/try')
Exemplo n.º 6
0
 def test_convert_bucket_native(self):
   self.assertEqual(api.convert_bucket('chromium/try'), 'chromium/try')