OLD | NEW |
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 Loading... |
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') |
OLD | NEW |