Ejemplo n.º 1
0
  def setUp(self):
    super(V1ApiTest, self).setUp()
    gae_ts_mon.reset_for_unittest(disable=True)
    auth.disable_process_cache()
    user.clear_request_cache()

    self.patch(
        'components.utils.utcnow', return_value=datetime.datetime(2017, 1, 1)
    )
    self.future_date = utils.utcnow() + datetime.timedelta(days=1)
    # future_ts is str because INT64 values are formatted as strings.
    self.future_ts = str(utils.datetime_to_timestamp(self.future_date))

    config.put_bucket(
        'chromium',
        'a' * 40,
        test_util.parse_bucket_cfg(
            '''
            name: "luci.chromium.try"
            acls {
              role: SCHEDULER
              identity: "anonymous:anonymous"
            }
            '''
        ),
    )

    self.build_infra = test_util.build_bundle(id=1).infra
    self.build_infra.put()
Ejemplo n.º 2
0
 def setUp(self):
     super(AccessApiTest, self).setUp()
     self.servicer = api.AccessServicer()
     user.clear_request_cache()
     self.patch('components.auth.is_admin',
                autospec=True,
                return_value=False)
     self.patch('components.auth.is_group_member',
                autospec=True,
                return_value=True)
Ejemplo n.º 3
0
    def test_get_role(self, is_group_member):
        is_group_member.side_effect = lambda g, _=None: g == 'a-writers'

        self.assertEqual(self.get_role('p1/a'), Acl.WRITER)
        self.assertEqual(self.get_role('p2/a'), None)
        self.assertEqual(self.get_role('p3/c'), Acl.READER)
        self.assertEqual(self.get_role('p1/non.existing'), None)

        # Memcache test.
        user.clear_request_cache()
        self.assertEqual(self.get_role('p1/a'), Acl.WRITER)
Ejemplo n.º 4
0
  def setUp(self):
    super(BaseTest, self).setUp()
    user.clear_request_cache()

    self.patch('tq.enqueue_async', autospec=True, return_value=future(None))

    self.now = NOW
    self.patch(
        'components.utils.utcnow', autospec=True, side_effect=lambda: self.now
    )

    self.settings = service_config_pb2.SettingsCfg(
        swarming=dict(
            milo_hostname='milo.example.com',
            bbagent_package=dict(
                package_name='infra/tools/bbagent',
                version='luci-runner-version',
                version_canary='luci-runner-version-canary',
                builders=service_config_pb2.BuilderPredicate(
                    regex=['chromium/try/linux'],
                ),
            ),
            kitchen_package=dict(
                package_name='infra/tools/kitchen',
                version='kitchen-version',
                version_canary='kitchen-version-canary',
            ),
            user_packages=[
                dict(
                    package_name='infra/tools/git',
                    version='git-version',
                    version_canary='git-version-canary',
                ),
                dict(
                    package_name='infra/cpython/python',
                    version='py-version',
                    subdir='python',
                ),
                dict(
                    package_name='infra/excluded',
                    version='excluded-version',
                    builders=service_config_pb2.BuilderPredicate(
                        regex_exclude=['.*'],
                    ),
                ),
            ],
        ),
        known_public_gerrit_hosts=['chromium-review.googlesource.com'],
    )
    self.patch(
        'config.get_settings_async',
        autospec=True,
        return_value=future(self.settings)
    )
Ejemplo n.º 5
0
    def setUp(self):
        super(ConvertBucketTest, self).setUp()
        user.clear_request_cache()

        config.put_bucket(
            'chromium',
            'a' * 40,
            test_util.parse_bucket_cfg('''
            name: "luci.chromium.try"
            acls {
              role: READER
              identity: "anonymous:anonymous"
            }
            '''),
        )
Ejemplo n.º 6
0
    def test_get_accessible_buckets_async(self, is_group_member):
        is_group_member.side_effect = lambda g, _=None: g in ('xxx', 'yyy')

        config.get_buckets_async.return_value = future({
            'p1/available_bucket1':
            Bucket(
                name='available_bucket1',
                acls=[
                    Acl(role=Acl.READER, group='xxx'),
                    Acl(role=Acl.WRITER, group='yyy')
                ],
            ),
            'p2/available_bucket2':
            Bucket(
                name='available_bucket2',
                acls=[
                    Acl(role=Acl.READER, group='xxx'),
                    Acl(role=Acl.WRITER, group='zzz')
                ],
            ),
            'p3/available_bucket3':
            Bucket(
                name='available_bucket3',
                acls=[
                    Acl(role=Acl.READER, identity='user:[email protected]'),
                ],
            ),
            'p4/not_available_bucket':
            Bucket(
                name='not_available_bucket',
                acls=[Acl(role=Acl.WRITER, group='zzz')],
            ),
        })

        # call twice for per-request caching of futures.
        user.get_accessible_buckets_async()
        availble_buckets = user.get_accessible_buckets_async().get_result()
        expected = {
            'p1/available_bucket1',
            'p2/available_bucket2',
            'p3/available_bucket3',
        }
        self.assertEqual(availble_buckets, expected)

        # call again for memcache coverage.
        user.clear_request_cache()
        availble_buckets = user.get_accessible_buckets_async().get_result()
        self.assertEqual(availble_buckets, expected)
Ejemplo n.º 7
0
    def setUp(self):
        super(UserTest, self).setUp()
        self.current_identity = auth.Identity.from_bytes('user:[email protected]')
        self.patch('components.auth.get_current_identity',
                   autospec=True,
                   side_effect=lambda: self.current_identity)
        user.clear_request_cache()

        self.patch('components.auth.is_admin',
                   autospec=True,
                   return_value=False)

        bucket_a = Bucket(name='a',
                          acls=[
                              Acl(role=Acl.WRITER, group='a-writers'),
                              Acl(role=Acl.READER, group='a-readers'),
                          ])
        bucket_b = Bucket(name='b',
                          acls=[
                              Acl(role=Acl.WRITER, group='b-writers'),
                              Acl(role=Acl.READER, group='b-readers'),
                          ])
        bucket_c = Bucket(name='c',
                          acls=[
                              Acl(role=Acl.READER, group='c-readers'),
                              Acl(role=Acl.READER,
                                  identity='user:[email protected]'),
                              Acl(role=Acl.WRITER, group='c-writers'),
                              Acl(role=Acl.READER, identity='project:p1'),
                          ])
        all_buckets = [('p1', bucket_a), ('p2', bucket_b), ('p3', bucket_c)]
        self.patch('config.get_buckets_async',
                   autospec=True,
                   return_value=future(all_buckets))

        bucket_map = {
            config.format_bucket_id(pid, b.name): b
            for pid, b in all_buckets
        }
        self.patch('config.get_bucket_async',
                   autospec=True,
                   side_effect=lambda bid: future(
                       ('deadbeef', bucket_map.get(bid))))
Ejemplo n.º 8
0
    def setUp(self):
        super(BuildBucketServiceTest, self).setUp()
        user.clear_request_cache()

        self.current_identity = auth.Identity('service', 'unittest')
        self.patch('components.auth.get_current_identity',
                   side_effect=lambda: self.current_identity)
        self.patch('user.can_async', return_value=future(True))
        self.now = datetime.datetime(2015, 1, 1)
        self.patch('components.utils.utcnow', side_effect=lambda: self.now)

        config.put_bucket(
            'chromium',
            'a' * 40,
            test_util.parse_bucket_cfg('''
            name: "try"
            acls {
              role: READER
              identity: "anonymous:anonymous"
            }
            '''),
        )
        config.put_bucket(
            'chromium',
            'a' * 40,
            test_util.parse_bucket_cfg('''
            name: "luci"
            acls {
              role: READER
              identity: "anonymous:anonymous"
            }
            swarming {
              builders {
                name: "linux"
                swarming_host: "chromium-swarm.appspot.com"
                build_numbers: YES
                recipe {
                  cipd_package: "infra/recipe_bundle"
                  cipd_version: "refs/heads/master"
                  name: "recipe"
                }
              }
            }
            '''),
        )

        self.patch('swarming.cancel_task_async', return_value=future(None))

        self.patch(
            'google.appengine.api.app_identity.get_default_version_hostname',
            autospec=True,
            return_value='buildbucket.example.com')

        self.patch('tq.enqueue_async',
                   autospec=True,
                   return_value=future(None))
        self.patch('config.get_settings_async',
                   autospec=True,
                   return_value=future(service_config_pb2.SettingsCfg()))
        self.patch('swarming.cancel_task_transactionally_async',
                   autospec=True,
                   return_value=future(None))

        self.patch('search.TagIndex.random_shard_index', return_value=0)
Ejemplo n.º 9
0
    def setUp(self):
        super(SwarmbucketApiTest, self).setUp()

        self.patch('components.utils.utcnow',
                   autospec=True,
                   return_value=datetime.datetime(2015, 11, 30))

        self.patch(
            'google.appengine.api.app_identity.get_default_version_hostname',
            return_value='cr-buildbucket.appspot.com')

        self.patch('creation._should_be_canary', side_effect=lambda p: p > 50)

        auth_testing.reset_local_state()
        auth.bootstrap_group('all', [auth.Anonymous])
        user.clear_request_cache()

        chromium_cfg = test_util.parse_bucket_cfg('''
          name: "luci.chromium.try"
          acls {
            role: SCHEDULER
            group: "all"
          }
          swarming {
            hostname: "swarming.example.com"
            builders {
              name: "linux"
              swarming_host: "swarming.example.com"
              category: "Chromium"
              build_numbers: YES
              recipe {
                cipd_package: "infra/recipe_bundle"
                cipd_version: "refs/heads/master"
                name: "presubmit"
                properties: "foo:bar"
                properties_j: "baz:1"
              }
              dimensions: "foo:bar"
              dimensions: "baz:baz"
              auto_builder_dimension: YES

              # Override builder cache without timeout to make tests
              # simpler.
              caches {
                path: "builder"
                name: "builder_cache_name"
              }
            }
            builders {
              name: "windows"
              category: "Chromium"
              swarming_host: "swarming.example.com"
              recipe {
                cipd_package: "infra/recipe_bundle"
                cipd_version: "refs/heads/master"
                name: "presubmit"
              }

              # Override builder cache without timeout to make tests
              # simpler.
              caches {
                path: "builder"
                name: "builder_cache_name"
              }
            }
          }
    ''')
        config.put_bucket('chromium', 'deadbeef', chromium_cfg)

        v8_cfg = test_util.parse_bucket_cfg('''
      name: "luci.v8.try"
      acls {
        role: READER
        group: "all"
      }
    ''')
        config.put_bucket('v8', 'deadbeef', v8_cfg)

        props_def = {
            'extra_args': [
                'cook',
                '-recipe',
                '${recipe}',
                '-properties',
                '${properties_json}',
                '-logdog-project',
                '${project}',
            ],
            'cipd_input': {
                'packages': [
                    {
                        'package_name': 'infra/test/bar/${os_ver}',
                        'path': '.',
                        'version': 'latest',
                    },
                    {
                        'package_name': 'infra/test/foo/${platform}',
                        'path': 'third_party',
                        'version': 'stable',
                    },
                ],
            },
        }
        self.task_template = {
            'name':
            'bb-${build_id}-${project}-${builder}',
            'task_slices': [{
                'properties': props_def,
                'wait_for_capacity': False,
            }],
        }

        self.patch(
            'swarming._get_task_template',
            autospec=True,
            return_value=('rev', self.task_template),
        )

        self.settings = service_config_pb2.SettingsCfg(
            swarming=dict(
                milo_hostname='milo.example.com',
                luci_runner_package=dict(
                    package_name='infra/tools/luci_runner',
                    version='luci-runner-version',
                ),
                kitchen_package=dict(
                    package_name='infra/tools/kitchen',
                    version='kitchen-version',
                ),
                user_packages=[
                    dict(
                        package_name='infra/tools/git',
                        version='git-version',
                    ),
                ],
            ),
            logdog=dict(hostname='logdog.example.com'),
        )
        self.patch(
            'config.get_settings_async',
            autospec=True,
            return_value=future(self.settings),
        )
Ejemplo n.º 10
0
    def setUp(self):
        super(CreationTest, self).setUp()
        user.clear_request_cache()

        self.current_identity = auth.Identity('service', 'unittest')
        self.patch('components.auth.get_current_identity',
                   side_effect=lambda: self.current_identity)
        self.patch('user.can_async', return_value=future(True))
        self.now = datetime.datetime(2015, 1, 1)
        self.patch('components.utils.utcnow', side_effect=lambda: self.now)

        self.chromium_try = test_util.parse_bucket_cfg('''
        name: "luci.chromium.try"
        swarming {
          builders {
            name: "linux"
            build_numbers: YES
            swarming_host: "chromium-swarm.appspot.com"
            recipe {
              name: "recipe"
              cipd_package: "infra/recipe_bundle"
              cipd_version: "refs/heads/master"
            }
          }
          builders {
            name: "mac"
            swarming_host: "chromium-swarm.appspot.com"
            recipe {
              name: "recipe"
              cipd_package: "infra/recipe_bundle"
              cipd_version: "refs/heads/master"
            }
          }
          builders {
            name: "win"
            swarming_host: "chromium-swarm.appspot.com"
            recipe {
              name: "recipe"
              cipd_package: "infra/recipe_bundle"
              cipd_version: "refs/heads/master"
            }
          }
        }
        ''')
        config.put_bucket('chromium', 'a' * 40, self.chromium_try)
        self.create_sync_task = self.patch(
            'swarming.create_sync_task',
            autospec=True,
            return_value={'is_payload': True},
        )
        self.patch('swarming.cancel_task_async', return_value=future(None))

        self.patch(
            'google.appengine.api.app_identity.get_default_version_hostname',
            autospec=True,
            return_value='buildbucket.example.com')

        self.patch('tq.enqueue_async',
                   autospec=True,
                   return_value=future(None))
        self.settings = service_config_pb2.SettingsCfg(
            swarming=dict(global_caches=[dict(path='git')]),
            logdog=dict(hostname='logs.example.com'),
        )
        self.patch('config.get_settings_async',
                   autospec=True,
                   return_value=future(self.settings))

        self.patch('creation._should_update_builder',
                   side_effect=lambda p: p > 0.5)
        self.patch('creation._should_be_canary', side_effect=lambda p: p > 50)

        self.patch('search.TagIndex.random_shard_index', return_value=0)
Ejemplo n.º 11
0
    def setUp(self):
        super(SwarmbucketApiTest, self).setUp()

        self.patch('components.utils.utcnow',
                   autospec=True,
                   return_value=datetime.datetime(2015, 11, 30))

        self.patch(
            'google.appengine.api.app_identity.get_default_version_hostname',
            return_value='cr-buildbucket.appspot.com')

        self.patch('creation._should_be_canary', side_effect=lambda p: p > 50)

        auth_testing.reset_local_state()
        auth.bootstrap_group('all', [auth.Anonymous])
        user.clear_request_cache()

        chromium_cfg = test_util.parse_bucket_cfg('''
          name: "luci.chromium.try"
          acls {
            role: SCHEDULER
            group: "all"
          }
          swarming {
            hostname: "swarming.example.com"
            builders {
              name: "linux"
              swarming_host: "swarming.example.com"
              category: "Chromium"
              build_numbers: YES
              recipe {
                cipd_package: "infra/recipe_bundle"
                cipd_version: "refs/heads/master"
                name: "presubmit"
                properties: "foo:bar"
                properties_j: "baz:1"
              }
              dimensions: "foo:bar"
              dimensions: "baz:baz"
              auto_builder_dimension: YES

              # Override builder cache without timeout to make tests
              # simpler.
              caches {
                path: "builder"
                name: "builder_cache_name"
              }
            }
            builders {
              name: "windows"
              category: "Chromium"
              swarming_host: "swarming.example.com"
              recipe {
                cipd_package: "infra/recipe_bundle"
                cipd_version: "refs/heads/master"
                name: "presubmit"
              }

              # Override builder cache without timeout to make tests
              # simpler.
              caches {
                path: "builder"
                name: "builder_cache_name"
              }
            }
          }
    ''')
        config.put_bucket('chromium', 'deadbeef', chromium_cfg)

        v8_cfg = test_util.parse_bucket_cfg('''
      name: "luci.v8.try"
      acls {
        role: READER
        group: "all"
      }
    ''')
        config.put_bucket('v8', 'deadbeef', v8_cfg)

        self.settings = service_config_pb2.SettingsCfg(
            swarming=dict(
                milo_hostname='milo.example.com',
                bbagent_package=dict(
                    package_name='infra/tools/bbagent',
                    version='luci-runner-version',
                ),
                kitchen_package=dict(
                    package_name='infra/tools/kitchen',
                    version='kitchen-version',
                ),
                user_packages=[
                    dict(
                        package_name='infra/tools/git',
                        version='git-version',
                    ),
                ],
            ),
            logdog=dict(hostname='logdog.example.com'),
        )
        self.patch(
            'config.get_settings_async',
            autospec=True,
            return_value=future(self.settings),
        )