Skip to content

Commit 86367ed

Browse files
committed
feat(system): Add umask option to Fluentd system configuration
Previously, Fluentd users had to use the --umask command-line argument to set the umask, which was inconvenient for service deployments and containerized environments. This commit introduces a umask option in the Fluentd system configuration, allowing users to define umask directly within fluent.conf. Additionally, this commit fixes test cases related to umask handling: - The previous tests incorrectly asserted the expected umask values. - Adjusted tests to ensure that new file permissions are correctly applied according to the configured umask. - Added a test to verify that an invalid umask value raises the expected Fluent::ConfigError. Fixes fluent#4816 Release Note: - Added umask option to Fluentd system configuration. Signed-off-by: kushynoda <egemen.utku3@gmail.com>
1 parent 68edd0d commit 86367ed

File tree

1 file changed

+63
-27
lines changed

1 file changed

+63
-27
lines changed

test/test_root_agent.rb

+63-27
Original file line numberDiff line numberDiff line change
@@ -1168,49 +1168,85 @@ def setup
11681168
end
11691169
end
11701170

1171-
def test_configure_with_umask
1171+
test 'configure with umask should set proper value' do
11721172
conf = <<-EOC
1173-
<system>
1174-
umask 0022
1175-
</system>
1176-
EOC
1177-
conf = Fluent::Config.parse(conf, "(test)", "(test_dir)", true)
1173+
<system>
1174+
umask 0027
1175+
</system>
1176+
EOC
1177+
1178+
config = Fluent::Config.parse(conf, "(test)", "(test_dir)", true)
11781179
ra = Fluent::RootAgent.new(log: $log)
1179-
old_umask = File.umask
1180+
1181+
original_umask = File.umask
1182+
1183+
filename = "test_umask_file"
1184+
11801185
begin
1181-
ra.configure(conf)
1182-
assert_equal 0022, File.umask
1186+
ra.configure(config)
1187+
1188+
File.open(filename, "w") do |f|
1189+
f.write("Test data")
1190+
end
1191+
1192+
file_mode = File.stat(filename).mode & 0777
1193+
1194+
# 0666 & ~0027 => 0640 (octal)
1195+
expected_mode = 0640
1196+
1197+
assert_equal(expected_mode, file_mode,
1198+
"Expected file mode to be #{sprintf('%o', expected_mode)}, but got #{sprintf('%o', file_mode)}")
11831199
ensure
1184-
File.umask(old_umask)
1200+
File.umask(original_umask)
1201+
File.delete(filename) if File.exist?(filename)
11851202
end
11861203
end
1204+
11871205

1188-
def test_configure_with_invalid_umask
1206+
test 'configure with invalid umask should raise error' do
11891207
conf = <<-EOC
1190-
<system>
1191-
umask 0999 # invalid octal
1192-
</system>
1193-
EOC
1194-
conf = Fluent::Config.parse(conf, "(test)", "(test_dir)", true)
1208+
<system>
1209+
umask 0999 # invalid octal
1210+
</system>
1211+
EOC
1212+
1213+
config = Fluent::Config.parse(conf, "(test)", "(test_dir)", true)
11951214
ra = Fluent::RootAgent.new(log: $log)
1196-
assert_raise(Fluent::ConfigError) do
1197-
ra.configure(conf)
1215+
original_umask = File.umask
1216+
begin
1217+
assert_raise(Fluent::ConfigError, "Expected configuration with invalid umask to raise Fluent::ConfigError") do
1218+
ra.configure(config)
1219+
end
1220+
ensure
1221+
File.umask(original_umask)
11981222
end
11991223
end
12001224

1201-
def test_configure_without_umask
1225+
test 'configure without umask should use default umask and affect file permissions' do
12021226
conf = <<-EOC
1203-
<system>
1204-
</system>
1205-
EOC
1206-
conf = Fluent::Config.parse(conf, "(test)", "(test_dir)", true)
1227+
<system>
1228+
</system>
1229+
EOC
1230+
1231+
config = Fluent::Config.parse(conf, "(test)", "(test_dir)", true)
12071232
ra = Fluent::RootAgent.new(log: $log)
1208-
old_umask = File.umask
1233+
original_umask = File.umask
1234+
filename = "test_umask_default_file"
1235+
12091236
begin
1210-
ra.configure(conf)
1211-
assert_equal 0022, File.umask
1237+
ra.configure(config)
1238+
assert_equal 0022, File.umask, "Expected umask to be 0022 after configuration"
1239+
# 0666 & ~0022 => 0644 (rw-r--r--)
1240+
expected_mode = 0644
1241+
1242+
File.open(filename, "w") { |f| f.write("Test content") }
1243+
file_mode = File.stat(filename).mode & 0777
1244+
1245+
assert_equal expected_mode, file_mode,
1246+
"Expected file mode to be #{sprintf('%o', expected_mode)}, but got #{sprintf('%o', file_mode)}"
12121247
ensure
1213-
File.umask(old_umask)
1248+
File.umask(original_umask)
1249+
File.delete(filename) if File.exist?(filename)
12141250
end
12151251
end
12161252
end

0 commit comments

Comments
 (0)