/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 breezy/tests/test_permissions.py

  • Committer: Jelmer Vernooij
  • Date: 2018-07-08 14:45:27 UTC
  • mto: This revision was merged to the branch mainline in revision 7036.
  • Revision ID: jelmer@jelmer.uk-20180708144527-codhlvdcdg9y0nji
Fix a bunch of merge tests.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005 Canonical Ltd
 
1
# Copyright (C) 2005-2011 Canonical Ltd
2
2
# -*- coding: utf-8 -*-
3
3
#
4
4
# This program is free software; you can redistribute it and/or modify
32
32
 
33
33
import os
34
34
import sys
35
 
import stat
36
 
from cStringIO import StringIO
37
 
import urllib
38
35
 
39
 
from bzrlib.branch import Branch
40
 
from bzrlib.bzrdir import BzrDir
41
 
from bzrlib.tests import TestCaseWithTransport, TestSkipped
42
 
from bzrlib.tests.test_sftp_transport import TestCaseWithSFTPServer
43
 
from bzrlib.transport import get_transport
44
 
from bzrlib.workingtree import WorkingTree
 
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
45
42
 
46
43
 
47
44
def chmod_r(base, file_mode, dir_mode):
65
62
    :param dir_mode: The mode for all directories
66
63
    :param include_base: If false, only check the subdirectories
67
64
    """
68
 
    t = get_transport(".")
 
65
    t = test.get_transport()
69
66
    if include_base:
70
67
        test.assertTransportMode(t, base, dir_mode)
71
68
    for root, dirs, files in os.walk(base):
72
69
        for d in dirs:
73
 
            p = '/'.join([urllib.quote(x) for x in root.split('/\\') + [d]])
 
70
            p = '/'.join([urlutils.quote(x) for x in root.split('/\\') + [d]])
74
71
            test.assertTransportMode(t, p, dir_mode)
75
72
        for f in files:
76
73
            p = os.path.join(root, f)
77
 
            p = '/'.join([urllib.quote(x) for x in root.split('/\\') + [f]])
 
74
            p = '/'.join([urlutils.quote(x) for x in root.split('/\\') + [f]])
78
75
            test.assertTransportMode(t, p, file_mode)
79
76
 
80
77
 
86
83
 
87
84
        t = self.make_branch_and_tree('.')
88
85
        b = t.branch
89
 
        open('a', 'wb').write('foo\n')
 
86
        with open('a', 'wb') as f: f.write(b'foo\n')
90
87
        # ensure check_mode_r works with capital-letter file-ids like TREE_ROOT
91
88
        t.add('a', 'CAPS-ID')
92
89
        t.commit('foo')
93
90
 
94
 
        chmod_r('.bzr', 0644, 0755)
95
 
        check_mode_r(self, '.bzr', 0644, 0755)
 
91
        chmod_r('.bzr', 0o644, 0o755)
 
92
        check_mode_r(self, '.bzr', 0o644, 0o755)
96
93
 
97
94
        # although we are modifying the filesystem
98
95
        # underneath the objects, they are not locked, and thus it must
101
98
        # when a new lock is taken out.
102
99
        t = WorkingTree.open('.')
103
100
        b = t.branch
104
 
        self.assertEqualMode(0755, b.control_files._dir_mode)
105
 
        self.assertEqualMode(0644, b.control_files._file_mode)
106
 
        self.assertEqualMode(0755, b.bzrdir._get_dir_mode())
107
 
        self.assertEqualMode(0644, b.bzrdir._get_file_mode())
 
101
        self.assertEqualMode(0o755, b.control_files._dir_mode)
 
102
        self.assertEqualMode(0o644, b.control_files._file_mode)
 
103
        self.assertEqualMode(0o755, b.controldir._get_dir_mode())
 
104
        self.assertEqualMode(0o644, b.controldir._get_file_mode())
108
105
 
109
106
        # Modifying a file shouldn't break the permissions
110
 
        open('a', 'wb').write('foo2\n')
 
107
        with open('a', 'wb') as f: f.write(b'foo2\n')
111
108
        t.commit('foo2')
112
109
        # The mode should be maintained after commit
113
 
        check_mode_r(self, '.bzr', 0644, 0755)
 
110
        check_mode_r(self, '.bzr', 0o644, 0o755)
114
111
 
115
112
        # Adding a new file should maintain the permissions
116
 
        open('b', 'wb').write('new b\n')
 
113
        with open('b', 'wb') as f: f.write(b'new b\n')
117
114
        t.add('b')
118
115
        t.commit('new b')
119
 
        check_mode_r(self, '.bzr', 0644, 0755)
 
116
        check_mode_r(self, '.bzr', 0o644, 0o755)
120
117
 
121
118
        # Recursively update the modes of all files
122
 
        chmod_r('.bzr', 0664, 0775)
123
 
        check_mode_r(self, '.bzr', 0664, 0775)
 
119
        chmod_r('.bzr', 0o664, 0o775)
 
120
        check_mode_r(self, '.bzr', 0o664, 0o775)
124
121
        t = WorkingTree.open('.')
125
122
        b = t.branch
126
 
        self.assertEqualMode(0775, b.control_files._dir_mode)
127
 
        self.assertEqualMode(0664, b.control_files._file_mode)
128
 
        self.assertEqualMode(0775, b.bzrdir._get_dir_mode())
129
 
        self.assertEqualMode(0664, b.bzrdir._get_file_mode())
 
123
        self.assertEqualMode(0o775, b.control_files._dir_mode)
 
124
        self.assertEqualMode(0o664, b.control_files._file_mode)
 
125
        self.assertEqualMode(0o775, b.controldir._get_dir_mode())
 
126
        self.assertEqualMode(0o664, b.controldir._get_file_mode())
130
127
 
131
 
        open('a', 'wb').write('foo3\n')
 
128
        with open('a', 'wb') as f: f.write(b'foo3\n')
132
129
        t.commit('foo3')
133
 
        check_mode_r(self, '.bzr', 0664, 0775)
 
130
        check_mode_r(self, '.bzr', 0o664, 0o775)
134
131
 
135
 
        open('c', 'wb').write('new c\n')
 
132
        with open('c', 'wb') as f: f.write(b'new c\n')
136
133
        t.add('c')
137
134
        t.commit('new c')
138
 
        check_mode_r(self, '.bzr', 0664, 0775)
 
135
        check_mode_r(self, '.bzr', 0o664, 0o775)
139
136
 
140
137
    def test_new_files_group_sticky_bit(self):
141
138
        if sys.platform == 'win32':
142
139
            raise TestSkipped('chmod has no effect on win32')
143
 
        elif sys.platform == 'darwin' or sys.platform.startswith('freebsd'):
144
 
            # OS X (and FreeBSD) create temp dirs with the 'wheel' group, which
145
 
            # users are not likely to be in, and this prevents us from setting
146
 
            # the sgid bit
 
140
        elif sys.platform == 'darwin' or 'freebsd' in sys.platform:
 
141
            # FreeBSD-based platforms create temp dirs with the 'wheel' group,
 
142
            # which users are not likely to be in, and this prevents us from
 
143
            # setting the sgid bit
147
144
            os.chown(self.test_dir, os.getuid(), os.getgid())
148
145
 
149
146
        t = self.make_branch_and_tree('.')
151
148
 
152
149
        # Test the group sticky bit
153
150
        # Recursively update the modes of all files
154
 
        chmod_r('.bzr', 0664, 02775)
155
 
        check_mode_r(self, '.bzr', 0664, 02775)
 
151
        chmod_r('.bzr', 0o664, 0o2775)
 
152
        check_mode_r(self, '.bzr', 0o664, 0o2775)
156
153
        t = WorkingTree.open('.')
157
154
        b = t.branch
158
 
        self.assertEqualMode(02775, b.control_files._dir_mode)
159
 
        self.assertEqualMode(0664, b.control_files._file_mode)
160
 
        self.assertEqualMode(02775, b.bzrdir._get_dir_mode())
161
 
        self.assertEqualMode(0664, b.bzrdir._get_file_mode())
 
155
        self.assertEqualMode(0o2775, b.control_files._dir_mode)
 
156
        self.assertEqualMode(0o664, b.control_files._file_mode)
 
157
        self.assertEqualMode(0o2775, b.controldir._get_dir_mode())
 
158
        self.assertEqualMode(0o664, b.controldir._get_file_mode())
162
159
 
163
 
        open('a', 'wb').write('foo4\n')
 
160
        with open('a', 'wb') as f: f.write(b'foo4\n')
164
161
        t.commit('foo4')
165
 
        check_mode_r(self, '.bzr', 0664, 02775)
 
162
        check_mode_r(self, '.bzr', 0o664, 0o2775)
166
163
 
167
 
        open('d', 'wb').write('new d\n')
 
164
        with open('d', 'wb') as f: f.write(b'new d\n')
168
165
        t.add('d')
169
166
        t.commit('new d')
170
 
        check_mode_r(self, '.bzr', 0664, 02775)
 
167
        check_mode_r(self, '.bzr', 0o664, 0o2775)
171
168
 
172
169
 
173
170
class TestSftpPermissions(TestCaseWithSFTPServer):
180
177
 
181
178
        # bodge around for stubsftpserver not letting use connect
182
179
        # more than once
183
 
        _t = get_transport(self.get_url())
 
180
        _t = self.get_transport()
184
181
 
185
182
        os.mkdir('local')
186
183
        t_local = self.make_branch_and_tree('local')
187
184
        b_local = t_local.branch
188
 
        open('local/a', 'wb').write('foo\n')
 
185
        with open('local/a', 'wb') as f: f.write(b'foo\n')
189
186
        t_local.add('a')
190
187
        t_local.commit('foo')
191
188
 
192
189
        # Delete them because we are modifying the filesystem underneath them
193
 
        chmod_r('local/.bzr', 0644, 0755)
194
 
        check_mode_r(self, 'local/.bzr', 0644, 0755)
 
190
        chmod_r('local/.bzr', 0o644, 0o755)
 
191
        check_mode_r(self, 'local/.bzr', 0o644, 0o755)
195
192
 
196
193
        t = WorkingTree.open('local')
197
194
        b_local = t.branch
198
 
        self.assertEqualMode(0755, b_local.control_files._dir_mode)
199
 
        self.assertEqualMode(0644, b_local.control_files._file_mode)
200
 
        self.assertEqualMode(0755, b_local.bzrdir._get_dir_mode())
201
 
        self.assertEqualMode(0644, b_local.bzrdir._get_file_mode())
 
195
        self.assertEqualMode(0o755, b_local.control_files._dir_mode)
 
196
        self.assertEqualMode(0o644, b_local.control_files._file_mode)
 
197
        self.assertEqualMode(0o755, b_local.controldir._get_dir_mode())
 
198
        self.assertEqualMode(0o644, b_local.controldir._get_file_mode())
202
199
 
203
200
        os.mkdir('sftp')
204
201
        sftp_url = self.get_url('sftp')
205
 
        b_sftp = BzrDir.create_branch_and_repo(sftp_url)
 
202
        b_sftp = ControlDir.create_branch_and_repo(sftp_url)
206
203
 
207
204
        b_sftp.pull(b_local)
208
205
        del b_sftp
209
 
        chmod_r('sftp/.bzr', 0644, 0755)
210
 
        check_mode_r(self, 'sftp/.bzr', 0644, 0755)
 
206
        chmod_r('sftp/.bzr', 0o644, 0o755)
 
207
        check_mode_r(self, 'sftp/.bzr', 0o644, 0o755)
211
208
 
212
209
        b_sftp = Branch.open(sftp_url)
213
 
        self.assertEqualMode(0755, b_sftp.control_files._dir_mode)
214
 
        self.assertEqualMode(0644, b_sftp.control_files._file_mode)
215
 
        self.assertEqualMode(0755, b_sftp.bzrdir._get_dir_mode())
216
 
        self.assertEqualMode(0644, b_sftp.bzrdir._get_file_mode())
 
210
        self.assertEqualMode(0o755, b_sftp.control_files._dir_mode)
 
211
        self.assertEqualMode(0o644, b_sftp.control_files._file_mode)
 
212
        self.assertEqualMode(0o755, b_sftp.controldir._get_dir_mode())
 
213
        self.assertEqualMode(0o644, b_sftp.controldir._get_file_mode())
217
214
 
218
 
        open('local/a', 'wb').write('foo2\n')
 
215
        with open('local/a', 'wb') as f: f.write(b'foo2\n')
219
216
        t_local.commit('foo2')
220
217
        b_sftp.pull(b_local)
221
218
        # The mode should be maintained after commit
222
 
        check_mode_r(self, 'sftp/.bzr', 0644, 0755)
 
219
        check_mode_r(self, 'sftp/.bzr', 0o644, 0o755)
223
220
 
224
 
        open('local/b', 'wb').write('new b\n')
 
221
        with open('local/b', 'wb') as f: f.write(b'new b\n')
225
222
        t_local.add('b')
226
223
        t_local.commit('new b')
227
224
        b_sftp.pull(b_local)
228
 
        check_mode_r(self, 'sftp/.bzr', 0644, 0755)
 
225
        check_mode_r(self, 'sftp/.bzr', 0o644, 0o755)
229
226
 
230
227
        del b_sftp
231
228
        # Recursively update the modes of all files
232
 
        chmod_r('sftp/.bzr', 0664, 0775)
233
 
        check_mode_r(self, 'sftp/.bzr', 0664, 0775)
 
229
        chmod_r('sftp/.bzr', 0o664, 0o775)
 
230
        check_mode_r(self, 'sftp/.bzr', 0o664, 0o775)
234
231
 
235
232
        b_sftp = Branch.open(sftp_url)
236
 
        self.assertEqualMode(0775, b_sftp.control_files._dir_mode)
237
 
        self.assertEqualMode(0664, b_sftp.control_files._file_mode)
238
 
        self.assertEqualMode(0775, b_sftp.bzrdir._get_dir_mode())
239
 
        self.assertEqualMode(0664, b_sftp.bzrdir._get_file_mode())
 
233
        self.assertEqualMode(0o775, b_sftp.control_files._dir_mode)
 
234
        self.assertEqualMode(0o664, b_sftp.control_files._file_mode)
 
235
        self.assertEqualMode(0o775, b_sftp.controldir._get_dir_mode())
 
236
        self.assertEqualMode(0o664, b_sftp.controldir._get_file_mode())
240
237
 
241
 
        open('local/a', 'wb').write('foo3\n')
 
238
        with open('local/a', 'wb') as f: f.write(b'foo3\n')
242
239
        t_local.commit('foo3')
243
240
        b_sftp.pull(b_local)
244
 
        check_mode_r(self, 'sftp/.bzr', 0664, 0775)
 
241
        check_mode_r(self, 'sftp/.bzr', 0o664, 0o775)
245
242
 
246
 
        open('local/c', 'wb').write('new c\n')
 
243
        with open('local/c', 'wb') as f: f.write(b'new c\n')
247
244
        t_local.add('c')
248
245
        t_local.commit('new c')
249
246
        b_sftp.pull(b_local)
250
 
        check_mode_r(self, 'sftp/.bzr', 0664, 0775)
 
247
        check_mode_r(self, 'sftp/.bzr', 0o664, 0o775)
251
248
 
252
249
    def test_sftp_server_modes(self):
253
250
        if sys.platform == 'win32':
254
251
            raise TestSkipped('chmod has no effect on win32')
255
252
 
256
 
        umask = 0022
 
253
        umask = 0o022
257
254
        original_umask = os.umask(umask)
258
255
 
259
256
        try:
260
 
            t = get_transport(self.get_url())
 
257
            t = self.get_transport()
261
258
            # Direct access should be masked by umask
262
 
            t._sftp_open_exclusive('a', mode=0666).write('foo\n')
263
 
            self.assertTransportMode(t, 'a', 0666 &~umask)
 
259
            with t._sftp_open_exclusive('a', mode=0o666) as f:
 
260
                f.write(b'foo\n')
 
261
            self.assertTransportMode(t, 'a', 0o666 &~umask)
264
262
 
265
263
            # but Transport overrides umask
266
 
            t.put_bytes('b', 'txt', mode=0666)
267
 
            self.assertTransportMode(t, 'b', 0666)
268
 
 
269
 
            t._get_sftp().mkdir('c', mode=0777)
270
 
            self.assertTransportMode(t, 'c', 0777 &~umask)
271
 
 
272
 
            t.mkdir('d', mode=0777)
273
 
            self.assertTransportMode(t, 'd', 0777)
 
264
            t.put_bytes('b', b'txt', mode=0o666)
 
265
            self.assertTransportMode(t, 'b', 0o666)
 
266
 
 
267
            t._get_sftp().mkdir('c', mode=0o777)
 
268
            self.assertTransportMode(t, 'c', 0o777 &~umask)
 
269
 
 
270
            t.mkdir('d', mode=0o777)
 
271
            self.assertTransportMode(t, 'd', 0o777)
274
272
        finally:
275
273
            os.umask(original_umask)