| Index: appengine/config_service/acl_test.py
|
| diff --git a/appengine/config_service/acl_test.py b/appengine/config_service/acl_test.py
|
| index c295f3b534ec0a7380b66b9e2355c4e0e9f6c49a..d0e8c2055bdce19bc670b05035bb05b0f376ad5b 100755
|
| --- a/appengine/config_service/acl_test.py
|
| +++ b/appengine/config_service/acl_test.py
|
| @@ -3,8 +3,6 @@
|
| # Use of this source code is governed by the Apache v2.0 license that can be
|
| # found in the LICENSE file.
|
|
|
| -import wsgiref.headers
|
| -
|
| from test_env import future
|
| import test_env
|
| test_env.setup_test_env()
|
| @@ -14,19 +12,25 @@ import mock
|
|
|
| from components import auth
|
|
|
| +from proto import project_config_pb2
|
| from proto import service_config_pb2
|
| import acl
|
| +import projects
|
| +import services
|
| import storage
|
|
|
|
|
| class AclTestCase(test_case.TestCase):
|
| def setUp(self):
|
| super(AclTestCase, self).setUp()
|
| + self.mock(auth, 'get_current_identity', mock.Mock())
|
| + auth.get_current_identity.return_value = auth.Anonymous
|
| self.mock(auth, 'is_admin', lambda *_: False)
|
| self.mock(auth, 'is_group_member', mock.Mock(return_value=False))
|
| + self.mock(services, 'get_service_async', mock.Mock())
|
| + services.get_service_async.side_effect = lambda sid: future(None)
|
|
|
| acl_cfg = service_config_pb2.AclCfg(
|
| - service_access_group='service-admins',
|
| project_access_group='project-admins',
|
| )
|
| self.mock(storage, 'get_self_config_async', lambda *_: future(acl_cfg))
|
| @@ -35,30 +39,37 @@ class AclTestCase(test_case.TestCase):
|
| self.mock(auth, 'is_admin', mock.Mock(return_value=True))
|
| self.assertTrue(acl.can_read_config_set('services/swarming'))
|
| self.assertTrue(acl.can_read_config_set('projects/chromium'))
|
| - self.assertTrue(acl.can_read_project_list())
|
| + self.assertTrue(acl.has_project_access('chromium'))
|
|
|
| - def test_can_read_service_config(self):
|
| - auth.is_group_member.return_value = True
|
| - self.assertTrue(acl.can_read_config_set('services/swarming'))
|
| - auth.is_group_member.access_called_once_with('service-admins')
|
| + def test_has_service_access(self):
|
| + self.assertFalse(acl.can_read_config_set('services/swarming'))
|
|
|
| - def test_can_read_service_config_header(self):
|
| - headers = wsgiref.headers.Headers([
|
| - ('X-Appengine-Inbound-Appid', 'swarming'),
|
| - ])
|
| - self.assertTrue(
|
| - acl.can_read_config_set('services/swarming', headers=headers))
|
| + service_cfg = service_config_pb2.Service(
|
| + id='swarming', access='swarming-app')
|
| + services.get_service_async.side_effect = lambda sid: future(service_cfg)
|
| + auth.is_group_member.side_effect = lambda g: g == 'swarming-app'
|
| +
|
| + self.assertTrue(acl.can_read_config_set('services/swarming'))
|
|
|
| - def test_can_read_service_config_no_access(self):
|
| + def test_has_service_access_no_access(self):
|
| self.assertFalse(acl.can_read_config_set('services/swarming'))
|
|
|
| - def test_can_read_project_config(self):
|
| - auth.is_group_member.return_value = True
|
| - self.assertTrue(acl.can_read_config_set('projects/swarming'))
|
| - auth.is_group_member.access_called_once_with('project-admins')
|
| + def test_has_project_access(self):
|
| + self.mock(projects, 'get_metadata', mock.Mock())
|
| + projects.get_metadata.return_value = project_config_pb2.ProjectCfg(
|
| + access='googlers'
|
| + )
|
| +
|
| + self.assertFalse(acl.can_read_config_set('projects/secret'))
|
| +
|
| + auth.is_group_member.side_effect = lambda name: name == 'googlers'
|
| + self.assertTrue(acl.can_read_config_set('projects/secret'))
|
| +
|
| + auth.is_group_member.side_effect = lambda name: name == 'project-admins'
|
| + self.assertTrue(acl.can_read_config_set('projects/secret'))
|
|
|
| def test_can_read_project_config_no_access(self):
|
| - self.assertFalse(acl.can_read_config_set('projects/swarming'))
|
| + self.assertFalse(acl.has_project_access('projects/swarming'))
|
| self.assertFalse(acl.can_read_config_set('projects/swarming/refs/heads/x'))
|
|
|
| def test_malformed_config_set(self):
|
|
|