~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_permissions.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2007-11-03 01:53:30 UTC
  • mfrom: (2955.1.1 trunk)
  • Revision ID: pqm@pqm.ubuntu.com-20071103015330-pt1tec7wyxwwcey8
Fix #158972 don't use timeout for HttpServer

Show diffs side-by-side

added added

removed removed

Lines of Context:
29
29
# TODO: jam 20051215 Currently the default behavior for 'bzr branch' is just 
30
30
#                    defined by the local umask. This isn't terrible, is it
31
31
#                    the truly desired behavior?
32
 
 
 
32
 
33
33
import os
34
34
import sys
35
35
import stat
47
47
 
48
48
def chmod_r(base, file_mode, dir_mode):
49
49
    """Recursively chmod from a base directory"""
 
50
    assert os.path.isdir(base)
50
51
    os.chmod(base, dir_mode)
51
52
    for root, dirs, files in os.walk(base):
52
53
        for d in dirs:
66
67
    :param dir_mode: The mode for all directories
67
68
    :param include_base: If false, only check the subdirectories
68
69
    """
 
70
    assert os.path.isdir(base)
69
71
    t = get_transport(".")
70
72
    if include_base:
71
73
        test.assertTransportMode(t, base, dir_mode)
104
106
        b = t.branch
105
107
        self.assertEqualMode(0755, b.control_files._dir_mode)
106
108
        self.assertEqualMode(0644, b.control_files._file_mode)
107
 
        self.assertEqualMode(0755, b.bzrdir._get_dir_mode())
108
 
        self.assertEqualMode(0644, b.bzrdir._get_file_mode())
109
109
 
110
110
        # Modifying a file shouldn't break the permissions
111
111
        open('a', 'wb').write('foo2\n')
126
126
        b = t.branch
127
127
        self.assertEqualMode(0775, b.control_files._dir_mode)
128
128
        self.assertEqualMode(0664, b.control_files._file_mode)
129
 
        self.assertEqualMode(0775, b.bzrdir._get_dir_mode())
130
 
        self.assertEqualMode(0664, b.bzrdir._get_file_mode())
131
129
 
132
130
        open('a', 'wb').write('foo3\n')
133
131
        t.commit('foo3')
138
136
        t.commit('new c')
139
137
        check_mode_r(self, '.bzr', 0664, 0775)
140
138
 
141
 
    def test_new_files_group_sticky_bit(self):
142
 
        if sys.platform == 'win32':
143
 
            raise TestSkipped('chmod has no effect on win32')
144
 
        elif sys.platform == 'darwin':
145
 
            # OS X creates temp dirs with the 'wheel' group, which users are
146
 
            # not likely to be in, and this prevents us from setting the sgid
147
 
            # bit
148
 
            os.chown(self.test_dir, os.getuid(), os.getgid())
149
 
 
150
 
        t = self.make_branch_and_tree('.')
151
 
        b = t.branch
152
 
 
153
139
        # Test the group sticky bit
154
140
        # Recursively update the modes of all files
155
141
        chmod_r('.bzr', 0664, 02775)
158
144
        b = t.branch
159
145
        self.assertEqualMode(02775, b.control_files._dir_mode)
160
146
        self.assertEqualMode(0664, b.control_files._file_mode)
161
 
        self.assertEqualMode(02775, b.bzrdir._get_dir_mode())
162
 
        self.assertEqualMode(0664, b.bzrdir._get_file_mode())
163
147
 
164
148
        open('a', 'wb').write('foo4\n')
165
149
        t.commit('foo4')
170
154
        t.commit('new d')
171
155
        check_mode_r(self, '.bzr', 0664, 02775)
172
156
 
 
157
    def test_disable_set_mode(self):
 
158
        # TODO: jam 20051215 Ultimately, this test should probably test that
 
159
        #                    extra chmod calls aren't being made
 
160
        try:
 
161
            transport = get_transport(self.get_url())
 
162
            transport.put_bytes('my-lock', '')
 
163
            lockable = LockableFiles(transport, 'my-lock', TransportLock)
 
164
            self.assertNotEqual(None, lockable._dir_mode)
 
165
            self.assertNotEqual(None, lockable._file_mode)
 
166
 
 
167
            LockableFiles._set_dir_mode = False
 
168
            transport = get_transport('.')
 
169
            lockable = LockableFiles(transport, 'my-lock', TransportLock)
 
170
            self.assertEqual(None, lockable._dir_mode)
 
171
            self.assertNotEqual(None, lockable._file_mode)
 
172
 
 
173
            LockableFiles._set_file_mode = False
 
174
            transport = get_transport('.')
 
175
            lockable = LockableFiles(transport, 'my-lock', TransportLock)
 
176
            self.assertEqual(None, lockable._dir_mode)
 
177
            self.assertEqual(None, lockable._file_mode)
 
178
 
 
179
            LockableFiles._set_dir_mode = True
 
180
            transport = get_transport('.')
 
181
            lockable = LockableFiles(transport, 'my-lock', TransportLock)
 
182
            self.assertNotEqual(None, lockable._dir_mode)
 
183
            self.assertEqual(None, lockable._file_mode)
 
184
 
 
185
            LockableFiles._set_file_mode = True
 
186
            transport = get_transport('.')
 
187
            lockable = LockableFiles(transport, 'my-lock', TransportLock)
 
188
            self.assertNotEqual(None, lockable._dir_mode)
 
189
            self.assertNotEqual(None, lockable._file_mode)
 
190
        finally:
 
191
            LockableFiles._set_dir_mode = True
 
192
            LockableFiles._set_file_mode = True
 
193
 
173
194
 
174
195
class TestSftpPermissions(TestCaseWithSFTPServer):
175
196
 
198
219
        b_local = t.branch
199
220
        self.assertEqualMode(0755, b_local.control_files._dir_mode)
200
221
        self.assertEqualMode(0644, b_local.control_files._file_mode)
201
 
        self.assertEqualMode(0755, b_local.bzrdir._get_dir_mode())
202
 
        self.assertEqualMode(0644, b_local.bzrdir._get_file_mode())
203
222
 
204
223
        os.mkdir('sftp')
205
224
        sftp_url = self.get_url('sftp')
213
232
        b_sftp = Branch.open(sftp_url)
214
233
        self.assertEqualMode(0755, b_sftp.control_files._dir_mode)
215
234
        self.assertEqualMode(0644, b_sftp.control_files._file_mode)
216
 
        self.assertEqualMode(0755, b_sftp.bzrdir._get_dir_mode())
217
 
        self.assertEqualMode(0644, b_sftp.bzrdir._get_file_mode())
218
235
 
219
236
        open('local/a', 'wb').write('foo2\n')
220
237
        t_local.commit('foo2')
236
253
        b_sftp = Branch.open(sftp_url)
237
254
        self.assertEqualMode(0775, b_sftp.control_files._dir_mode)
238
255
        self.assertEqualMode(0664, b_sftp.control_files._file_mode)
239
 
        self.assertEqualMode(0775, b_sftp.bzrdir._get_dir_mode())
240
 
        self.assertEqualMode(0664, b_sftp.bzrdir._get_file_mode())
241
256
 
242
257
        open('local/a', 'wb').write('foo3\n')
243
258
        t_local.commit('foo3')