require 'helper' require 'mysql2-cs-bind' class MysqlBulkOutputTest < Test::Unit::TestCase def setup Fluent::Test.setup end def create_driver(conf = CONFIG, tag = 'test') d = Fluent::Test::BufferedOutputTestDriver.new(Fluent::MysqlBulkOutput, tag).configure(conf) d.instance.instance_eval { def client obj = Object.new obj.instance_eval { def xquery(*args); [1]; end def close; true; end } obj end } d end def test_configure_error assert_raise(Fluent::ConfigError) do d = create_driver %[ host localhost database test_app_development username root password hogehoge table users on_duplicate_key_update true on_duplicate_update_keys user_name,updated_at flush_interval 10s ] end assert_raise(Fluent::ConfigError) do d = create_driver %[ host localhost database test_app_development username root password hogehoge column_names id,user_name,created_at,updated_at table users on_duplicate_key_update true flush_interval 10s ] end assert_raise(Fluent::ConfigError) do d = create_driver %[ host localhost username root password hogehoge column_names id,user_name,created_at,updated_at table users on_duplicate_key_update true on_duplicate_update_keys user_name,updated_at flush_interval 10s ] end end def test_configure # not define format(default csv) assert_nothing_raised(Fluent::ConfigError) do d = create_driver %[ host localhost database test_app_development username root password hogehoge column_names id,user_name,created_at,updated_at table users on_duplicate_key_update true on_duplicate_update_keys user_name,updated_at flush_interval 10s ] end assert_nothing_raised(Fluent::ConfigError) do d = create_driver %[ database test_app_development username root password hogehoge column_names id,user_name,created_at,updated_at table users ] end assert_nothing_raised(Fluent::ConfigError) do d = create_driver %[ database test_app_development username root password hogehoge column_names id,user_name,created_at,updated_at table users on_duplicate_key_update true on_duplicate_update_keys user_name,updated_at ] end assert_nothing_raised(Fluent::ConfigError) do d = create_driver %[ database test_app_development username root password hogehoge column_names id,user_name,created_at,updated_at key_names id,user,created_date,updated_date table users on_duplicate_key_update true on_duplicate_update_keys user_name,updated_at ] end assert_nothing_raised(Fluent::ConfigError) do d = create_driver %[ database test_app_development username root password hogehoge key_names id,url,request_headers,params,created_at,updated_at column_names id,url,request_headers_json,params_json,created_date,updated_date json_key_names request_headers,params table access ] end end def test_variables d = create_driver %[ database test_app_development username root password hogehoge column_names id,user_name,created_at,updated_at table users on_duplicate_key_update true on_duplicate_update_keys user_name,updated_at ] assert_equal ['id','user_name','created_at','updated_at'], d.instance.key_names assert_equal ['id','user_name','created_at','updated_at'], d.instance.column_names assert_equal nil, d.instance.json_key_names assert_equal " ON DUPLICATE KEY UPDATE user_name = VALUES(user_name),updated_at = VALUES(updated_at)", d.instance.instance_variable_get(:@on_duplicate_key_update_sql) d = create_driver %[ database test_app_development username root password hogehoge column_names id,user_name,created_at,updated_at table users ] assert_equal ['id','user_name','created_at','updated_at'], d.instance.key_names assert_equal ['id','user_name','created_at','updated_at'], d.instance.column_names assert_equal nil, d.instance.json_key_names assert_nil d.instance.instance_variable_get(:@on_duplicate_key_update_sql) d = create_driver %[ database test_app_development username root password hogehoge key_names id,user_name,created_at,updated_at column_names id,user,created_date,updated_date table users ] assert_equal ['id','user_name','created_at','updated_at'], d.instance.key_names assert_equal ['id','user','created_date','updated_date'], d.instance.column_names assert_equal nil, d.instance.json_key_names assert_nil d.instance.instance_variable_get(:@on_duplicate_key_update_sql) d = create_driver %[ database test_app_development username root password hogehoge key_names id,url,request_headers,params,created_at,updated_at column_names id,url,request_headers_json,params_json,created_date,updated_date json_key_names request_headers,params table access ] assert_equal ['id','url','request_headers','params','created_at','updated_at'], d.instance.key_names assert_equal ['id','url','request_headers_json','params_json','created_date','updated_date'], d.instance.column_names assert_equal ['request_headers','params'], d.instance.json_key_names assert_nil d.instance.instance_variable_get(:@on_duplicate_key_update_sql) end def test_spaces_in_columns d = create_driver %[ database test_app_development username root password hogehoge column_names id, user_name, created_at, updated_at table users ] assert_equal ['id','user_name','created_at','updated_at'], d.instance.key_names assert_equal ['id','user_name','created_at','updated_at'], d.instance.column_names d = create_driver %[ database test_app_development username root password hogehoge key_names id, user_name, created_at, updated_at column_names id, user_name, created_at, updated_at table users ] assert_equal ['id','user_name','created_at','updated_at'], d.instance.key_names assert_equal ['id','user_name','created_at','updated_at'], d.instance.column_names end end