require_relative '../helper'
require 'fluent/configurable'
require 'fluent/config/element'
require 'fluent/config/section'
require 'fluent/system_config'
module Fluent::Config
class FakeLoggerInitializer
attr_accessor :level
def initalize
@level = nil
end
end
class FakeSupervisor
def initialize
@root_dir = nil
@log = FakeLoggerInitializer.new
@log_level = nil
@suppress_interval = nil
@suppress_config_dump = nil
@suppress_repeated_stacktrace = nil
@without_source = nil
@emit_error_log_interval = nil
@file_permission = nil
@dir_permission = nil
end
end
class TestSystemConfig < ::Test::Unit::TestCase
TMP_DIR = File.expand_path(File.dirname(__FILE__) + "/tmp/system_config/#{ENV['TEST_ENV_NUMBER']}")
def parse_text(text)
basepath = File.expand_path(File.dirname(__FILE__) + '/../../')
Fluent::Config.parse(text, '(test)', basepath, true).elements.find { |e| e.name == 'system' }
end
test 'should not override default configurations when no parameters' do
conf = parse_text(<<-EOS)
EOS
s = FakeSupervisor.new
sc = Fluent::SystemConfig.new(conf)
sc.apply(s)
assert_nil(sc.root_dir)
assert_nil(sc.log_level)
assert_nil(sc.suppress_repeated_stacktrace)
assert_nil(sc.emit_error_log_interval)
assert_nil(sc.suppress_config_dump)
assert_nil(sc.without_source)
assert_nil(s.instance_variable_get(:@root_dir))
assert_nil(s.instance_variable_get(:@log_level))
assert_nil(s.instance_variable_get(:@suppress_repeated_stacktrace))
assert_nil(s.instance_variable_get(:@emit_error_log_interval))
assert_nil(s.instance_variable_get(:@suppress_config_dump))
assert_nil(s.instance_variable_get(:@without_source))
assert_nil(s.instance_variable_get(:@file_permission))
assert_nil(s.instance_variable_get(:@dir_permission))
end
data(
'root_dir' => ['root_dir', File.join(TMP_DIR, 'root')],
'log_level' => ['log_level', 'error'],
'suppress_repeated_stacktrace' => ['suppress_repeated_stacktrace', true],
'emit_error_log_interval' => ['emit_error_log_interval', 60],
'suppress_config_dump' => ['suppress_config_dump', true],
'without_source' => ['without_source', true],
)
test "accepts parameters" do |(k, v)|
conf = parse_text(<<-EOS)
#{k} #{v}
EOS
s = FakeSupervisor.new
sc = Fluent::SystemConfig.new(conf)
sc.apply(s)
assert_not_nil(sc.instance_variable_get("@#{k}"))
key = (k == 'emit_error_log_interval' ? 'suppress_interval' : k)
assert_not_nil(s.instance_variable_get("@#{key}"))
end
data(
'foo' => ['foo', 'bar'],
'hoge' => ['hoge', 'fuga'],
)
test "should not affect settable parameters with unknown parameters" do |(k, v)|
s = FakeSupervisor.new
sc = Fluent::SystemConfig.new({k => v})
sc.apply(s)
assert_nil(s.instance_variable_get(:@root_dir))
assert_nil(s.instance_variable_get(:@log_level))
assert_nil(s.instance_variable_get(:@suppress_repeated_stacktrace))
assert_nil(s.instance_variable_get(:@emit_error_log_interval))
assert_nil(s.instance_variable_get(:@suppress_config_dump))
assert_nil(s.instance_variable_get(:@without_source))
assert_nil(s.instance_variable_get(:@file_permission))
assert_nil(s.instance_variable_get(:@dir_permission))
end
test 'log_level' do
conf = parse_text(<<-EOS)
log_level warn
EOS
s = FakeSupervisor.new
sc = Fluent::SystemConfig.new(conf)
sc.apply(s)
assert_equal(Fluent::Log::LEVEL_WARN, s.instance_variable_get("@log").level)
end
test 'process global overridable variables' do
conf = parse_text(<<-EOS)
file_permission 0655
dir_permission 0765
EOS
s = FakeSupervisor.new
sc = Fluent::SystemConfig.new(conf)
sc.apply(s)
assert_equal(0655, s.instance_variable_get(:@file_permission))
assert_equal(0765, s.instance_variable_get(:@dir_permission))
end
end
end