Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(588)

Side by Side Diff: appengine/chromium_cq_status/shared/test/utils_test.py

Issue 2111713004: Teach CQ status app to check login status of users. (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: Review and tests. Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 # Copyright 2014 The Chromium Authors. All rights reserved. 1 # Copyright 2014 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 from contextlib import contextmanager
5 from datetime import datetime
6 import os
4 7
5 from datetime import datetime 8 from webtest.app import AppError
9 from third_party.testing_utils import testing
10 import main
11 from shared import utils
6 12
7 from third_party.testing_utils import testing
8 from shared import utils
9 13
10 14
11 class MockWebApp(object): 15 class MockWebApp(object):
12 def __init__(self): 16 def __init__(self):
13 self.response = MockResponse() 17 self.response = MockResponse()
14 18
15 class MockResponse(object): 19 class MockResponse(object):
16 def __init__(self): 20 def __init__(self):
17 self.body = '' 21 self.body = ''
18 self.headers = MockHeaders() 22 self.headers = MockHeaders()
19 23
20 def write(self, text): 24 def write(self, text):
21 self.body += text 25 self.body += text
22 26
23 class MockHeaders(object): 27 class MockHeaders(object):
24 def __init__(self): 28 def __init__(self):
25 self.is_cross_origin = False 29 self.is_cross_origin = False
26 self.is_json_content = False 30 self.is_json_content = False
27 31
28 def add_header(self, key, value): # pragma: no cover 32 def add_header(self, key, value): # pragma: no cover
29 if key == "Access-Control-Allow-Origin": 33 if key == "Access-Control-Allow-Origin":
30 self.is_cross_origin = (value == "*") 34 self.is_cross_origin = (value == "*")
31 elif key == 'Content-Type': 35 elif key == 'Content-Type':
32 self.is_json_content = (value == 'application/json') 36 self.is_json_content = (value == 'application/json')
33 37
38
39 @contextmanager
40 def mock_host_acls(acls):
41 old = utils.HOST_ACLS['Development']
42 try:
43 utils.HOST_ACLS['Development'] = acls
44 yield
45 finally:
46 utils.HOST_ACLS['Development'] = old
47
48
49 class TestPermissions(testing.AppengineTestCase):
50 app_module = main.app
51
52 def test_has_permission_chromium(self):
53 with mock_host_acls(utils.HOST_ACLS['chromium-cq-status.appspot.com']):
54 # No user.
55 self.assertTrue(utils.has_permission('read'))
56 self.assertFalse(utils.has_permission('write'))
57
58 self.mock_current_user('random', 'random@person.com')
59 self.assertTrue(utils.has_permission('read'))
60 self.assertFalse(utils.has_permission('write'))
61
62 self.mock_current_user(is_admin=True)
63 self.assertTrue(utils.has_permission('read'))
64 self.assertTrue(utils.has_permission('write'))
65
66 self.mock_current_user('real', 'real@chromium.org')
67 self.assertTrue(utils.has_permission('read'))
68 self.assertTrue(utils.has_permission('write'))
69
70 self.mock_current_user('real', 'real@google.com')
71 self.assertTrue(utils.has_permission('read'))
72 self.assertTrue(utils.has_permission('write'))
73
74 def test_has_permission_internal(self):
75 with mock_host_acls(utils.HOST_ACLS['internal-cq-status.appspot.com']):
76 # No user.
77 self.assertFalse(utils.has_permission('read'))
78 self.assertFalse(utils.has_permission('write'))
79
80 self.mock_current_user('random', 'random@person.com')
81 self.assertFalse(utils.has_permission('read'))
82 self.assertFalse(utils.has_permission('write'))
83
84 self.mock_current_user(is_admin=True)
85 self.assertTrue(utils.has_permission('read'))
86 self.assertTrue(utils.has_permission('write'))
87
88 self.mock_current_user('real', 'real@chromium.org')
89 self.assertFalse(utils.has_permission('read'))
90 self.assertFalse(utils.has_permission('write'))
91
92 self.mock_current_user('real', 'real@google.com')
93 self.assertTrue(utils.has_permission('read'))
94 self.assertTrue(utils.has_permission('write'))
95
96 def test_read_access_decorator(self):
97 # No user, which has read access.
98 self.assertTrue(utils.has_permission('read'))
99 self.test_app.get('/recent')
100
101 # Simulate read access requiring valid user.
102 with mock_host_acls(utils.HOST_ACLS['internal-cq-status.appspot.com']):
103 self.assertFalse(utils.has_permission('read'))
104 self.test_app.get('/recent')
105
106 def test_host_permissions(self):
107 try:
108 old = os.environ.pop('SERVER_SOFTWARE')
109 utils.HOST_ACLS[None] = {'read': 'something', 'write': True}
110 self.assertEqual(utils.get_host_permissions('read'), 'something')
111 finally:
112 utils.HOST_ACLS.pop(None)
113 os.environ['SERVER_SOFTWARE'] = old
114
115 def test_password_sha1(self):
116 self.assertEquals(
117 '018d644a17b71b65cef51fa0a523a293f2b3266f',
118 utils.password_sha1('cq'))
119
120
34 class TestUtils(testing.AppengineTestCase): 121 class TestUtils(testing.AppengineTestCase):
35 def test_filter_dict(self): 122 def test_filter_dict(self):
36 self.assertEquals( 123 self.assertEquals(
37 {'b': 2, 'c': 3}, 124 {'b': 2, 'c': 3},
38 utils.filter_dict({'a': 1, 'b': 2, 'c': 3}, ('b', 'c', 'd'))) 125 utils.filter_dict({'a': 1, 'b': 2, 'c': 3}, ('b', 'c', 'd')))
39 126
40 def test_is_valid_user(self):
41 self.assertFalse(utils.is_valid_user())
42
43 self.mock_current_user('random', 'random@person.com')
44 self.assertFalse(utils.is_valid_user())
45
46 self.mock_current_user(is_admin=True)
47 self.assertTrue(utils.is_valid_user())
48
49 self.mock_current_user('real', 'real@chromium.org')
50 self.assertTrue(utils.is_valid_user())
51
52 self.mock_current_user('real', 'real@google.com')
53 self.assertTrue(utils.is_valid_user())
54
55 self.mock_current_user('fake', 'fake@google.comm')
56 self.assertFalse(utils.is_valid_user())
57
58 self.mock_current_user('fake', 'fake@google_com')
59 self.assertFalse(utils.is_valid_user())
60
61 self.mock_current_user('fake', 'fake@chromium.orgg')
62 self.assertFalse(utils.is_valid_user())
63
64 self.mock_current_user('fake', 'fake@chromium_org')
65 self.assertFalse(utils.is_valid_user())
66
67 def test_password_sha1(self):
68 self.assertEquals(
69 '018d644a17b71b65cef51fa0a523a293f2b3266f',
70 utils.password_sha1('cq'))
71
72 def test_to_unix_timestamp(self): 127 def test_to_unix_timestamp(self):
73 self.assertEquals(100, 128 self.assertEquals(100,
74 utils.to_unix_timestamp(datetime.utcfromtimestamp(100))) 129 utils.to_unix_timestamp(datetime.utcfromtimestamp(100)))
75 self.assertEquals(100.1, 130 self.assertEquals(100.1,
76 utils.to_unix_timestamp(datetime.utcfromtimestamp(100.1))) 131 utils.to_unix_timestamp(datetime.utcfromtimestamp(100.1)))
77 self.assertEquals(100.5, 132 self.assertEquals(100.5,
78 utils.to_unix_timestamp(datetime.utcfromtimestamp(100.5))) 133 utils.to_unix_timestamp(datetime.utcfromtimestamp(100.5)))
79 self.assertEquals(100.9, 134 self.assertEquals(100.9,
80 utils.to_unix_timestamp(datetime.utcfromtimestamp(100.9))) 135 utils.to_unix_timestamp(datetime.utcfromtimestamp(100.9)))
81 self.assertEquals(-100, 136 self.assertEquals(-100,
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
154 'codereview.chromium.org') 209 'codereview.chromium.org')
155 210
156 def test_get_full_patchset_url(self): 211 def test_get_full_patchset_url(self):
157 self.assertEquals( 212 self.assertEquals(
158 utils.get_full_patchset_url( 213 utils.get_full_patchset_url(
159 'chromium-review.googlesource.com', '123', '567'), 214 'chromium-review.googlesource.com', '123', '567'),
160 'https://chromium-review.googlesource.com/#/c/123/567') 215 'https://chromium-review.googlesource.com/#/c/123/567')
161 self.assertEquals( 216 self.assertEquals(
162 utils.get_full_patchset_url('codereview.chromium.org', '123', '567'), 217 utils.get_full_patchset_url('codereview.chromium.org', '123', '567'),
163 'https://codereview.chromium.org/123/#ps567') 218 'https://codereview.chromium.org/123/#ps567')
OLDNEW
« no previous file with comments | « appengine/chromium_cq_status/shared/config.py ('k') | appengine/chromium_cq_status/shared/utils.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698