|
1 | | -require "helper" |
| 1 | +require "bundler/setup" |
| 2 | +require "test-unit" |
| 3 | +require "test/unit/rr" |
| 4 | +require "fluent/test" |
| 5 | +require "fluent/plugin/filter_concat" |
| 6 | + |
2 | 7 | require "fluent/test/driver/filter" |
3 | 8 | class FilterConcatTest < Test::Unit::TestCase |
4 | 9 | def setup |
5 | 10 | Fluent::Test.setup |
6 | | - @time = Fluent::Engine.now |
| 11 | + @time = time_event_now |
7 | 12 | end |
8 | 13 |
|
9 | 14 | CONFIG = %[ |
@@ -34,13 +39,19 @@ def filter_with_time(conf, messages, wait: nil) |
34 | 39 | d.run(default_tag: "test") do |
35 | 40 | sleep 0.1 # run event loop |
36 | 41 | messages.each do |time, message| |
| 42 | + sleep time-time_event_now |
37 | 43 | d.feed(time, message) |
38 | 44 | end |
39 | 45 | sleep wait if wait |
40 | 46 | end |
41 | 47 | d.filtered |
42 | 48 | end |
43 | 49 |
|
| 50 | + def time_event_now |
| 51 | + now = Process.clock_gettime(Process::CLOCK_REALTIME, :nanosecond) |
| 52 | + Fluent::EventTime.new(now / 1_000_000_000, now % 1_000_000_000) |
| 53 | + end |
| 54 | + |
44 | 55 | sub_test_case "config" do |
45 | 56 | test "empty" do |
46 | 57 | assert_raise(Fluent::ConfigError.new("'key' parameter is required")) do |
@@ -242,6 +253,40 @@ def filter_with_time(conf, messages, wait: nil) |
242 | 253 | assert_equal([], filtered) |
243 | 254 | end |
244 | 255 |
|
| 256 | + test "timeout with timeout_label for multiline start regex" do |
| 257 | + config = <<-CONFIG |
| 258 | + key message |
| 259 | + multiline_start_regexp /^start/ |
| 260 | + flush_interval 1s |
| 261 | + timeout_label @TIMEOUT |
| 262 | + CONFIG |
| 263 | + wait = 8 |
| 264 | + delay_message_4_to_5 = 3 |
| 265 | + delay_message_5_to_6 = 1 |
| 266 | + |
| 267 | + messages = [ |
| 268 | + [@time, { "container_id" => "1", "message" => "start" }], |
| 269 | + [@time, { "container_id" => "1", "message" => " message 1" }], |
| 270 | + [@time, { "container_id" => "1", "message" => " message 2" }], |
| 271 | + [@time, { "container_id" => "1", "message" => "starting" }], |
| 272 | + [@time + delay_message_4_to_5, { "container_id" => "1", "message" => " message 3" }], |
| 273 | + [@time + delay_message_4_to_5 + delay_message_5_to_6 , { "container_id" => "1", "message" => " message 4" }], |
| 274 | + ] |
| 275 | + |
| 276 | + filtered = filter_with_time(config, messages, wait: wait) do |d| |
| 277 | + errored = { "container_id" => "1", "message" => "starting" } |
| 278 | + event_router = mock(Object.new).emit("test", anything, errored) |
| 279 | + mock(Fluent::Test::Driver::TestEventRouter).new(anything) { event_router } |
| 280 | + stub.proxy(d.instance).flush_timeout_buffer.times(wait + delay_message_4_to_5 + delay_message_5_to_6) |
| 281 | + end |
| 282 | + expected = [ |
| 283 | + [@time, { "container_id" => "1", "message" => "start\n message 1\n message 2" }], |
| 284 | + [@time + 3, { "container_id" => "1", "message" => " message 3" }], |
| 285 | + [@time + 4, { "container_id" => "1", "message" => " message 4" }], |
| 286 | + ] |
| 287 | + assert_equal(expected, filtered) |
| 288 | + end |
| 289 | + |
245 | 290 | test "no timeout" do |
246 | 291 | messages = [ |
247 | 292 | { "container_id" => "1", "message" => "message 1" }, |
@@ -975,11 +1020,13 @@ def filter_with_time(conf, messages, wait: nil) |
975 | 1020 | [@time + 2, { "container_id" => "1", "message" => " message 4" }], |
976 | 1021 | ] |
977 | 1022 | filtered = filter_with_time(config, messages, wait: 3) do |d| |
978 | | - errored = { "container_id" => "1", "message" => "start\n message 3\n message 4" } |
| 1023 | + errored = { "container_id" => "1", "message" => "start" } |
979 | 1024 | mock(d.instance.router).emit_error_event("test", @time, errored, anything) |
980 | 1025 | end |
981 | 1026 | expected = [ |
982 | | - [@time, { "container_id" => "1", "message" => "start\n message 1\n message 2" }] |
| 1027 | + [@time, { "container_id" => "1", "message" => "start\n message 1\n message 2" }], |
| 1028 | + [@time + 1, { "container_id" => "1", "message" => " message 3" }], |
| 1029 | + [@time + 2, { "container_id" => "1", "message" => " message 4" }], |
983 | 1030 | ] |
984 | 1031 | assert_equal(expected, filtered) |
985 | 1032 | end |
|
0 commit comments