-
Notifications
You must be signed in to change notification settings - Fork 312
/
file_permissions_test.rb
65 lines (52 loc) · 1.31 KB
/
file_permissions_test.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
require 'test_helper'
class FilePermissionsTest < MiniTest::Test
ZIPNAME = File.join(File.dirname(__FILE__), 'umask.zip')
FILENAME = File.join(File.dirname(__FILE__), 'umask.txt')
def teardown
::File.unlink(ZIPNAME)
::File.unlink(FILENAME)
end
def test_current_umask
create_files
assert_matching_permissions FILENAME, ZIPNAME
end
def test_umask_000
apply_umask(0o000) do
create_files
end
assert_matching_permissions FILENAME, ZIPNAME
end
def test_umask_066
apply_umask(0o066) do
create_files
end
assert_matching_permissions FILENAME, ZIPNAME
end
def test_umask_027
apply_umask(0o027) do
create_files
end
assert_matching_permissions FILENAME, ZIPNAME
end
def assert_matching_permissions(expected_file, actual_file)
assert_equal(
::File.stat(expected_file).mode.to_s(8).rjust(4, '0'),
::File.stat(actual_file).mode.to_s(8).rjust(4, '0')
)
end
def create_files
::Zip::File.open(ZIPNAME, ::Zip::File::CREATE) do |zip|
zip.comment = 'test'
end
::File.open(FILENAME, 'w') do |file|
file << 'test'
end
end
# If anything goes wrong, make sure the umask is restored.
def apply_umask(umask)
saved_umask = ::File.umask(umask)
yield
ensure
::File.umask(saved_umask)
end
end