Example #1
0
  def test_import_projects_exception(self):
    self.mock(gitiles_import, 'import_project', mock.Mock())
    gitiles_import.import_project.side_effect = Exception
    self.mock(projects, 'get_refs', mock.Mock(return_value=[]))

    self.mock(projects, 'get_projects', mock.Mock())
    projects.get_projects.return_value = [
      service_config_pb2.Project(
          id='chromium',
          config_location=service_config_pb2.ConfigSetLocation(
            url='https://localhost/chromium/src/',
            storage_type=service_config_pb2.ConfigSetLocation.GITILES,
          ),
      ),
      service_config_pb2.Project(
          id='will-fail',
          config_location=service_config_pb2.ConfigSetLocation(
            url='https://localhost/chromium/src/',
            storage_type=service_config_pb2.ConfigSetLocation.GITILES,
          ),
      )
    ]

    gitiles_import.import_projects()
    self.assertEqual(gitiles_import.import_project.call_count, 2)
Example #2
0
    def setUp(self):
        super(ApiTest, self).setUp()
        self.mock(acl, 'has_projects_access', mock.Mock())
        acl.has_projects_access.side_effect = (
            lambda pids: {pid: pid != 'secret'
                          for pid in pids})

        self.mock(acl, 'has_services_access',
                  lambda sids: {sid: True
                                for sid in sids})
        self.mock(projects, 'get_projects', mock.Mock())
        projects.get_projects.return_value = [
            service_config_pb2.Project(id='chromium'),
            service_config_pb2.Project(id='v8'),
        ]
        self.mock(
            projects, 'get_metadata_async',
            mock.Mock(
                return_value=future({
                    'chromium': project_config_pb2.ProjectCfg(),
                    'v8': project_config_pb2.ProjectCfg(),
                })))
        self.mock(
            projects, 'get_repos_async',
            mock.Mock(return_value=future({
                'chromium': (projects.RepositoryType.GITILES,
                             'https://chromium.example.com'),
                'v8': (projects.RepositoryType.GITILES,
                       'https://v8.example.com'),
            })))
Example #3
0
 def setUp(self):
     super(ApiTest, self).setUp()
     self.mock(acl, 'has_project_access', mock.Mock())
     acl.has_project_access.side_effect = (lambda pid: pid != 'secret')
     self.mock(acl, 'has_service_access', mock.Mock(return_value=True))
     self.mock(projects, 'get_projects', mock.Mock())
     projects.get_projects.return_value = [
         service_config_pb2.Project(id='chromium'),
         service_config_pb2.Project(id='v8'),
     ]
     self.mock(projects, 'get_metadata', mock.Mock())
     projects.get_metadata.return_value = project_config_pb2.ProjectCfg()
     self.mock(projects, 'get_repo', mock.Mock())
     projects.get_repo.return_value = (projects.RepositoryType.GITILES,
                                       'https://localhost/project')
Example #4
0
  def test_get_config_multi(self):
    projects.get_projects.return_value.extend([
      service_config_pb2.Project(id='inconsistent'),
      service_config_pb2.Project(id='secret'),
    ])
    projects.get_metadata_async.return_value.get_result().update({
      'inconsistent': project_config_pb2.ProjectCfg(access='all'),
      'secret': project_config_pb2.ProjectCfg(access='administrators'),
    })
    projects.get_repos_async.return_value.get_result().update({
      'inconsistent': (None, None),
      'secret': (projects.RepositoryType.GITILES, 'https://localhost/secret'),
    })

    self.mock(storage, 'get_latest_configs_async', mock.Mock())
    storage.get_latest_configs_async.return_value = future({
      'projects/chromium': (
          'deadbeef',
          'https://x.com/+/deadbeef',
          'abc0123',
          'config text'
      ),
      'projects/v8': (
          'beefdead',
          'https://x.com/+/beefdead',
          'ccc123',
          None  # no content
      ),
      'projects/secret': (
          'badcoffee',
          'https://x.com/+/badcoffee',
          'abcabc',
          'abcsdjksl'
      ),
    })

    req = {'path': 'cq.cfg'}
    resp = self.call_api('get_project_configs', req).json_body

    self.assertEqual(resp, {
      'configs': [{
        'config_set': 'projects/chromium',
        'revision': 'deadbeef',
        'content_hash': 'abc0123',
        'content': base64.b64encode('config text'),
        'url': 'https://x.com/+/deadbeef',
      }],
    })
    def test_import_ref(self):
        self.mock(gitiles_import, '_import_config_set', mock.Mock())
        self.mock(projects, 'get_project', mock.Mock())
        self.mock(projects, 'get_refs', mock.Mock())
        projects.get_project.return_value = service_config_pb2.Project(
            id='chromium',
            gitiles_location=service_config_pb2.GitilesLocation(
                repo='https://localhost/chromium/src',
                ref='refs/heads/infra/config',
            ),
        )
        projects.get_refs.return_value = {
            'chromium': [
                project_config_pb2.RefsCfg.Ref(name='refs/heads/release42',
                                               config_path='/my-configs'),
            ],
        }

        gitiles_import.import_ref('chromium', 'refs/heads/release42')

        gitiles_import._import_config_set.assert_called_once_with(
            'projects/chromium/refs/heads/release42',
            gitiles.Location(
                hostname='localhost',
                project='chromium/src',
                treeish='refs/heads/release42',
                path='/my-configs',
            ),
        )
Example #6
0
    def test__project_and_ref_config_sets(self):
        self.mock(gitiles_import, '_import_config_set', mock.Mock())
        self.mock(projects, 'get_projects', mock.Mock())
        self.mock(projects, 'get_refs', mock.Mock())
        projects.get_projects.return_value = [
            service_config_pb2.Project(
                id='chromium',
                config_location=service_config_pb2.ConfigSetLocation(
                    url='https://localhost/chromium/src/',
                    storage_type=service_config_pb2.ConfigSetLocation.GITILES,
                )),
        ]
        RefType = project_config_pb2.RefsCfg.Ref
        projects.get_refs.return_value = {
            'chromium': [
                RefType(name='refs/heads/master'),
                RefType(name='refs/heads/release42',
                        config_path='/my-configs'),
            ],
        }

        self.assertEqual(gitiles_import._project_and_ref_config_sets(), [
            'projects/chromium',
            'projects/chromium/refs/heads/master',
            'projects/chromium/refs/heads/release42',
        ])
    def test__project_and_ref_config_sets(self):
        self.mock(gitiles_import, '_import_config_set', mock.Mock())
        self.mock(projects, 'get_projects', mock.Mock())
        self.mock(projects, 'get_refs', mock.Mock())
        projects.get_projects.return_value = [
            service_config_pb2.Project(
                id='chromium',
                gitiles_location=service_config_pb2.GitilesLocation(
                    repo='https://localhost/chromium/src',
                    ref='refs/heads/infra/config',
                    path='generated',
                )),
        ]
        RefType = project_config_pb2.RefsCfg.Ref
        projects.get_refs.return_value = {
            'chromium': [
                RefType(name='refs/heads/master'),
                RefType(name='refs/heads/release42',
                        config_path='/my-configs'),
            ],
        }

        self.assertEqual(gitiles_import._project_and_ref_config_sets(), [
            'projects/chromium',
            'projects/chromium/refs/heads/master',
            'projects/chromium/refs/heads/release42',
        ])
Example #8
0
    def test_get_projects(self):
        projects.get_projects.return_value = [
            service_config_pb2.Project(id='chromium'),
            service_config_pb2.Project(id='v8'),
            service_config_pb2.Project(id='inconsistent'),
            service_config_pb2.Project(id='secret'),
        ]
        projects.get_metadata_async.return_value = future({
            'chromium':
            project_config_pb2.ProjectCfg(name='Chromium, the best browser',
                                          access='all'),
            'v8':
            project_config_pb2.ProjectCfg(access='all'),
            'inconsistent':
            project_config_pb2.ProjectCfg(access='all'),
            'secret':
            project_config_pb2.ProjectCfg(access='administrators'),
        })
        projects.get_repos_async.return_value = future({
            'chromium':
            (projects.RepositoryType.GITILES, 'https://chromium.example.com'),
            'v8': (projects.RepositoryType.GITILES, 'https://v8.example.com'),
            'inconsistent': (None, None),
            'secret':
            (projects.RepositoryType.GITILES, 'https://localhost/secret'),
        })

        resp = self.call_api('get_projects', {}).json_body

        self.assertEqual(
            resp, {
                'projects': [
                    {
                        'id': 'chromium',
                        'name': 'Chromium, the best browser',
                        'repo_type': 'GITILES',
                        'repo_url': 'https://chromium.example.com',
                    },
                    {
                        'id': 'v8',
                        'repo_type': 'GITILES',
                        'repo_url': 'https://v8.example.com',
                    },
                ],
            })
Example #9
0
    def test_get_config_multi(self):
        self.mock_refs()
        projects.get_projects.return_value.extend([
            service_config_pb2.Project(id='inconsistent'),
            service_config_pb2.Project(id='secret'),
        ])

        self.mock(storage, 'get_latest_multi_async', mock.Mock())
        storage.get_latest_multi_async.return_value = future([
            {
                'config_set': 'projects/chromium',
                'revision': 'deadbeef',
                'content_hash': 'abc0123',
                'content': 'config text',
            },
            {
                'config_set': 'projects/v8',
                'revision': 'beefdead',
                'content_hash': 'ccc123',
                # No content
            },
            {
                'config_set': 'projects/secret',
                'revision': 'badcoffee',
                'content_hash': 'abcabc',
                'content': 'abcsdjksl',
            },
        ])

        req = {'path': 'cq.cfg'}
        resp = self.call_api('get_project_configs', req).json_body

        self.assertEqual(
            resp, {
                'configs': [{
                    'config_set': 'projects/chromium',
                    'revision': 'deadbeef',
                    'content_hash': 'abc0123',
                    'content': base64.b64encode('config text'),
                }],
            })
Example #10
0
 def test_import_ref_not_found(self):
   self.mock(projects, 'get_project', mock.Mock())
   projects.get_project.return_value = service_config_pb2.Project(
       id='chromium',
       config_location=service_config_pb2.ConfigSetLocation(
           url='https://localhost/chromium/src/',
           storage_type=service_config_pb2.ConfigSetLocation.GITILES,
       ),
   )
   self.mock(projects, 'get_ref', mock.Mock(return_value=None))
   with self.assertRaises(gitiles_import.NotFoundError):
     gitiles_import.import_ref('chromium', 'refs/heads/release42')
Example #11
0
  def test_import_projects_and_refs(self):
    self.mock(gitiles_import, 'import_config_set', mock.Mock())
    self.mock(projects, 'get_projects', mock.Mock())
    self.mock(projects, 'get_refs', mock.Mock())
    projects.get_projects.return_value = [
      service_config_pb2.Project(
          id='chromium',
          config_location=service_config_pb2.ConfigSetLocation(
            url='https://localhost/chromium/src/',
            storage_type=service_config_pb2.ConfigSetLocation.GITILES,
          )
      ),
      service_config_pb2.Project(
          id='bad_location',
          config_location=service_config_pb2.ConfigSetLocation(
            url='https://localhost/',
            storage_type=service_config_pb2.ConfigSetLocation.GITILES,
          ),
      ),
      service_config_pb2.Project(
          id='non-gitiles',
      ),
    ]
    RefType = project_config_pb2.RefsCfg.Ref
    projects.get_refs.return_value = [
      RefType(name='refs/heads/master'),
      RefType(name='refs/heads/release42', config_path='/my-configs'),
    ]

    gitiles_import.import_projects()

    self.assertEqual(gitiles_import.import_config_set.call_count, 3)
    gitiles_import.import_config_set.assert_any_call(
        'projects/chromium', 'https://localhost/chromium/src/+/refs/heads/luci')
    gitiles_import.import_config_set.assert_any_call(
        'projects/chromium/refs/heads/master',
        'https://localhost/chromium/src/+/refs/heads/master/luci')
    gitiles_import.import_config_set.assert_any_call(
        'projects/chromium/refs/heads/release42',
        'https://localhost/chromium/src/+/refs/heads/release42/my-configs')
Example #12
0
    def test_get_projects(self):
        projects.get_projects.return_value = [
            service_config_pb2.Project(id='chromium'),
            service_config_pb2.Project(id='v8'),
            service_config_pb2.Project(id='inconsistent'),
            service_config_pb2.Project(id='secret'),
        ]
        projects.get_metadata.side_effect = [
            project_config_pb2.ProjectCfg(name='Chromium, the best browser',
                                          access='all'),
            project_config_pb2.ProjectCfg(access='all'),
            project_config_pb2.ProjectCfg(access='all'),
            project_config_pb2.ProjectCfg(access='administrators'),
        ]
        projects.get_repo.side_effect = [
            (projects.RepositoryType.GITILES, 'http://localhost/chromium'),
            (projects.RepositoryType.GITILES, 'http://localhost/v8'),
            (None, None),
            (projects.RepositoryType.GITILES, 'http://localhost/secret'),
        ]

        resp = self.call_api('get_projects', {}).json_body

        self.assertEqual(
            resp, {
                'projects': [
                    {
                        'id': 'chromium',
                        'name': 'Chromium, the best browser',
                        'repo_type': 'GITILES',
                        'repo_url': 'http://localhost/chromium',
                    },
                    {
                        'id': 'v8',
                        'repo_type': 'GITILES',
                        'repo_url': 'http://localhost/v8',
                    },
                ],
            })
Example #13
0
  def test_import_project(self):
    self.mock(gitiles_import, '_import_config_set', mock.Mock())
    self.mock(projects, 'get_project', mock.Mock())
    projects.get_project.return_value = service_config_pb2.Project(
        id='chromium',
        config_location=service_config_pb2.ConfigSetLocation(
            url='https://localhost/chromium/src/',
            storage_type=service_config_pb2.ConfigSetLocation.GITILES,
        ),
    )

    gitiles_import.import_project('chromium')

    gitiles_import._import_config_set.assert_called_once_with(
        'projects/chromium', 'https://localhost/chromium/src/+/refs/heads/luci')
 def test_import_ref_not_found(self):
     self.mock(projects, 'get_project', mock.Mock())
     projects.get_project.return_value = service_config_pb2.Project(
         id='chromium',
         gitiles_location=service_config_pb2.GitilesLocation(
             repo='https://localhost/chromium/src',
             ref='refs/heads/infra/config',
         ),
     )
     self.mock(projects, 'get_refs',
               mock.Mock(return_value={
                   'chromium': [],
               }))
     with self.assertRaises(gitiles_import.NotFoundError):
         gitiles_import.import_ref('chromium', 'refs/heads/release42')
Example #15
0
 def test_get_projects(self):
     storage.get_latest_async.return_value.set_result('''
   projects {
     id: "chromium"
     config_location {
       storage_type: GITILES
       url: "http://localhost"
     }
   }
 ''')
     expected = service_config_pb2.ProjectsCfg(projects=[
         service_config_pb2.Project(
             id='chromium',
             config_location=service_config_pb2.ConfigSetLocation(
                 storage_type=service_config_pb2.ConfigSetLocation.GITILES,
                 url='http://localhost')),
     ], )
     self.assertEqual(projects.get_projects(), expected.projects)
    def test_import_project_ref_not_resolved(self):
        self.mock(projects, 'get_project', mock.Mock())
        projects.get_project.return_value = service_config_pb2.Project(
            id='chromium',
            config_location=service_config_pb2.ConfigSetLocation(
                url='https://localhost/chromium/src/',
                storage_type=service_config_pb2.ConfigSetLocation.GITILES,
            ),
        )

        self.mock(gitiles.Location, 'parse_resolve',
                  mock.Mock(side_effect=gitiles.TreeishResolutionError()))

        storage.ConfigSet(id='projects/chromium',
                          location='https://example.com').put()

        gitiles_import.import_project('chromium')
        self.assertIsNone(storage.ConfigSet.get_by_id('projects/chromium'))
Example #17
0
  def test_import_ref(self):
    self.mock(gitiles_import, '_import_config_set', mock.Mock())
    self.mock(projects, 'get_project', mock.Mock())
    self.mock(projects, 'get_ref', mock.Mock())
    projects.get_project.return_value = service_config_pb2.Project(
        id='chromium',
        config_location=service_config_pb2.ConfigSetLocation(
            url='https://localhost/chromium/src/',
            storage_type=service_config_pb2.ConfigSetLocation.GITILES,
        ),
    )
    projects.get_ref.return_value = project_config_pb2.RefsCfg.Ref(
        name='refs/heads/release42',
        config_path='/my-configs',
    )

    gitiles_import.import_ref('chromium', 'refs/heads/release42')

    gitiles_import._import_config_set.assert_called_once_with(
        'projects/chromium/refs/heads/release42',
        'https://localhost/chromium/src/+/refs/heads/release42/my-configs')
 def test_get_projects(self):
     self.mock_latest_config(
         storage.get_self_config_set(), '''
   projects {
     id: "chromium"
     gitiles_location {
       repo: "https://localhost"
       ref: "refs/heads/main"
     }
   }
 ''')
     expected = service_config_pb2.ProjectsCfg(projects=[
         service_config_pb2.Project(
             id='chromium',
             gitiles_location=service_config_pb2.GitilesLocation(
                 repo='https://localhost',
                 ref='refs/heads/main',
             ),
         ),
     ], )
     self.assertEqual(projects.get_projects(), expected.projects)
    def test_import_project(self):
        self.mock(gitiles_import, '_import_config_set', mock.Mock())
        self.mock(projects, 'get_project', mock.Mock())
        projects.get_project.return_value = service_config_pb2.Project(
            id='chromium',
            gitiles_location=service_config_pb2.GitilesLocation(
                repo='https://localhost/chromium/src',
                ref='refs/any/thing',
                path='infra/config/generated',
            ),
        )

        gitiles_import.import_project('chromium')

        gitiles_import._import_config_set.assert_called_once_with(
            'projects/chromium',
            gitiles.Location(
                hostname='localhost',
                project='chromium/src',
                treeish='refs/any/thing',
                path='/infra/config/generated',
            ), 'chromium')