Esempio n. 1
0
 def test(cfg_text, expected_errors):
     ctx = config_component.validation.Context()
     cfg = project_config_pb2.BuildbucketCfg()
     protobuf.text_format.Merge(cfg_text, cfg)
     swarmingcfg.validate_builder_mixins(cfg.builder_mixins, ctx)
     self.assertEqual(map(config_test.errmsg, expected_errors),
                      ctx.result().messages)
Esempio n. 2
0
 def test_validate_buildbucket_cfg_fail(self):
     self.cfg_validation_test(
         project_config_pb2.BuildbucketCfg(buckets=[
             project_config_pb2.Bucket(
                 name='a',
                 acls=[
                     project_config_pb2.Acl(
                         group='writers',
                         identity='*****@*****.**',
                         role=project_config_pb2.Acl.READER),
                     project_config_pb2.Acl(
                         role=project_config_pb2.Acl.READER),
                 ]),
             project_config_pb2.Bucket(
                 name='b',
                 acls=[
                     project_config_pb2.Acl(
                         identity='ldap',
                         role=project_config_pb2.Acl.READER),
                     project_config_pb2.Acl(
                         group='*****@*****.**',
                         role=project_config_pb2.Acl.READER),
                 ]),
             project_config_pb2.Bucket(),
         ]), [
             errmsg(
                 'Bucket a: acl #1: either group or identity must be set, '
                 'not both'),
             errmsg('Bucket a: acl #2: group or identity must be set'),
             errmsg('Bucket b: acl #1: Identity has invalid format: ldap'),
             errmsg('Bucket b: acl #2: invalid group: [email protected]'),
             errmsg('Bucket #3: invalid name: Bucket not specified'),
         ])
Esempio n. 3
0
    def test_cron_update_buckets_change_reservation(self):
        config.Bucket(
            id='bucket',
            project_id='foo',
            revision='deadbeef',
            config_content='name: "bucket"',
        ).put()

        buildbucket_cfg = project_config_pb2.BuildbucketCfg(
            buckets=[project_config_pb2.Bucket(name='bucket')])
        self.mock(config_component, 'get_project_configs', mock.Mock())
        config_component.get_project_configs.return_value = {
            'bar': ('deadbeef', buildbucket_cfg),
        }

        config.cron_update_buckets()

        actual = config.Bucket.query().fetch()
        expected = [
            config.Bucket(
                id='bucket',
                project_id='bar',
                revision='deadbeef',
                config_content='name: "bucket"\n',
            )
        ]
        self.assertEqual(actual, expected)
Esempio n. 4
0
 def test_validate_buildbucket_cfg_unsorted(self):
     self.cfg_validation_test(
         project_config_pb2.BuildbucketCfg(buckets=[
             project_config_pb2.Bucket(name='b'),
             project_config_pb2.Bucket(name='a')
         ]), [
             validation_context.Message(
                 severity=logging.WARNING,
                 text='Buckets are not sorted by name'),
         ])
Esempio n. 5
0
    def cfg_test(self, swarming_text, mixins_text, expected_errors):
        swarming_cfg = project_config_pb2.Swarming()
        protobuf.text_format.Merge(swarming_text, swarming_cfg)

        buildbucket_cfg = project_config_pb2.BuildbucketCfg()
        protobuf.text_format.Merge(mixins_text, buildbucket_cfg)
        mixins = {m.name: m for m in buildbucket_cfg.builder_mixins}

        ctx = config_component.validation.Context()
        swarmingcfg.validate_project_cfg(swarming_cfg, mixins, True, ctx)
        self.assert_errors(ctx, expected_errors)
Esempio n. 6
0
    def cfg_test(self, swarming_text, mixins_text, expected_errors):
        ctx = config_component.validation.Context()

        swarming_cfg = project_config_pb2.Swarming()
        protobuf.text_format.Merge(swarming_text, swarming_cfg)

        buildbucket_cfg = project_config_pb2.BuildbucketCfg()
        protobuf.text_format.Merge(mixins_text, buildbucket_cfg)

        mixins = {m.name: m for m in buildbucket_cfg.builder_mixins}
        swarmingcfg.validate_cfg(swarming_cfg, mixins, True, ctx)
        self.assertEqual(map(config_test.errmsg, expected_errors),
                         ctx.result().messages)
Esempio n. 7
0
        def test(cfg_text, expected_builder_text):
            cfg = project_config_pb2.BuildbucketCfg()
            protobuf.text_format.Merge(cfg_text, cfg)
            builder = cfg.buckets[0].swarming.builders[0]
            swarmingcfg.flatten_builder(
                builder,
                cfg.buckets[0].swarming.builder_defaults,
                {m.name: m
                 for m in cfg.builder_mixins},
            )

            expected = project_config_pb2.Builder()
            protobuf.text_format.Merge(expected_builder_text, expected)
            self.assertEqual(builder, expected)
Esempio n. 8
0
    def test_validate_buildbucket_cfg_duplicate_names(self):
        config.Bucket(id='master.tryserver.v8',
                      project_id='v8',
                      revision='deadbeef',
                      config_content=MASTER_TRYSERVER_V8_CONFIG_TEXT).put()

        self.cfg_validation_test(
            project_config_pb2.BuildbucketCfg(buckets=[
                project_config_pb2.Bucket(name='a'),
                project_config_pb2.Bucket(name='a'),
                project_config_pb2.Bucket(
                    name='master.tryserver.chromium.linux'),
                project_config_pb2.Bucket(name='master.tryserver.v8'),
            ]), [
                errmsg('Bucket a: duplicate bucket name'),
                errmsg('Bucket master.tryserver.v8: '
                       'this name is already reserved by another project'),
            ])
Esempio n. 9
0
 def test_validate_buildbucket_cfg_success(self):
     self.cfg_validation_test(
         project_config_pb2.BuildbucketCfg(buckets=[
             project_config_pb2.Bucket(
                 name='good.name',
                 acls=[
                     project_config_pb2.Acl(
                         group='writers',
                         role=project_config_pb2.Acl.WRITER)
                 ],
             ),
             project_config_pb2.Bucket(
                 name='good.name2',
                 acls=[
                     project_config_pb2.Acl(
                         identity='*****@*****.**',
                         role=project_config_pb2.Acl.READER),
                     project_config_pb2.Acl(
                         identity='user:[email protected]',
                         role=project_config_pb2.Acl.READER),
                 ],
             )
         ]), [])
Esempio n. 10
0
def parse_cfg(text):
    cfg = project_config_pb2.BuildbucketCfg()
    protobuf.text_format.Merge(text, cfg)
    return cfg
Esempio n. 11
0
    def test_cron_update_buckets_with_existing(self):
        config.Bucket(
            id='master.tryserver.chromium.linux',
            project_id='chromium',
            revision='deadbeef',
            config_content=MASTER_TRYSERVER_CHROMIUM_LINUX_CONFIG_TEXT,
        ).put()

        # Will not be updated.
        config.Bucket(
            id='master.tryserver.v8',
            project_id='v8',
            revision='deadbeef',
            config_content=MASTER_TRYSERVER_V8_CONFIG_TEXT,
        ).put()

        # Will be deleted.
        config.Bucket(
            id='master.tryserver.chromium.win',
            project_id='chromium',
            revision='deadbeef',
            config_content=MASTER_TRYSERVER_CHROMIUM_WIN_CONFIG_TEXT,
        ).put()

        chromium_buildbucket_cfg = project_config_pb2.BuildbucketCfg(buckets=[
            project_config_pb2.Bucket(
                name='master.tryserver.chromium.linux',
                acls=[
                    project_config_pb2.Acl(role=project_config_pb2.Acl.READER,
                                           group='all'),
                    project_config_pb2.Acl(
                        role=project_config_pb2.Acl.SCHEDULER,
                        group='tryjob-access'),
                ],
            ),
            # Will be added.
            project_config_pb2.Bucket(
                name='master.tryserver.chromium.mac',
                acls=[
                    project_config_pb2.Acl(role=project_config_pb2.Acl.READER,
                                           group='all'),
                    project_config_pb2.Acl(
                        role=project_config_pb2.Acl.SCHEDULER,
                        group='tryjob-access'),
                ],
            ),
        ])

        v8_buildbucket_cfg = project_config_pb2.BuildbucketCfg(
            buckets=[
                # Reservation will fail.
                project_config_pb2.Bucket(
                    name='master.tryserver.chromium.linux',
                    acls=[
                        project_config_pb2.Acl(
                            role=project_config_pb2.Acl.WRITER,
                            group='v8-team')
                    ],
                ),
                # Will not be updated.
                project_config_pb2.Bucket(
                    name='master.tryserver.v8',
                    acls=[
                        project_config_pb2.Acl(
                            role=project_config_pb2.Acl.WRITER,
                            group='v8-team')
                    ],
                ),
            ], )

        self.mock(config_component, 'get_project_configs', mock.Mock())
        config_component.get_project_configs.return_value = {
            'chromium': ('new!', chromium_buildbucket_cfg),
            'v8': ('deadbeef', v8_buildbucket_cfg),
        }

        config.cron_update_buckets()

        actual = config.Bucket.query().fetch()
        actual = sorted(actual, key=lambda b: b.key.id())
        expected = [
            config.Bucket(
                id='master.tryserver.chromium.linux',
                project_id='chromium',
                revision='new!',
                config_content=MASTER_TRYSERVER_CHROMIUM_LINUX_CONFIG_TEXT,
            ),
            config.Bucket(
                id='master.tryserver.chromium.mac',
                project_id='chromium',
                revision='new!',
                config_content=MASTER_TRYSERVER_CHROMIUM_MAC_CONFIG_TEXT,
            ),
            config.Bucket(
                id='master.tryserver.v8',
                project_id='v8',
                revision='deadbeef',
                config_content=MASTER_TRYSERVER_V8_CONFIG_TEXT,
            ),
        ]
        self.assertEqual(actual, expected)
Esempio n. 12
0
    def test_cron_update_buckets(self):
        chromium_buildbucket_cfg = project_config_pb2.BuildbucketCfg(buckets=[
            project_config_pb2.Bucket(
                name='master.tryserver.chromium.linux',
                acls=[
                    project_config_pb2.Acl(role=project_config_pb2.Acl.READER,
                                           group='all'),
                    project_config_pb2.Acl(
                        role=project_config_pb2.Acl.SCHEDULER,
                        group='tryjob-access'),
                ],
            ),
            project_config_pb2.Bucket(
                name='master.tryserver.chromium.win',
                acls=[
                    project_config_pb2.Acl(role=project_config_pb2.Acl.READER,
                                           group='all'),
                    project_config_pb2.Acl(
                        role=project_config_pb2.Acl.SCHEDULER,
                        group='tryjob-access'),
                ],
            ),
        ])

        v8_buildbucket_cfg = project_config_pb2.BuildbucketCfg(buckets=[
            project_config_pb2.Bucket(
                name='master.tryserver.v8',
                acls=[
                    project_config_pb2.Acl(role=project_config_pb2.Acl.WRITER,
                                           group='v8-team')
                ],
            ),
        ])

        test_buildbucket_cfg = project_config_pb2.BuildbucketCfg(buckets=[
            project_config_pb2.Bucket(
                name='master.tryserver.test',
                acls=[
                    project_config_pb2.Acl(role=project_config_pb2.Acl.WRITER,
                                           identity='*****@*****.**')
                ],
            ),
        ])

        self.mock(config_component, 'get_project_configs', mock.Mock())
        config_component.get_project_configs.return_value = {
            'chromium': ('deadbeef', chromium_buildbucket_cfg),
            'v8': (None, v8_buildbucket_cfg),
            'test': ('babe', test_buildbucket_cfg),
        }

        config.cron_update_buckets()

        actual = config.Bucket.query().fetch()
        actual = sorted(actual, key=lambda b: b.key)
        expected = [
            config.Bucket(
                id='master.tryserver.chromium.linux',
                project_id='chromium',
                revision='deadbeef',
                config_content=MASTER_TRYSERVER_CHROMIUM_LINUX_CONFIG_TEXT,
            ),
            config.Bucket(
                id='master.tryserver.chromium.win',
                project_id='chromium',
                revision='deadbeef',
                config_content=MASTER_TRYSERVER_CHROMIUM_WIN_CONFIG_TEXT,
            ),
            config.Bucket(id='master.tryserver.test',
                          project_id='test',
                          revision='babe',
                          config_content=MASTER_TRYSERVER_TEST_CONFIG_TEXT),
            config.Bucket(
                id='master.tryserver.v8',
                project_id='v8',
                revision='sha1:cfc761d7a953a72ddea8f3d4c9a28e69777ca22c',
                config_content=MASTER_TRYSERVER_V8_CONFIG_TEXT,
            ),
        ]
        self.assertEqual(actual, expected)