OLD | NEW |
(Empty) | |
| 1 # -*- coding: utf-8 -*- |
| 2 # Copyright 2013 Google Inc. All Rights Reserved. |
| 3 # |
| 4 # Licensed under the Apache License, Version 2.0 (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 |
| 7 # |
| 8 # http://www.apache.org/licenses/LICENSE-2.0 |
| 9 # |
| 10 # Unless required by applicable law or agreed to in writing, software |
| 11 # distributed under the License is distributed on an "AS IS" BASIS, |
| 12 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 13 # See the License for the specific language governing permissions and |
| 14 # limitations under the License. |
| 15 """Integration tests for the defacl command.""" |
| 16 |
| 17 from __future__ import absolute_import |
| 18 |
| 19 import os |
| 20 import re |
| 21 import gslib.tests.testcase as case |
| 22 from gslib.tests.testcase.integration_testcase import SkipForS3 |
| 23 from gslib.tests.util import ObjectToURI as suri |
| 24 |
| 25 PUBLIC_READ_JSON_ACL_TEXT = '"entity":"allUsers","role":"READER"' |
| 26 |
| 27 |
| 28 @SkipForS3('S3 does not support default object ACLs.') |
| 29 class TestDefacl(case.GsUtilIntegrationTestCase): |
| 30 """Integration tests for the defacl command.""" |
| 31 |
| 32 _defacl_ch_prefix = ['defacl', 'ch'] |
| 33 _defacl_get_prefix = ['defacl', 'get'] |
| 34 _defacl_set_prefix = ['defacl', 'set'] |
| 35 |
| 36 def _MakeScopeRegex(self, role, entity_type, email_address): |
| 37 template_regex = (r'\{.*"entity":\s*"%s-%s".*"role":\s*"%s".*\}' % |
| 38 (entity_type, email_address, role)) |
| 39 return re.compile(template_regex, flags=re.DOTALL) |
| 40 |
| 41 def testChangeDefaultAcl(self): |
| 42 """Tests defacl ch.""" |
| 43 bucket = self.CreateBucket() |
| 44 |
| 45 test_regex = self._MakeScopeRegex( |
| 46 'OWNER', 'group', self.GROUP_TEST_ADDRESS) |
| 47 test_regex2 = self._MakeScopeRegex( |
| 48 'READER', 'group', self.GROUP_TEST_ADDRESS) |
| 49 json_text = self.RunGsUtil(self._defacl_get_prefix + |
| 50 [suri(bucket)], return_stdout=True) |
| 51 self.assertNotRegexpMatches(json_text, test_regex) |
| 52 |
| 53 self.RunGsUtil(self._defacl_ch_prefix + |
| 54 ['-g', self.GROUP_TEST_ADDRESS+':FC', suri(bucket)]) |
| 55 json_text2 = self.RunGsUtil(self._defacl_get_prefix + |
| 56 [suri(bucket)], return_stdout=True) |
| 57 self.assertRegexpMatches(json_text2, test_regex) |
| 58 |
| 59 self.RunGsUtil(self._defacl_ch_prefix + |
| 60 ['-g', self.GROUP_TEST_ADDRESS+':READ', suri(bucket)]) |
| 61 json_text3 = self.RunGsUtil(self._defacl_get_prefix + |
| 62 [suri(bucket)], return_stdout=True) |
| 63 self.assertRegexpMatches(json_text3, test_regex2) |
| 64 |
| 65 stderr = self.RunGsUtil(self._defacl_ch_prefix + |
| 66 ['-g', self.GROUP_TEST_ADDRESS+':WRITE', |
| 67 suri(bucket)], |
| 68 return_stderr=True, expected_status=1) |
| 69 self.assertIn('WRITER cannot be set as a default object ACL', stderr) |
| 70 |
| 71 def testChangeDefaultAclPrivate(self): |
| 72 bucket = self.CreateBucket() |
| 73 test_regex = self._MakeScopeRegex( |
| 74 'READER', 'group', self.GROUP_TEST_ADDRESS) |
| 75 self.RunGsUtil(self._defacl_set_prefix + ['private', suri(bucket)]) |
| 76 json_text = self.RunGsUtil(self._defacl_get_prefix + |
| 77 [suri(bucket)], return_stdout=True) |
| 78 self.assertRegexpMatches(json_text, r'\[\]\s*') |
| 79 |
| 80 self.RunGsUtil(self._defacl_ch_prefix + |
| 81 ['-g', self.GROUP_TEST_ADDRESS+':READ', suri(bucket)]) |
| 82 json_text2 = self.RunGsUtil(self._defacl_get_prefix + |
| 83 [suri(bucket)], return_stdout=True) |
| 84 self.assertRegexpMatches(json_text2, test_regex) |
| 85 |
| 86 def testChangeMultipleBuckets(self): |
| 87 """Tests defacl ch on multiple buckets.""" |
| 88 bucket1 = self.CreateBucket() |
| 89 bucket2 = self.CreateBucket() |
| 90 |
| 91 test_regex = self._MakeScopeRegex( |
| 92 'READER', 'group', self.GROUP_TEST_ADDRESS) |
| 93 json_text = self.RunGsUtil(self._defacl_get_prefix + [suri(bucket1)], |
| 94 return_stdout=True) |
| 95 self.assertNotRegexpMatches(json_text, test_regex) |
| 96 json_text = self.RunGsUtil(self._defacl_get_prefix + [suri(bucket2)], |
| 97 return_stdout=True) |
| 98 self.assertNotRegexpMatches(json_text, test_regex) |
| 99 |
| 100 self.RunGsUtil(self._defacl_ch_prefix + |
| 101 ['-g', self.GROUP_TEST_ADDRESS+':READ', |
| 102 suri(bucket1), suri(bucket2)]) |
| 103 json_text = self.RunGsUtil(self._defacl_get_prefix + [suri(bucket1)], |
| 104 return_stdout=True) |
| 105 self.assertRegexpMatches(json_text, test_regex) |
| 106 json_text = self.RunGsUtil(self._defacl_get_prefix + [suri(bucket2)], |
| 107 return_stdout=True) |
| 108 self.assertRegexpMatches(json_text, test_regex) |
| 109 |
| 110 def testChangeMultipleAcls(self): |
| 111 """Tests defacl ch with multiple ACL entries.""" |
| 112 bucket = self.CreateBucket() |
| 113 |
| 114 test_regex_group = self._MakeScopeRegex( |
| 115 'READER', 'group', self.GROUP_TEST_ADDRESS) |
| 116 test_regex_user = self._MakeScopeRegex( |
| 117 'OWNER', 'user', self.USER_TEST_ADDRESS) |
| 118 json_text = self.RunGsUtil(self._defacl_get_prefix + [suri(bucket)], |
| 119 return_stdout=True) |
| 120 self.assertNotRegexpMatches(json_text, test_regex_group) |
| 121 self.assertNotRegexpMatches(json_text, test_regex_user) |
| 122 |
| 123 self.RunGsUtil(self._defacl_ch_prefix + |
| 124 ['-g', self.GROUP_TEST_ADDRESS+':READ', |
| 125 '-u', self.USER_TEST_ADDRESS+':fc', suri(bucket)]) |
| 126 json_text = self.RunGsUtil(self._defacl_get_prefix + [suri(bucket)], |
| 127 return_stdout=True) |
| 128 self.assertRegexpMatches(json_text, test_regex_group) |
| 129 self.assertRegexpMatches(json_text, test_regex_user) |
| 130 |
| 131 def testEmptyDefAcl(self): |
| 132 bucket = self.CreateBucket() |
| 133 self.RunGsUtil(self._defacl_set_prefix + ['private', suri(bucket)]) |
| 134 stdout = self.RunGsUtil(self._defacl_get_prefix + [suri(bucket)], |
| 135 return_stdout=True) |
| 136 self.assertEquals(stdout.rstrip(), '[]') |
| 137 self.RunGsUtil(self._defacl_ch_prefix + |
| 138 ['-u', self.USER_TEST_ADDRESS+':fc', suri(bucket)]) |
| 139 |
| 140 def testDeletePermissionsWithCh(self): |
| 141 """Tests removing permissions with defacl ch.""" |
| 142 bucket = self.CreateBucket() |
| 143 |
| 144 test_regex = self._MakeScopeRegex( |
| 145 'OWNER', 'user', self.USER_TEST_ADDRESS) |
| 146 json_text = self.RunGsUtil( |
| 147 self._defacl_get_prefix + [suri(bucket)], return_stdout=True) |
| 148 self.assertNotRegexpMatches(json_text, test_regex) |
| 149 |
| 150 self.RunGsUtil(self._defacl_ch_prefix + |
| 151 ['-u', self.USER_TEST_ADDRESS+':fc', suri(bucket)]) |
| 152 json_text = self.RunGsUtil( |
| 153 self._defacl_get_prefix + [suri(bucket)], return_stdout=True) |
| 154 self.assertRegexpMatches(json_text, test_regex) |
| 155 |
| 156 self.RunGsUtil(self._defacl_ch_prefix + |
| 157 ['-d', self.USER_TEST_ADDRESS, suri(bucket)]) |
| 158 json_text = self.RunGsUtil( |
| 159 self._defacl_get_prefix + [suri(bucket)], return_stdout=True) |
| 160 self.assertNotRegexpMatches(json_text, test_regex) |
| 161 |
| 162 def testTooFewArgumentsFails(self): |
| 163 """Tests calling defacl with insufficient number of arguments.""" |
| 164 # No arguments for get, but valid subcommand. |
| 165 stderr = self.RunGsUtil(self._defacl_get_prefix, return_stderr=True, |
| 166 expected_status=1) |
| 167 self.assertIn('command requires at least', stderr) |
| 168 |
| 169 # No arguments for set, but valid subcommand. |
| 170 stderr = self.RunGsUtil(self._defacl_set_prefix, return_stderr=True, |
| 171 expected_status=1) |
| 172 self.assertIn('command requires at least', stderr) |
| 173 |
| 174 # No arguments for ch, but valid subcommand. |
| 175 stderr = self.RunGsUtil(self._defacl_ch_prefix, return_stderr=True, |
| 176 expected_status=1) |
| 177 self.assertIn('command requires at least', stderr) |
| 178 |
| 179 # Neither arguments nor subcommand. |
| 180 stderr = self.RunGsUtil(['defacl'], return_stderr=True, expected_status=1) |
| 181 self.assertIn('command requires at least', stderr) |
| 182 |
| 183 |
| 184 class TestDefaclOldAlias(TestDefacl): |
| 185 _defacl_ch_prefix = ['chdefacl'] |
| 186 _defacl_get_prefix = ['getdefacl'] |
| 187 _defacl_set_prefix = ['setdefacl'] |
OLD | NEW |