/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to brzlib/tests/test_permissions.py

  • Committer: Jelmer Vernooij
  • Date: 2017-05-21 12:41:27 UTC
  • mto: This revision was merged to the branch mainline in revision 6623.
  • Revision ID: jelmer@jelmer.uk-20170521124127-iv8etg0vwymyai6y
s/bzr/brz/ in apport config.

Show diffs side-by-side

added added

removed removed

Lines of Context:
33
33
import os
34
34
import sys
35
35
 
36
 
from breezy import urlutils
37
 
from breezy.branch import Branch
38
 
from breezy.controldir import ControlDir
39
 
from breezy.tests import TestCaseWithTransport, TestSkipped
40
 
from breezy.tests.test_sftp_transport import TestCaseWithSFTPServer
41
 
from breezy.workingtree import WorkingTree
 
36
from brzlib import urlutils
 
37
from brzlib.branch import Branch
 
38
from brzlib.controldir import ControlDir
 
39
from brzlib.tests import TestCaseWithTransport, TestSkipped
 
40
from brzlib.tests.test_sftp_transport import TestCaseWithSFTPServer
 
41
from brzlib.workingtree import WorkingTree
42
42
 
43
43
 
44
44
def chmod_r(base, file_mode, dir_mode):
83
83
 
84
84
        t = self.make_branch_and_tree('.')
85
85
        b = t.branch
86
 
        with open('a', 'wb') as f:
87
 
            f.write(b'foo\n')
 
86
        with open('a', 'wb') as f: f.write('foo\n')
88
87
        # ensure check_mode_r works with capital-letter file-ids like TREE_ROOT
89
 
        t.add('a', b'CAPS-ID')
 
88
        t.add('a', 'CAPS-ID')
90
89
        t.commit('foo')
91
90
 
92
 
        chmod_r('.bzr', 0o644, 0o755)
93
 
        check_mode_r(self, '.bzr', 0o644, 0o755)
 
91
        chmod_r('.bzr', 0644, 0755)
 
92
        check_mode_r(self, '.bzr', 0644, 0755)
94
93
 
95
94
        # although we are modifying the filesystem
96
95
        # underneath the objects, they are not locked, and thus it must
99
98
        # when a new lock is taken out.
100
99
        t = WorkingTree.open('.')
101
100
        b = t.branch
102
 
        self.assertEqualMode(0o755, b.control_files._dir_mode)
103
 
        self.assertEqualMode(0o644, b.control_files._file_mode)
104
 
        self.assertEqualMode(0o755, b.controldir._get_dir_mode())
105
 
        self.assertEqualMode(0o644, b.controldir._get_file_mode())
 
101
        self.assertEqualMode(0755, b.control_files._dir_mode)
 
102
        self.assertEqualMode(0644, b.control_files._file_mode)
 
103
        self.assertEqualMode(0755, b.bzrdir._get_dir_mode())
 
104
        self.assertEqualMode(0644, b.bzrdir._get_file_mode())
106
105
 
107
106
        # Modifying a file shouldn't break the permissions
108
 
        with open('a', 'wb') as f:
109
 
            f.write(b'foo2\n')
 
107
        with open('a', 'wb') as f: f.write('foo2\n')
110
108
        t.commit('foo2')
111
109
        # The mode should be maintained after commit
112
 
        check_mode_r(self, '.bzr', 0o644, 0o755)
 
110
        check_mode_r(self, '.bzr', 0644, 0755)
113
111
 
114
112
        # Adding a new file should maintain the permissions
115
 
        with open('b', 'wb') as f:
116
 
            f.write(b'new b\n')
 
113
        with open('b', 'wb') as f: f.write('new b\n')
117
114
        t.add('b')
118
115
        t.commit('new b')
119
 
        check_mode_r(self, '.bzr', 0o644, 0o755)
 
116
        check_mode_r(self, '.bzr', 0644, 0755)
120
117
 
121
118
        # Recursively update the modes of all files
122
 
        chmod_r('.bzr', 0o664, 0o775)
123
 
        check_mode_r(self, '.bzr', 0o664, 0o775)
 
119
        chmod_r('.bzr', 0664, 0775)
 
120
        check_mode_r(self, '.bzr', 0664, 0775)
124
121
        t = WorkingTree.open('.')
125
122
        b = t.branch
126
 
        self.assertEqualMode(0o775, b.control_files._dir_mode)
127
 
        self.assertEqualMode(0o664, b.control_files._file_mode)
128
 
        self.assertEqualMode(0o775, b.controldir._get_dir_mode())
129
 
        self.assertEqualMode(0o664, b.controldir._get_file_mode())
 
123
        self.assertEqualMode(0775, b.control_files._dir_mode)
 
124
        self.assertEqualMode(0664, b.control_files._file_mode)
 
125
        self.assertEqualMode(0775, b.bzrdir._get_dir_mode())
 
126
        self.assertEqualMode(0664, b.bzrdir._get_file_mode())
130
127
 
131
 
        with open('a', 'wb') as f:
132
 
            f.write(b'foo3\n')
 
128
        with open('a', 'wb') as f: f.write('foo3\n')
133
129
        t.commit('foo3')
134
 
        check_mode_r(self, '.bzr', 0o664, 0o775)
 
130
        check_mode_r(self, '.bzr', 0664, 0775)
135
131
 
136
 
        with open('c', 'wb') as f:
137
 
            f.write(b'new c\n')
 
132
        with open('c', 'wb') as f: f.write('new c\n')
138
133
        t.add('c')
139
134
        t.commit('new c')
140
 
        check_mode_r(self, '.bzr', 0o664, 0o775)
 
135
        check_mode_r(self, '.bzr', 0664, 0775)
141
136
 
142
137
    def test_new_files_group_sticky_bit(self):
143
138
        if sys.platform == 'win32':
153
148
 
154
149
        # Test the group sticky bit
155
150
        # Recursively update the modes of all files
156
 
        chmod_r('.bzr', 0o664, 0o2775)
157
 
        check_mode_r(self, '.bzr', 0o664, 0o2775)
 
151
        chmod_r('.bzr', 0664, 02775)
 
152
        check_mode_r(self, '.bzr', 0664, 02775)
158
153
        t = WorkingTree.open('.')
159
154
        b = t.branch
160
 
        self.assertEqualMode(0o2775, b.control_files._dir_mode)
161
 
        self.assertEqualMode(0o664, b.control_files._file_mode)
162
 
        self.assertEqualMode(0o2775, b.controldir._get_dir_mode())
163
 
        self.assertEqualMode(0o664, b.controldir._get_file_mode())
 
155
        self.assertEqualMode(02775, b.control_files._dir_mode)
 
156
        self.assertEqualMode(0664, b.control_files._file_mode)
 
157
        self.assertEqualMode(02775, b.bzrdir._get_dir_mode())
 
158
        self.assertEqualMode(0664, b.bzrdir._get_file_mode())
164
159
 
165
 
        with open('a', 'wb') as f:
166
 
            f.write(b'foo4\n')
 
160
        with open('a', 'wb') as f: f.write('foo4\n')
167
161
        t.commit('foo4')
168
 
        check_mode_r(self, '.bzr', 0o664, 0o2775)
 
162
        check_mode_r(self, '.bzr', 0664, 02775)
169
163
 
170
 
        with open('d', 'wb') as f:
171
 
            f.write(b'new d\n')
 
164
        with open('d', 'wb') as f: f.write('new d\n')
172
165
        t.add('d')
173
166
        t.commit('new d')
174
 
        check_mode_r(self, '.bzr', 0o664, 0o2775)
 
167
        check_mode_r(self, '.bzr', 0664, 02775)
175
168
 
176
169
 
177
170
class TestSftpPermissions(TestCaseWithSFTPServer):
189
182
        os.mkdir('local')
190
183
        t_local = self.make_branch_and_tree('local')
191
184
        b_local = t_local.branch
192
 
        with open('local/a', 'wb') as f:
193
 
            f.write(b'foo\n')
 
185
        with open('local/a', 'wb') as f: f.write('foo\n')
194
186
        t_local.add('a')
195
187
        t_local.commit('foo')
196
188
 
197
189
        # Delete them because we are modifying the filesystem underneath them
198
 
        chmod_r('local/.bzr', 0o644, 0o755)
199
 
        check_mode_r(self, 'local/.bzr', 0o644, 0o755)
 
190
        chmod_r('local/.bzr', 0644, 0755)
 
191
        check_mode_r(self, 'local/.bzr', 0644, 0755)
200
192
 
201
193
        t = WorkingTree.open('local')
202
194
        b_local = t.branch
203
 
        self.assertEqualMode(0o755, b_local.control_files._dir_mode)
204
 
        self.assertEqualMode(0o644, b_local.control_files._file_mode)
205
 
        self.assertEqualMode(0o755, b_local.controldir._get_dir_mode())
206
 
        self.assertEqualMode(0o644, b_local.controldir._get_file_mode())
 
195
        self.assertEqualMode(0755, b_local.control_files._dir_mode)
 
196
        self.assertEqualMode(0644, b_local.control_files._file_mode)
 
197
        self.assertEqualMode(0755, b_local.bzrdir._get_dir_mode())
 
198
        self.assertEqualMode(0644, b_local.bzrdir._get_file_mode())
207
199
 
208
200
        os.mkdir('sftp')
209
201
        sftp_url = self.get_url('sftp')
211
203
 
212
204
        b_sftp.pull(b_local)
213
205
        del b_sftp
214
 
        chmod_r('sftp/.bzr', 0o644, 0o755)
215
 
        check_mode_r(self, 'sftp/.bzr', 0o644, 0o755)
 
206
        chmod_r('sftp/.bzr', 0644, 0755)
 
207
        check_mode_r(self, 'sftp/.bzr', 0644, 0755)
216
208
 
217
209
        b_sftp = Branch.open(sftp_url)
218
 
        self.assertEqualMode(0o755, b_sftp.control_files._dir_mode)
219
 
        self.assertEqualMode(0o644, b_sftp.control_files._file_mode)
220
 
        self.assertEqualMode(0o755, b_sftp.controldir._get_dir_mode())
221
 
        self.assertEqualMode(0o644, b_sftp.controldir._get_file_mode())
 
210
        self.assertEqualMode(0755, b_sftp.control_files._dir_mode)
 
211
        self.assertEqualMode(0644, b_sftp.control_files._file_mode)
 
212
        self.assertEqualMode(0755, b_sftp.bzrdir._get_dir_mode())
 
213
        self.assertEqualMode(0644, b_sftp.bzrdir._get_file_mode())
222
214
 
223
 
        with open('local/a', 'wb') as f:
224
 
            f.write(b'foo2\n')
 
215
        with open('local/a', 'wb') as f: f.write('foo2\n')
225
216
        t_local.commit('foo2')
226
217
        b_sftp.pull(b_local)
227
218
        # The mode should be maintained after commit
228
 
        check_mode_r(self, 'sftp/.bzr', 0o644, 0o755)
 
219
        check_mode_r(self, 'sftp/.bzr', 0644, 0755)
229
220
 
230
 
        with open('local/b', 'wb') as f:
231
 
            f.write(b'new b\n')
 
221
        with open('local/b', 'wb') as f: f.write('new b\n')
232
222
        t_local.add('b')
233
223
        t_local.commit('new b')
234
224
        b_sftp.pull(b_local)
235
 
        check_mode_r(self, 'sftp/.bzr', 0o644, 0o755)
 
225
        check_mode_r(self, 'sftp/.bzr', 0644, 0755)
236
226
 
237
227
        del b_sftp
238
228
        # Recursively update the modes of all files
239
 
        chmod_r('sftp/.bzr', 0o664, 0o775)
240
 
        check_mode_r(self, 'sftp/.bzr', 0o664, 0o775)
 
229
        chmod_r('sftp/.bzr', 0664, 0775)
 
230
        check_mode_r(self, 'sftp/.bzr', 0664, 0775)
241
231
 
242
232
        b_sftp = Branch.open(sftp_url)
243
 
        self.assertEqualMode(0o775, b_sftp.control_files._dir_mode)
244
 
        self.assertEqualMode(0o664, b_sftp.control_files._file_mode)
245
 
        self.assertEqualMode(0o775, b_sftp.controldir._get_dir_mode())
246
 
        self.assertEqualMode(0o664, b_sftp.controldir._get_file_mode())
 
233
        self.assertEqualMode(0775, b_sftp.control_files._dir_mode)
 
234
        self.assertEqualMode(0664, b_sftp.control_files._file_mode)
 
235
        self.assertEqualMode(0775, b_sftp.bzrdir._get_dir_mode())
 
236
        self.assertEqualMode(0664, b_sftp.bzrdir._get_file_mode())
247
237
 
248
 
        with open('local/a', 'wb') as f:
249
 
            f.write(b'foo3\n')
 
238
        with open('local/a', 'wb') as f: f.write('foo3\n')
250
239
        t_local.commit('foo3')
251
240
        b_sftp.pull(b_local)
252
 
        check_mode_r(self, 'sftp/.bzr', 0o664, 0o775)
 
241
        check_mode_r(self, 'sftp/.bzr', 0664, 0775)
253
242
 
254
 
        with open('local/c', 'wb') as f:
255
 
            f.write(b'new c\n')
 
243
        with open('local/c', 'wb') as f: f.write('new c\n')
256
244
        t_local.add('c')
257
245
        t_local.commit('new c')
258
246
        b_sftp.pull(b_local)
259
 
        check_mode_r(self, 'sftp/.bzr', 0o664, 0o775)
 
247
        check_mode_r(self, 'sftp/.bzr', 0664, 0775)
260
248
 
261
249
    def test_sftp_server_modes(self):
262
250
        if sys.platform == 'win32':
263
251
            raise TestSkipped('chmod has no effect on win32')
264
252
 
265
 
        umask = 0o022
 
253
        umask = 0022
266
254
        original_umask = os.umask(umask)
267
255
 
268
256
        try:
269
257
            t = self.get_transport()
270
258
            # Direct access should be masked by umask
271
 
            with t._sftp_open_exclusive('a', mode=0o666) as f:
272
 
                f.write(b'foo\n')
273
 
            self.assertTransportMode(t, 'a', 0o666 & ~umask)
 
259
            t._sftp_open_exclusive('a', mode=0666).write('foo\n')
 
260
            self.assertTransportMode(t, 'a', 0666 &~umask)
274
261
 
275
262
            # but Transport overrides umask
276
 
            t.put_bytes('b', b'txt', mode=0o666)
277
 
            self.assertTransportMode(t, 'b', 0o666)
278
 
 
279
 
            t._get_sftp().mkdir('c', mode=0o777)
280
 
            self.assertTransportMode(t, 'c', 0o777 & ~umask)
281
 
 
282
 
            t.mkdir('d', mode=0o777)
283
 
            self.assertTransportMode(t, 'd', 0o777)
 
263
            t.put_bytes('b', 'txt', mode=0666)
 
264
            self.assertTransportMode(t, 'b', 0666)
 
265
 
 
266
            t._get_sftp().mkdir('c', mode=0777)
 
267
            self.assertTransportMode(t, 'c', 0777 &~umask)
 
268
 
 
269
            t.mkdir('d', mode=0777)
 
270
            self.assertTransportMode(t, 'd', 0777)
284
271
        finally:
285
272
            os.umask(original_umask)