require_relative '../helper'
require 'fluent/test/driver/multi_output'
require 'fluent/plugin/out_roundrobin'
class RoundRobinOutputTest < Test::Unit::TestCase
class << self
def startup
$LOAD_PATH.unshift File.expand_path(File.join(File.dirname(__FILE__), '..', 'scripts'))
require 'fluent/plugin/out_test'
require 'fluent/plugin/out_test2'
end
def shutdown
$LOAD_PATH.shift
end
end
def setup
Fluent::Test.setup
end
CONFIG = %[
@type test
name c0
@type test2
name c1
@type test
name c2
]
CONFIG_WITH_WEIGHT = %[
@type test
name c0
weight 3
@type test2
name c1
weight 3
@type test
name c2
]
def create_driver(conf = CONFIG)
Fluent::Test::Driver::MultiOutput.new(Fluent::Plugin::RoundRobinOutput).configure(conf)
end
def test_configure
d = create_driver
outputs = d.instance.outputs
assert_equal 3, outputs.size
assert_equal Fluent::Plugin::TestOutput, outputs[0].class
assert_equal Fluent::Plugin::Test2Output, outputs[1].class
assert_equal Fluent::Plugin::TestOutput, outputs[2].class
assert !outputs[0].has_router?
assert outputs[1].has_router?
assert outputs[1].router
assert !outputs[2].has_router?
assert_equal "c0", outputs[0].name
assert_equal "c1", outputs[1].name
assert_equal "c2", outputs[2].name
weights = d.instance.weights
assert_equal 3, weights.size
assert_equal 1, weights[0]
assert_equal 1, weights[1]
assert_equal 1, weights[2]
d = create_driver(CONFIG_WITH_WEIGHT)
outputs = d.instance.outputs
assert_equal 3, outputs.size
assert_equal Fluent::Plugin::TestOutput, outputs[0].class
assert_equal Fluent::Plugin::Test2Output, outputs[1].class
assert_equal Fluent::Plugin::TestOutput, outputs[2].class
assert_equal "c0", outputs[0].name
assert_equal "c1", outputs[1].name
assert_equal "c2", outputs[2].name
weights = d.instance.weights
assert_equal 3, weights.size
assert_equal 3, weights[0]
assert_equal 3, weights[1]
assert_equal 1, weights[2]
end
def test_events_feeded_to_plugins_by_roundrobin
d = create_driver
time = event_time("2011-01-02 13:14:15 UTC")
d.run(default_tag: 'test') do
d.feed(time, {"a" => 1})
d.feed(time, {"a" => 2})
d.feed(time, {"a" => 3})
d.feed(time, {"a" => 4})
end
os = d.instance.outputs
assert_equal [
[time, {"a"=>1}],
[time, {"a"=>4}],
], os[0].events
assert_equal [
[time, {"a"=>2}],
], os[1].events
assert_equal [
[time, {"a"=>3}],
], os[2].events
end
def test_events_feeded_with_specified_weights
d = create_driver(CONFIG_WITH_WEIGHT)
time = event_time("2011-01-02 13:14:15 UTC")
d.run(default_tag: 'test') do
14.times do |i|
d.feed(time, {"a" => i})
end
end
os = d.instance.outputs
assert_equal 6, os[0].events.size # weight=3
assert_equal 6, os[1].events.size # weight=3
assert_equal 2, os[2].events.size # weight=1
end
end