~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_permissions.py

Got the bzrdir api straightened out, plenty of refactoring to use it pending, but the api is up and running.

Show diffs side-by-side

added added

removed removed

Lines of Context:
79
79
            test.assertTransportMode(t, p, file_mode)
80
80
 
81
81
 
82
 
def assertEqualMode(test, mode, mode_test):
83
 
    test.assertEqual(mode, mode_test,
84
 
                     'mode mismatch %o != %o' % (mode, mode_test))
85
 
 
86
 
 
87
82
class TestPermissions(TestCaseWithTransport):
88
83
 
89
84
    def test_new_files(self):
90
85
        if sys.platform == 'win32':
91
86
            raise TestSkipped('chmod has no effect on win32')
92
87
 
93
 
        t = WorkingTree.create_standalone('.')
 
88
        t = self.make_branch_and_tree('.')
94
89
        b = t.branch
95
90
        open('a', 'wb').write('foo\n')
96
91
        t.add('a')
106
101
        # when a new lock is taken out.
107
102
        t = WorkingTree('.')
108
103
        b = t.branch
109
 
        assertEqualMode(self, 0755, b.control_files._dir_mode)
110
 
        assertEqualMode(self, 0644, b.control_files._file_mode)
 
104
        self.assertEqualMode(0755, b.control_files._dir_mode)
 
105
        self.assertEqualMode(0644, b.control_files._file_mode)
111
106
 
112
107
        # Modifying a file shouldn't break the permissions
113
108
        open('a', 'wb').write('foo2\n')
126
121
        check_mode_r(self, '.bzr', 0664, 0775)
127
122
        t = WorkingTree('.')
128
123
        b = t.branch
129
 
        assertEqualMode(self, 0775, b.control_files._dir_mode)
130
 
        assertEqualMode(self, 0664, b.control_files._file_mode)
 
124
        self.assertEqualMode(0775, b.control_files._dir_mode)
 
125
        self.assertEqualMode(0664, b.control_files._file_mode)
131
126
 
132
127
        open('a', 'wb').write('foo3\n')
133
128
        t.commit('foo3')
144
139
        check_mode_r(self, '.bzr', 0664, 02775)
145
140
        t = WorkingTree('.')
146
141
        b = t.branch
147
 
        assertEqualMode(self, 02775, b.control_files._dir_mode)
148
 
        assertEqualMode(self, 0664, b.control_files._file_mode)
 
142
        self.assertEqualMode(02775, b.control_files._dir_mode)
 
143
        self.assertEqualMode(0664, b.control_files._file_mode)
149
144
 
150
145
        open('a', 'wb').write('foo4\n')
151
146
        t.commit('foo4')
193
188
            LockableFiles._set_dir_mode = True
194
189
            LockableFiles._set_file_mode = True
195
190
 
196
 
    def test_new_branch(self):
197
 
        if sys.platform == 'win32':
198
 
            raise TestSkipped('chmod has no effect on win32')
199
 
        #FIXME RBC 20060105 should test branch and repository 
200
 
        # permissions ? 
201
 
        # also, these are BzrBranch format specific things..
202
 
        os.mkdir('a')
203
 
        mode = stat.S_IMODE(os.stat('a').st_mode)
204
 
        t = WorkingTree.create_standalone('.')
205
 
        b = t.branch
206
 
        assertEqualMode(self, mode, b.control_files._dir_mode)
207
 
        assertEqualMode(self, mode & ~07111, b.control_files._file_mode)
208
 
 
209
 
        os.mkdir('b')
210
 
        os.chmod('b', 02777)
211
 
        b = BzrDir.create('b').create_branch()
212
 
        assertEqualMode(self, 02777, b.control_files._dir_mode)
213
 
        assertEqualMode(self, 00666, b.control_files._file_mode)
214
 
        check_mode_r(self, 'b/.bzr', 00666, 02777)
215
 
 
216
 
        os.mkdir('c')
217
 
        os.chmod('c', 02750)
218
 
        b = BzrDir.create('c').create_branch()
219
 
        assertEqualMode(self, 02750, b.control_files._dir_mode)
220
 
        assertEqualMode(self, 00640, b.control_files._file_mode)
221
 
        check_mode_r(self, 'c/.bzr', 00640, 02750)
222
 
 
223
 
        os.mkdir('d')
224
 
        os.chmod('d', 0700)
225
 
        b = BzrDir.create('d').create_branch()
226
 
        assertEqualMode(self, 0700, b.control_files._dir_mode)
227
 
        assertEqualMode(self, 0600, b.control_files._file_mode)
228
 
        check_mode_r(self, 'd/.bzr', 00600, 0700)
229
 
 
230
191
 
231
192
class TestSftpPermissions(TestCaseWithSFTPServer):
232
193
 
236
197
        # Though it would be nice to test that SFTP to a server
237
198
        # which does support chmod has the right effect
238
199
 
239
 
        from bzrlib.transport.sftp import SFTPTransport
240
 
 
241
 
        # We don't actually use it directly, we just want to
242
 
        # keep the connection open, since StubSFTPServer only
243
 
        # allows 1 connection
244
 
        _transport = SFTPTransport(self._sftp_url)
 
200
        # bodge around for stubsftpserver not letting use connect
 
201
        # more than once
 
202
        _t = get_transport(self.get_url())
245
203
 
246
204
        os.mkdir('local')
247
 
        t_local = WorkingTree.create_standalone('local')
 
205
        t_local = self.make_branch_and_tree('local')
248
206
        b_local = t_local.branch
249
207
        open('local/a', 'wb').write('foo\n')
250
208
        t_local.add('a')
256
214
 
257
215
        t = WorkingTree('local')
258
216
        b = t.branch
259
 
        assertEqualMode(self, 0755, b_local.control_files._dir_mode)
260
 
        assertEqualMode(self, 0644, b_local.control_files._file_mode)
 
217
        self.assertEqualMode(0755, b_local.control_files._dir_mode)
 
218
        self.assertEqualMode(0644, b_local.control_files._file_mode)
261
219
 
262
220
        os.mkdir('sftp')
263
 
        sftp_url = self.get_remote_url('sftp')
 
221
        sftp_url = self.get_url('sftp')
264
222
        b_sftp = BzrDir.create_branch_and_repo(sftp_url)
265
223
 
266
224
        b_sftp.pull(b_local)
269
227
        check_mode_r(self, 'sftp/.bzr', 0644, 0755)
270
228
 
271
229
        b_sftp = Branch.open(sftp_url)
272
 
        assertEqualMode(self, 0755, b_sftp.control_files._dir_mode)
273
 
        assertEqualMode(self, 0644, b_sftp.control_files._file_mode)
 
230
        self.assertEqualMode(0755, b_sftp.control_files._dir_mode)
 
231
        self.assertEqualMode(0644, b_sftp.control_files._file_mode)
274
232
 
275
233
        open('local/a', 'wb').write('foo2\n')
276
234
        t_local.commit('foo2')
290
248
        check_mode_r(self, 'sftp/.bzr', 0664, 0775)
291
249
 
292
250
        b_sftp = Branch.open(sftp_url)
293
 
        assertEqualMode(self, 0775, b_sftp.control_files._dir_mode)
294
 
        assertEqualMode(self, 0664, b_sftp.control_files._file_mode)
 
251
        self.assertEqualMode(0775, b_sftp.control_files._dir_mode)
 
252
        self.assertEqualMode(0664, b_sftp.control_files._file_mode)
295
253
 
296
254
        open('local/a', 'wb').write('foo3\n')
297
255
        t_local.commit('foo3')
312
270
        original_umask = os.umask(umask)
313
271
 
314
272
        try:
315
 
            from bzrlib.transport.sftp import SFTPTransport
316
 
            t = SFTPTransport(self._sftp_url)
 
273
            t = get_transport(self.get_url())
317
274
            # Direct access should be masked by umask
318
275
            t._sftp_open_exclusive('a', mode=0666).write('foo\n')
319
276
            self.assertTransportMode(t, 'a', 0666 &~umask)