require 'fluent/test/driver/output' require 'fluent/plugin/out_record_modifier' class RecordModifierOutputTest < Test::Unit::TestCase def setup Fluent::Test.setup end CONFIG = %q! tag foo.filtered gen_host "#{Socket.gethostname}" foo bar remove_keys hoge ! def create_driver(conf = CONFIG) Fluent::Test::Driver::Output.new(Fluent::Plugin::RecordModifierOutput).configure(conf) end def get_hostname require 'socket' Socket.gethostname.chomp end def test_configure d = create_driver map = d.instance.instance_variable_get(:@map) assert_equal get_hostname, map['gen_host'].param_value assert_equal 'bar', map['foo'].param_value end def test_format d = create_driver d.run(default_tag: 'test_tag') do d.feed({"a" => 1}) d.feed({"a" => 2}) end mapped = {'gen_host' => get_hostname, 'foo' => 'bar'} assert_equal [ {"a" => 1}.merge(mapped), {"a" => 2}.merge(mapped), ], d.events.map { |e| e.last } end def test_dynamic_tag_with_tag d = create_driver %[ tag foo.${tag} ] d.run(default_tag: 'test_tag') do d.feed({"k" => 'v'}) end assert_equal 'foo.test_tag', d.events.first.first end def test_dynamic_tag_with_record_field d = create_driver %[ tag foo.${record["k"]} ] d.run(default_tag: 'test_tag') do d.feed({"k" => 'v'}) end assert_equal 'foo.v', d.events.first.first end def test_set_char_encoding d = create_driver %[ tag foo.filtered char_encoding utf-8 ] d.run(default_tag: 'test_tag') do d.feed({"k" => 'v'.force_encoding('BINARY')}) end assert_equal [{"k" => 'v'.force_encoding('UTF-8')}], d.events.map { |e| e.last } end def test_convert_char_encoding d = create_driver %[ tag foo.filtered char_encoding utf-8:cp932 ] d.run(default_tag: 'test_tag') do d.feed("k" => 'v'.force_encoding('utf-8')) end assert_equal [{"k" => 'v'.force_encoding('cp932')}], d.events.map { |e| e.last } end def test_remove_one_key d = create_driver %[ tag foo.filtered remove_keys k1 ] d.run(default_tag: 'test_tag') do d.feed({"k1" => 'v', "k2" => 'v'}) end assert_equal [{"k2" => 'v'}], d.events.map { |e| e.last } end def test_remove_multiple_keys d = create_driver %[ tag foo.filtered remove_keys k1, k2, k3 ] d.run(default_tag: 'test_tag') do d.feed({"k1" => 'v', "k2" => 'v', "k4" => 'v'}) end assert_equal [{"k4" => 'v'}], d.events.map { |e| e.last } end def test_remove_non_whitelist_keys d = create_driver %[ tag foo.filtered foo bar whitelist_keys k1, k2, k3 ] d.run(default_tag: 'test_tag') do d.feed({"k1" => 'v', "k2" => 'v', "k4" => 'v', "k5" => 'v'}) end assert_equal [{"k1" => 'v', "k2" => 'v', 'foo' => 'bar'}], d.events.map { |e| e.last } end end