| Index: appengine/config_service/api_test.py
|
| diff --git a/appengine/config_service/api_test.py b/appengine/config_service/api_test.py
|
| index 7fdec88386a663224be060bd6a260e566a7937ca..7c155657fa3191e9636b965b5792f26e16942602 100755
|
| --- a/appengine/config_service/api_test.py
|
| +++ b/appengine/config_service/api_test.py
|
| @@ -31,9 +31,11 @@ class ApiTest(test_case.EndpointsTestCase):
|
|
|
| def setUp(self):
|
| super(ApiTest, self).setUp()
|
| - self.mock(acl, 'has_project_access', mock.Mock(return_value=True))
|
| - self.mock(acl, 'can_read_config_set', mock.Mock(return_value=True))
|
| - self.mock(acl, 'can_read_project_config', mock.Mock(return_value=True))
|
| + 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'),
|
| @@ -84,7 +86,7 @@ class ApiTest(test_case.EndpointsTestCase):
|
| })
|
|
|
| def test_get_config_one_forbidden(self):
|
| - acl.can_read_config_set.return_value = False
|
| + self.mock(acl, 'can_read_config_set', mock.Mock(return_value=False))
|
| with self.call_should_fail(httplib.FORBIDDEN):
|
| req = {
|
| 'config_set': 'services/x',
|
| @@ -119,7 +121,7 @@ class ApiTest(test_case.EndpointsTestCase):
|
| 'services/x': 'http://x',
|
| 'services/y': 'http://y',
|
| })
|
| - acl.can_read_config_set.side_effect = [True, False]
|
| + self.mock(acl, 'can_read_config_set', mock.Mock(side_effect=[True, False]))
|
|
|
| resp = self.call_api('get_mapping', {}).json_body
|
|
|
| @@ -194,7 +196,7 @@ class ApiTest(test_case.EndpointsTestCase):
|
| self.call_api('get_config', req)
|
|
|
| def test_get_wrong_config_set(self):
|
| - acl.can_read_config_set.side_effect = ValueError
|
| + self.mock(acl, 'can_read_config_set', mock.Mock(side_effect=ValueError))
|
|
|
| req = {
|
| 'config_set': 'xxx',
|
| @@ -205,14 +207,14 @@ class ApiTest(test_case.EndpointsTestCase):
|
| self.call_api('get_config', req).json_body
|
|
|
| def test_get_config_without_permissions(self):
|
| - acl.can_read_config_set.return_value = False
|
| + self.mock(acl, 'can_read_config_set', mock.Mock(return_value=False))
|
| self.mock(storage, 'get_config_hash_async', mock.Mock())
|
|
|
| req = {
|
| 'config_set': 'services/luci-config',
|
| 'path': 'projects.cfg',
|
| }
|
| - with self.call_should_fail(httplib.NOT_FOUND):
|
| + with self.call_should_fail(404):
|
| self.call_api('get_config', req)
|
| self.assertFalse(storage.get_config_hash_async.called)
|
|
|
| @@ -242,16 +244,20 @@ class ApiTest(test_case.EndpointsTestCase):
|
| 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'),
|
| - project_config_pb2.ProjectCfg(),
|
| - project_config_pb2.ProjectCfg(),
|
| + 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)
|
| + (None, None),
|
| + (projects.RepositoryType.GITILES, 'http://localhost/secret'),
|
| ]
|
|
|
| resp = self.call_api('get_projects', {}).json_body
|
| @@ -274,8 +280,7 @@ class ApiTest(test_case.EndpointsTestCase):
|
|
|
| def test_get_projects_without_permissions(self):
|
| acl.has_project_access.return_value = False
|
| - with self.call_should_fail(httplib.FORBIDDEN):
|
| - self.call_api('get_projects', {})
|
| + self.call_api('get_projects', {})
|
|
|
| ##############################################################################
|
| # get_refs
|
| @@ -295,18 +300,18 @@ class ApiTest(test_case.EndpointsTestCase):
|
|
|
| def test_get_refs_without_permissions(self):
|
| self.mock_refs()
|
| - acl.can_read_project_config.return_value = False
|
| + acl.has_project_access.side_effect = None
|
| + acl.has_project_access.return_value = False
|
|
|
| req = {'project_id': 'chromium'}
|
| with self.call_should_fail(httplib.NOT_FOUND):
|
| self.call_api('get_refs', req)
|
| self.assertFalse(projects.get_refs.called)
|
|
|
| -
|
| def test_get_refs_of_non_existent_project(self):
|
| self.mock(projects, 'get_refs', mock.Mock())
|
| projects.get_refs.return_value = None
|
| - req = {'project_id': 'nonexistent'}
|
| + req = {'project_id': 'non-existent'}
|
| with self.call_should_fail(httplib.NOT_FOUND):
|
| self.call_api('get_refs', req)
|
|
|
| @@ -315,6 +320,10 @@ class ApiTest(test_case.EndpointsTestCase):
|
|
|
| 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([
|
| @@ -345,16 +354,8 @@ class ApiTest(test_case.EndpointsTestCase):
|
| })
|
| config_sets_arg = storage.get_latest_multi_async.call_args[0][0]
|
| self.assertEqual(
|
| - list(config_sets_arg), ['projects/chromium', 'projects/v8'])
|
| -
|
| - def test_get_project_configs_without_permission(self):
|
| - self.mock(api, 'get_projects', mock.Mock())
|
| - acl.has_project_access.return_value = False
|
| -
|
| - req = {'path': 'cq.cfg'}
|
| - with self.call_should_fail(httplib.FORBIDDEN):
|
| - self.call_api('get_project_configs', req)
|
| - self.assertFalse(api.get_projects.called)
|
| + list(config_sets_arg),
|
| + ['projects/chromium', 'projects/v8', 'projects/inconsistent'])
|
|
|
| ##############################################################################
|
| # get_ref_configs
|
| @@ -380,13 +381,11 @@ class ApiTest(test_case.EndpointsTestCase):
|
| ])
|
|
|
| def test_get_ref_configs_without_permission(self):
|
| - self.mock(api, 'get_projects', mock.Mock())
|
| acl.has_project_access.return_value = False
|
|
|
| req = {'path': 'cq.cfg'}
|
| - with self.call_should_fail(httplib.NOT_FOUND):
|
| - self.call_api('get_ref_configs', req)
|
| - self.assertFalse(api.get_projects.called)
|
| + resp = self.call_api('get_ref_configs', req).json_body
|
| + self.assertEqual(resp, {})
|
|
|
|
|
| if __name__ == '__main__':
|
|
|