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)
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'), })))
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')
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', ), )
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', ])
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', }, ], })
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'), }], })
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')
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')
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', }, ], })
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')
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'))
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')