OLD | NEW |
1 # -*- coding: utf-8 -*- | 1 # -*- coding: utf-8 -*- |
2 # Copyright 2013 Google Inc. All Rights Reserved. | 2 # Copyright 2013 Google Inc. All Rights Reserved. |
3 # | 3 # |
4 # Licensed under the Apache License, Version 2.0 (the "License"); | 4 # Licensed under the Apache License, Version 2.0 (the "License"); |
5 # you may not use this file except in compliance with the License. | 5 # you may not use this file except in compliance with the License. |
6 # You may obtain a copy of the License at | 6 # You may obtain a copy of the License at |
7 # | 7 # |
8 # http://www.apache.org/licenses/LICENSE-2.0 | 8 # http://www.apache.org/licenses/LICENSE-2.0 |
9 # | 9 # |
10 # Unless required by applicable law or agreed to in writing, software | 10 # Unless required by applicable law or agreed to in writing, software |
11 # distributed under the License is distributed on an "AS IS" BASIS, | 11 # distributed under the License is distributed on an "AS IS" BASIS, |
12 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 12 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
13 # See the License for the specific language governing permissions and | 13 # See the License for the specific language governing permissions and |
14 # limitations under the License. | 14 # limitations under the License. |
15 """Integration tests for the defacl command.""" | 15 """Integration tests for the defacl command.""" |
16 | 16 |
17 from __future__ import absolute_import | 17 from __future__ import absolute_import |
18 | 18 |
19 import os | |
20 import re | 19 import re |
| 20 |
| 21 from gslib.cs_api_map import ApiSelector |
21 import gslib.tests.testcase as case | 22 import gslib.tests.testcase as case |
22 from gslib.tests.testcase.integration_testcase import SkipForS3 | 23 from gslib.tests.testcase.integration_testcase import SkipForS3 |
23 from gslib.tests.util import ObjectToURI as suri | 24 from gslib.tests.util import ObjectToURI as suri |
24 | 25 |
25 PUBLIC_READ_JSON_ACL_TEXT = '"entity":"allUsers","role":"READER"' | 26 PUBLIC_READ_JSON_ACL_TEXT = '"entity":"allUsers","role":"READER"' |
26 | 27 |
27 | 28 |
28 @SkipForS3('S3 does not support default object ACLs.') | 29 @SkipForS3('S3 does not support default object ACLs.') |
29 class TestDefacl(case.GsUtilIntegrationTestCase): | 30 class TestDefacl(case.GsUtilIntegrationTestCase): |
30 """Integration tests for the defacl command.""" | 31 """Integration tests for the defacl command.""" |
(...skipping 30 matching lines...) Expand all Loading... |
61 json_text3 = self.RunGsUtil(self._defacl_get_prefix + | 62 json_text3 = self.RunGsUtil(self._defacl_get_prefix + |
62 [suri(bucket)], return_stdout=True) | 63 [suri(bucket)], return_stdout=True) |
63 self.assertRegexpMatches(json_text3, test_regex2) | 64 self.assertRegexpMatches(json_text3, test_regex2) |
64 | 65 |
65 stderr = self.RunGsUtil(self._defacl_ch_prefix + | 66 stderr = self.RunGsUtil(self._defacl_ch_prefix + |
66 ['-g', self.GROUP_TEST_ADDRESS+':WRITE', | 67 ['-g', self.GROUP_TEST_ADDRESS+':WRITE', |
67 suri(bucket)], | 68 suri(bucket)], |
68 return_stderr=True, expected_status=1) | 69 return_stderr=True, expected_status=1) |
69 self.assertIn('WRITER cannot be set as a default object ACL', stderr) | 70 self.assertIn('WRITER cannot be set as a default object ACL', stderr) |
70 | 71 |
71 def testChangeDefaultAclPrivate(self): | 72 def testChangeDefaultAclEmpty(self): |
| 73 """Tests adding and removing an entry from an empty default object ACL.""" |
| 74 |
72 bucket = self.CreateBucket() | 75 bucket = self.CreateBucket() |
73 test_regex = self._MakeScopeRegex( | 76 |
74 'READER', 'group', self.GROUP_TEST_ADDRESS) | 77 # First, clear out the default object ACL on the bucket. |
75 self.RunGsUtil(self._defacl_set_prefix + ['private', suri(bucket)]) | 78 self.RunGsUtil(self._defacl_set_prefix + ['private', suri(bucket)]) |
76 json_text = self.RunGsUtil(self._defacl_get_prefix + | 79 json_text = self.RunGsUtil(self._defacl_get_prefix + |
77 [suri(bucket)], return_stdout=True) | 80 [suri(bucket)], return_stdout=True) |
78 self.assertRegexpMatches(json_text, r'\[\]\s*') | 81 empty_regex = r'\[\]\s*' |
| 82 self.assertRegexpMatches(json_text, empty_regex) |
79 | 83 |
| 84 group_regex = self._MakeScopeRegex( |
| 85 'READER', 'group', self.GROUP_TEST_ADDRESS) |
80 self.RunGsUtil(self._defacl_ch_prefix + | 86 self.RunGsUtil(self._defacl_ch_prefix + |
81 ['-g', self.GROUP_TEST_ADDRESS+':READ', suri(bucket)]) | 87 ['-g', self.GROUP_TEST_ADDRESS+':READ', suri(bucket)]) |
82 json_text2 = self.RunGsUtil(self._defacl_get_prefix + | 88 json_text2 = self.RunGsUtil(self._defacl_get_prefix + |
83 [suri(bucket)], return_stdout=True) | 89 [suri(bucket)], return_stdout=True) |
84 self.assertRegexpMatches(json_text2, test_regex) | 90 self.assertRegexpMatches(json_text2, group_regex) |
| 91 |
| 92 if self.test_api == ApiSelector.JSON: |
| 93 # TODO: Enable when JSON service respects creating a private (no entries) |
| 94 # default object ACL via PATCH. For now, only supported in XML. |
| 95 return |
| 96 |
| 97 # After adding and removing a group, the default object ACL should be empty. |
| 98 self.RunGsUtil(self._defacl_ch_prefix + |
| 99 ['-d', self.GROUP_TEST_ADDRESS, suri(bucket)]) |
| 100 json_text3 = self.RunGsUtil(self._defacl_get_prefix + |
| 101 [suri(bucket)], return_stdout=True) |
| 102 self.assertRegexpMatches(json_text3, empty_regex) |
85 | 103 |
86 def testChangeMultipleBuckets(self): | 104 def testChangeMultipleBuckets(self): |
87 """Tests defacl ch on multiple buckets.""" | 105 """Tests defacl ch on multiple buckets.""" |
88 bucket1 = self.CreateBucket() | 106 bucket1 = self.CreateBucket() |
89 bucket2 = self.CreateBucket() | 107 bucket2 = self.CreateBucket() |
90 | 108 |
91 test_regex = self._MakeScopeRegex( | 109 test_regex = self._MakeScopeRegex( |
92 'READER', 'group', self.GROUP_TEST_ADDRESS) | 110 'READER', 'group', self.GROUP_TEST_ADDRESS) |
93 json_text = self.RunGsUtil(self._defacl_get_prefix + [suri(bucket1)], | 111 json_text = self.RunGsUtil(self._defacl_get_prefix + [suri(bucket1)], |
94 return_stdout=True) | 112 return_stdout=True) |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
178 | 196 |
179 # Neither arguments nor subcommand. | 197 # Neither arguments nor subcommand. |
180 stderr = self.RunGsUtil(['defacl'], return_stderr=True, expected_status=1) | 198 stderr = self.RunGsUtil(['defacl'], return_stderr=True, expected_status=1) |
181 self.assertIn('command requires at least', stderr) | 199 self.assertIn('command requires at least', stderr) |
182 | 200 |
183 | 201 |
184 class TestDefaclOldAlias(TestDefacl): | 202 class TestDefaclOldAlias(TestDefacl): |
185 _defacl_ch_prefix = ['chdefacl'] | 203 _defacl_ch_prefix = ['chdefacl'] |
186 _defacl_get_prefix = ['getdefacl'] | 204 _defacl_get_prefix = ['getdefacl'] |
187 _defacl_set_prefix = ['setdefacl'] | 205 _defacl_set_prefix = ['setdefacl'] |
OLD | NEW |