2021-05-24 01:24:22 +08:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2014-12-30 18:39:57 +08:00
|
|
|
require 'test_helper'
|
|
|
|
|
|
|
|
class FilePermissionsTest < MiniTest::Test
|
2017-06-29 10:57:12 +08:00
|
|
|
ZIPNAME = File.join(File.dirname(__FILE__), 'umask.zip')
|
|
|
|
FILENAME = File.join(File.dirname(__FILE__), 'umask.txt')
|
2014-12-30 18:39:57 +08:00
|
|
|
|
|
|
|
def teardown
|
2016-07-01 05:41:27 +08:00
|
|
|
::File.unlink(ZIPNAME)
|
2014-12-30 18:39:57 +08:00
|
|
|
::File.unlink(FILENAME)
|
|
|
|
end
|
|
|
|
|
2016-09-01 19:15:30 +08:00
|
|
|
def test_current_umask
|
|
|
|
create_files
|
|
|
|
assert_matching_permissions FILENAME, ZIPNAME
|
|
|
|
end
|
2014-12-30 18:39:57 +08:00
|
|
|
|
2016-09-01 19:15:30 +08:00
|
|
|
def test_umask_000
|
2020-02-20 01:59:22 +08:00
|
|
|
apply_umask(0o000) do
|
2016-07-01 05:41:27 +08:00
|
|
|
create_files
|
2014-12-30 18:39:57 +08:00
|
|
|
end
|
|
|
|
|
2016-09-01 19:15:30 +08:00
|
|
|
assert_matching_permissions FILENAME, ZIPNAME
|
|
|
|
end
|
2014-12-30 18:39:57 +08:00
|
|
|
|
2016-09-01 19:15:30 +08:00
|
|
|
def test_umask_066
|
2020-02-20 01:59:22 +08:00
|
|
|
apply_umask(0o066) do
|
2016-07-01 05:41:27 +08:00
|
|
|
create_files
|
2014-12-30 18:39:57 +08:00
|
|
|
end
|
|
|
|
|
2016-09-01 19:15:30 +08:00
|
|
|
assert_matching_permissions FILENAME, ZIPNAME
|
|
|
|
end
|
2014-12-30 18:39:57 +08:00
|
|
|
|
2016-09-01 19:15:30 +08:00
|
|
|
def test_umask_027
|
2020-02-20 01:59:22 +08:00
|
|
|
apply_umask(0o027) do
|
2016-09-01 19:15:30 +08:00
|
|
|
create_files
|
2014-12-30 18:39:57 +08:00
|
|
|
end
|
|
|
|
|
2016-09-01 19:15:30 +08:00
|
|
|
assert_matching_permissions FILENAME, ZIPNAME
|
2014-12-30 18:39:57 +08:00
|
|
|
end
|
|
|
|
|
2016-07-01 05:47:41 +08:00
|
|
|
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
|
|
|
|
|
2016-07-01 05:41:27 +08:00
|
|
|
def create_files
|
|
|
|
::Zip::File.open(ZIPNAME, ::Zip::File::CREATE) do |zip|
|
2017-06-29 10:57:12 +08:00
|
|
|
zip.comment = 'test'
|
2014-12-30 18:39:57 +08:00
|
|
|
end
|
2016-07-01 05:41:27 +08:00
|
|
|
|
|
|
|
::File.open(FILENAME, 'w') do |file|
|
|
|
|
file << 'test'
|
|
|
|
end
|
2014-12-30 18:39:57 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
# If anything goes wrong, make sure the umask is restored.
|
2020-02-20 01:59:22 +08:00
|
|
|
def apply_umask(umask)
|
2017-06-29 10:57:12 +08:00
|
|
|
saved_umask = ::File.umask(umask)
|
|
|
|
yield
|
|
|
|
ensure
|
|
|
|
::File.umask(saved_umask)
|
2014-12-30 18:39:57 +08:00
|
|
|
end
|
|
|
|
end
|