fluentd 0.12.17 → 0.12.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of fluentd might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/.travis.yml +1 -2
- data/ChangeLog +25 -0
- data/lib/fluent/buffer.rb +2 -0
- data/lib/fluent/config/configure_proxy.rb +2 -2
- data/lib/fluent/configurable.rb +2 -2
- data/lib/fluent/log.rb +1 -0
- data/lib/fluent/plugin/buf_file.rb +2 -0
- data/lib/fluent/plugin/buf_memory.rb +1 -0
- data/lib/fluent/plugin/exec_util.rb +21 -0
- data/lib/fluent/plugin/filter_record_transformer.rb +6 -0
- data/lib/fluent/plugin/filter_stdout.rb +1 -0
- data/lib/fluent/plugin/in_exec.rb +33 -22
- data/lib/fluent/plugin/in_forward.rb +5 -0
- data/lib/fluent/plugin/in_http.rb +9 -0
- data/lib/fluent/plugin/in_stream.rb +2 -0
- data/lib/fluent/plugin/in_syslog.rb +6 -0
- data/lib/fluent/plugin/in_tail.rb +16 -1
- data/lib/fluent/plugin/in_tcp.rb +1 -0
- data/lib/fluent/plugin/out_copy.rb +1 -0
- data/lib/fluent/plugin/out_exec.rb +6 -0
- data/lib/fluent/plugin/out_exec_filter.rb +15 -0
- data/lib/fluent/plugin/out_file.rb +5 -0
- data/lib/fluent/plugin/out_forward.rb +15 -0
- data/lib/fluent/plugin/out_stdout.rb +1 -0
- data/lib/fluent/plugin/socket_util.rb +5 -0
- data/lib/fluent/process.rb +19 -9
- data/lib/fluent/supervisor.rb +19 -1
- data/lib/fluent/test.rb +2 -0
- data/lib/fluent/test/formatter_test.rb +60 -0
- data/lib/fluent/test/parser_test.rb +66 -0
- data/lib/fluent/version.rb +1 -1
- data/test/config/test_configure_proxy.rb +1 -10
- data/test/plugin/test_in_exec.rb +31 -3
- data/test/plugin/test_out_forward.rb +6 -0
- data/test/scripts/exec_script.rb +6 -0
- data/test/test_formatter.rb +35 -2
- data/test/test_parser.rb +43 -19
- data/test/test_process.rb +47 -0
- metadata +7 -3
    
        data/test/plugin/test_in_exec.rb
    CHANGED
    
    | @@ -44,9 +44,18 @@ class ExecInputTest < Test::Unit::TestCase | |
| 44 44 | 
             
                ]
         | 
| 45 45 | 
             
              end
         | 
| 46 46 |  | 
| 47 | 
            +
              def regexp_config
         | 
| 48 | 
            +
                %[
         | 
| 49 | 
            +
                  command ruby #{@script} "2011-01-02 13:14:15" 3
         | 
| 50 | 
            +
                  format /(?<time>[^\\\]]*) (?<message>[^ ]*)/
         | 
| 51 | 
            +
                  tag regex_tag
         | 
| 52 | 
            +
                  run_interval 1s
         | 
| 53 | 
            +
                ]
         | 
| 54 | 
            +
              end
         | 
| 55 | 
            +
             | 
| 47 56 | 
             
              def test_configure
         | 
| 48 57 | 
             
                d = create_driver
         | 
| 49 | 
            -
                assert_equal  | 
| 58 | 
            +
                assert_equal 'tsv', d.instance.format
         | 
| 50 59 | 
             
                assert_equal ["time","tag","k1"], d.instance.keys
         | 
| 51 60 | 
             
                assert_equal "tag", d.instance.tag_key
         | 
| 52 61 | 
             
                assert_equal "time", d.instance.time_key
         | 
| @@ -55,16 +64,22 @@ class ExecInputTest < Test::Unit::TestCase | |
| 55 64 |  | 
| 56 65 | 
             
              def test_configure_with_json
         | 
| 57 66 | 
             
                d = create_driver json_config
         | 
| 58 | 
            -
                assert_equal  | 
| 67 | 
            +
                assert_equal 'json', d.instance.format
         | 
| 59 68 | 
             
                assert_equal [], d.instance.keys
         | 
| 60 69 | 
             
              end
         | 
| 61 70 |  | 
| 62 71 | 
             
              def test_configure_with_msgpack
         | 
| 63 72 | 
             
                d = create_driver msgpack_config
         | 
| 64 | 
            -
                assert_equal  | 
| 73 | 
            +
                assert_equal 'msgpack', d.instance.format
         | 
| 65 74 | 
             
                assert_equal [], d.instance.keys
         | 
| 66 75 | 
             
              end
         | 
| 67 76 |  | 
| 77 | 
            +
              def test_configure_with_regexp
         | 
| 78 | 
            +
                d = create_driver regexp_config
         | 
| 79 | 
            +
                assert_equal '/(?<time>[^\]]*) (?<message>[^ ]*)/', d.instance.format
         | 
| 80 | 
            +
                assert_equal 'regex_tag', d.instance.tag
         | 
| 81 | 
            +
              end
         | 
| 82 | 
            +
             | 
| 68 83 | 
             
              # TODO: Merge following tests into one case with parameters
         | 
| 69 84 |  | 
| 70 85 | 
             
              def test_emit
         | 
| @@ -102,4 +117,17 @@ class ExecInputTest < Test::Unit::TestCase | |
| 102 117 | 
             
                assert_equal true, emits.length > 0
         | 
| 103 118 | 
             
                assert_equal ["tag1", @test_time, {"k1"=>"ok"}], emits[0]
         | 
| 104 119 | 
             
              end
         | 
| 120 | 
            +
             | 
| 121 | 
            +
              def test_emit_regexp
         | 
| 122 | 
            +
                d = create_driver regexp_config
         | 
| 123 | 
            +
             | 
| 124 | 
            +
                d.run do
         | 
| 125 | 
            +
                  sleep 2
         | 
| 126 | 
            +
                end
         | 
| 127 | 
            +
             | 
| 128 | 
            +
                emits = d.emits
         | 
| 129 | 
            +
                assert_equal true, emits.length > 0
         | 
| 130 | 
            +
                assert_equal ["regex_tag", @test_time, {"message"=>"hello"}], emits[0]
         | 
| 131 | 
            +
                assert_equal @test_time, emits[0][1]
         | 
| 132 | 
            +
              end
         | 
| 105 133 | 
             
            end
         | 
| @@ -78,6 +78,12 @@ class ForwardOutputTest < Test::Unit::TestCase | |
| 78 78 | 
             
                assert_equal true, d.instance.nodes.first.conf.dns_round_robin
         | 
| 79 79 | 
             
              end
         | 
| 80 80 |  | 
| 81 | 
            +
              def test_configure_no_server
         | 
| 82 | 
            +
                assert_raise(Fluent::ConfigError, 'forward output plugin requires at least one <server> is required') do
         | 
| 83 | 
            +
                  create_driver('')
         | 
| 84 | 
            +
                end
         | 
| 85 | 
            +
              end
         | 
| 86 | 
            +
             | 
| 81 87 | 
             
              def test_phi_failure_detector
         | 
| 82 88 | 
             
                d = create_driver(CONFIG + %[phi_failure_detector false \n phi_threshold 0])
         | 
| 83 89 | 
             
                node = d.instance.nodes.first
         | 
    
        data/test/scripts/exec_script.rb
    CHANGED
    
    | @@ -13,6 +13,10 @@ def gen_msgpack(time) | |
| 13 13 | 
             
              {'tagger' => 'tag1', 'datetime' => time, 'k1' => 'ok'}.to_msgpack
         | 
| 14 14 | 
             
            end
         | 
| 15 15 |  | 
| 16 | 
            +
            def gen_raw_string(time)
         | 
| 17 | 
            +
              "#{time} hello"
         | 
| 18 | 
            +
            end
         | 
| 19 | 
            +
             | 
| 16 20 | 
             
            time = ARGV.first
         | 
| 17 21 | 
             
            time = Integer(time) rescue time
         | 
| 18 22 |  | 
| @@ -23,4 +27,6 @@ when 1 | |
| 23 27 | 
             
              puts gen_json(time)
         | 
| 24 28 | 
             
            when 2
         | 
| 25 29 | 
             
              print gen_msgpack(time)
         | 
| 30 | 
            +
            when 3
         | 
| 31 | 
            +
              print gen_raw_string(time)
         | 
| 26 32 | 
             
            end
         | 
    
        data/test/test_formatter.rb
    CHANGED
    
    | @@ -48,11 +48,33 @@ module FormatterTest | |
| 48 48 | 
             
                end
         | 
| 49 49 | 
             
              end
         | 
| 50 50 |  | 
| 51 | 
            +
              class BaseFormatterTestWithTestDriver < ::Test::Unit::TestCase
         | 
| 52 | 
            +
                include FormatterTest
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                def create_driver(conf={})
         | 
| 55 | 
            +
                  formatter = Fluent::Test::FormatterTestDriver.new(Formatter).configure(conf)
         | 
| 56 | 
            +
                end
         | 
| 57 | 
            +
             | 
| 58 | 
            +
                def test_call
         | 
| 59 | 
            +
                  d = create_driver
         | 
| 60 | 
            +
                  assert_raise NotImplementedError do
         | 
| 61 | 
            +
                    d.format('tag', Engine.now, {})
         | 
| 62 | 
            +
                  end
         | 
| 63 | 
            +
                end
         | 
| 64 | 
            +
             | 
| 65 | 
            +
                def test_call_with_string_literal_configure
         | 
| 66 | 
            +
                  d = create_driver('')
         | 
| 67 | 
            +
                  assert_raise NotImplementedError do
         | 
| 68 | 
            +
                    d.format('tag', Engine.now, {})
         | 
| 69 | 
            +
                  end
         | 
| 70 | 
            +
                end
         | 
| 71 | 
            +
              end
         | 
| 72 | 
            +
             | 
| 51 73 | 
             
              class OutFileFormatterTest < ::Test::Unit::TestCase
         | 
| 52 74 | 
             
                include FormatterTest
         | 
| 53 75 |  | 
| 54 76 | 
             
                def setup
         | 
| 55 | 
            -
                  @formatter =  | 
| 77 | 
            +
                  @formatter = Fluent::Test::FormatterTestDriver.new('out_file')
         | 
| 56 78 | 
             
                  @time = Engine.now
         | 
| 57 79 | 
             
                end
         | 
| 58 80 |  | 
| @@ -87,13 +109,24 @@ module FormatterTest | |
| 87 109 |  | 
| 88 110 | 
             
                  assert_equal("#{Yajl.dump(record)}\n", formatted)
         | 
| 89 111 | 
             
                end
         | 
| 112 | 
            +
             | 
| 113 | 
            +
                def test_format_without_time_and_tag_against_string_literal_configure
         | 
| 114 | 
            +
                  @formatter.configure(%[
         | 
| 115 | 
            +
                    utc         true
         | 
| 116 | 
            +
                    output_tag  false
         | 
| 117 | 
            +
                    output_time false
         | 
| 118 | 
            +
                  ])
         | 
| 119 | 
            +
                  formatted = @formatter.format('tag', @time, record)
         | 
| 120 | 
            +
             | 
| 121 | 
            +
                  assert_equal("#{Yajl.dump(record)}\n", formatted)
         | 
| 122 | 
            +
                end
         | 
| 90 123 | 
             
              end
         | 
| 91 124 |  | 
| 92 125 | 
             
              class JsonFormatterTest < ::Test::Unit::TestCase
         | 
| 93 126 | 
             
                include FormatterTest
         | 
| 94 127 |  | 
| 95 128 | 
             
                def setup
         | 
| 96 | 
            -
                  @formatter = TextFormatter::JSONFormatter | 
| 129 | 
            +
                  @formatter = Fluent::Test::FormatterTestDriver.new(TextFormatter::JSONFormatter)
         | 
| 97 130 | 
             
                  @time = Engine.now
         | 
| 98 131 | 
             
                end
         | 
| 99 132 |  | 
    
        data/test/test_parser.rb
    CHANGED
    
    | @@ -39,6 +39,31 @@ module ParserTest | |
| 39 39 | 
             
                end
         | 
| 40 40 | 
             
              end
         | 
| 41 41 |  | 
| 42 | 
            +
              class BaseParserTestWithTestDriver < ::Test::Unit::TestCase
         | 
| 43 | 
            +
                include ParserTest
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                def create_driver(conf={})
         | 
| 46 | 
            +
                  Fluent::Test::ParserTestDriver.new(Fluent::Parser).configure(conf)
         | 
| 47 | 
            +
                end
         | 
| 48 | 
            +
             | 
| 49 | 
            +
                def test_init
         | 
| 50 | 
            +
                  d = create_driver
         | 
| 51 | 
            +
                  assert_true d.instance.estimate_current_event
         | 
| 52 | 
            +
                end
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                def test_configure_against_string_literal
         | 
| 55 | 
            +
                  d = create_driver('keep_time_key true')
         | 
| 56 | 
            +
                  assert_true d.instance.keep_time_key
         | 
| 57 | 
            +
                end
         | 
| 58 | 
            +
             | 
| 59 | 
            +
                def test_parse
         | 
| 60 | 
            +
                  d = create_driver
         | 
| 61 | 
            +
                  assert_raise NotImplementedError do
         | 
| 62 | 
            +
                    d.parse('')
         | 
| 63 | 
            +
                  end
         | 
| 64 | 
            +
                end
         | 
| 65 | 
            +
              end
         | 
| 66 | 
            +
             | 
| 42 67 | 
             
              class TimeParserTest < ::Test::Unit::TestCase
         | 
| 43 68 | 
             
                include ParserTest
         | 
| 44 69 |  | 
| @@ -94,19 +119,19 @@ module ParserTest | |
| 94 119 | 
             
                def test_parse_with_configure
         | 
| 95 120 | 
             
                  # Specify conf by configure method instaed of intializer
         | 
| 96 121 | 
             
                  regexp = Regexp.new(%q!^(?<host>[^ ]*) [^ ]* (?<user>[^ ]*) \[(?<time>[^\]]*)\] \[(?<date>[^\]]*)\] "(?<flag>\S+)(?: +(?<path>[^ ]*) +\S*)?" (?<code>[^ ]*) (?<size>[^ ]*)$!)
         | 
| 97 | 
            -
                  parser =  | 
| 122 | 
            +
                  parser = Fluent::Test::ParserTestDriver.new(TextParser::RegexpParser, regexp)
         | 
| 98 123 | 
             
                  parser.configure('time_format'=>"%d/%b/%Y:%H:%M:%S %z", 'types'=>'user:string,date:time:%d/%b/%Y:%H:%M:%S %z,flag:bool,path:array,code:float,size:integer')
         | 
| 99 124 | 
             
                  internal_test_case(parser)
         | 
| 100 | 
            -
                  assert_equal(regexp, parser.patterns['format'])
         | 
| 101 | 
            -
                  assert_equal("%d/%b/%Y:%H:%M:%S %z", parser.patterns['time_format'])
         | 
| 125 | 
            +
                  assert_equal(regexp, parser.instance.patterns['format'])
         | 
| 126 | 
            +
                  assert_equal("%d/%b/%Y:%H:%M:%S %z", parser.instance.patterns['time_format'])
         | 
| 102 127 | 
             
                end
         | 
| 103 128 |  | 
| 104 129 | 
             
                def test_parse_with_typed_and_name_separator
         | 
| 105 | 
            -
                  internal_test_case( | 
| 130 | 
            +
                  internal_test_case(Fluent::Test::ParserTestDriver.new(TextParser::RegexpParser, Regexp.new(%q!^(?<host>[^ ]*) [^ ]* (?<user>[^ ]*) \[(?<time>[^\]]*)\] \[(?<date>[^\]]*)\] "(?<flag>\S+)(?: +(?<path>[^ ]*) +\S*)?" (?<code>[^ ]*) (?<size>[^ ]*)$!), 'time_format'=>"%d/%b/%Y:%H:%M:%S %z", 'types'=>'user|string,date|time|%d/%b/%Y:%H:%M:%S %z,flag|bool,path|array,code|float,size|integer', 'types_label_delimiter'=>'|'))
         | 
| 106 131 | 
             
                end
         | 
| 107 132 |  | 
| 108 133 | 
             
                def test_parse_with_time_key
         | 
| 109 | 
            -
                  parser =  | 
| 134 | 
            +
                  parser = Fluent::Test::ParserTestDriver.new(TextParser::RegexpParser, /(?<logtime>[^\]]*)/)
         | 
| 110 135 | 
             
                  parser.configure(
         | 
| 111 136 | 
             
                    'time_format'=>"%Y-%m-%d %H:%M:%S %z",
         | 
| 112 137 | 
             
                    'time_key'=>'logtime',
         | 
| @@ -131,10 +156,9 @@ module ParserTest | |
| 131 156 | 
             
                    assert_equal 34, record["age"]
         | 
| 132 157 | 
             
                  }
         | 
| 133 158 |  | 
| 134 | 
            -
                  parser2 =  | 
| 135 | 
            -
                  parser2.configure('types'=>'name:string,user:string,age: | 
| 136 | 
            -
                  parser2. | 
| 137 | 
            -
             | 
| 159 | 
            +
                  parser2 = Fluent::Test::ParserTestDriver.new(TextParser::RegexpParser, Regexp.new(%q!^(?<name>[^ ]*) (?<user>[^ ]*) (?<age>\d*)$!))
         | 
| 160 | 
            +
                  parser2.configure('types'=>'name:string,user:string,age:integer')
         | 
| 161 | 
            +
                  parser2.instance.estimate_current_event = false
         | 
| 138 162 | 
             
                  [parser2.parse(text), parser2.parse(text) { |time, record| return time, record}].each { |time, record|
         | 
| 139 163 | 
             
                    assert_equal "tagomori_satoshi", record["name"]
         | 
| 140 164 | 
             
                    assert_equal "tagomoris", record["user"]
         | 
| @@ -145,7 +169,7 @@ module ParserTest | |
| 145 169 | 
             
                end
         | 
| 146 170 |  | 
| 147 171 | 
             
                def test_parse_with_keep_time_key
         | 
| 148 | 
            -
                  parser =  | 
| 172 | 
            +
                  parser = Fluent::Test::ParserTestDriver.new(TextParser::RegexpParser,
         | 
| 149 173 | 
             
                    Regexp.new(%q!(?<time>.*)!),
         | 
| 150 174 | 
             
                    'time_format'=>"%d/%b/%Y:%H:%M:%S %z",
         | 
| 151 175 | 
             
                    'keep_time_key'=>'true',
         | 
| @@ -157,7 +181,7 @@ module ParserTest | |
| 157 181 | 
             
                end
         | 
| 158 182 |  | 
| 159 183 | 
             
                def test_parse_with_keep_time_key_with_typecast
         | 
| 160 | 
            -
                  parser =  | 
| 184 | 
            +
                  parser = Fluent::Test::ParserTestDriver.new(TextParser::RegexpParser,
         | 
| 161 185 | 
             
                    Regexp.new(%q!(?<time>.*)!),
         | 
| 162 186 | 
             
                    'time_format'=>"%d/%b/%Y:%H:%M:%S %z",
         | 
| 163 187 | 
             
                    'keep_time_key'=>'true',
         | 
| @@ -281,7 +305,7 @@ module ParserTest | |
| 281 305 | 
             
                include ParserTest
         | 
| 282 306 |  | 
| 283 307 | 
             
                def setup
         | 
| 284 | 
            -
                  @parser =  | 
| 308 | 
            +
                  @parser = Fluent::Test::ParserTestDriver.new('syslog')
         | 
| 285 309 | 
             
                  @expected = {
         | 
| 286 310 | 
             
                    'host'    => '192.168.0.1',
         | 
| 287 311 | 
             
                    'ident'   => 'fluentd',
         | 
| @@ -296,8 +320,8 @@ module ParserTest | |
| 296 320 | 
             
                    assert_equal(str2time('Feb 28 12:00:00', '%b %d %H:%M:%S'), time)
         | 
| 297 321 | 
             
                    assert_equal(@expected, record)
         | 
| 298 322 | 
             
                  }
         | 
| 299 | 
            -
                  assert_equal(TextParser::SyslogParser::REGEXP, @parser.patterns['format'])
         | 
| 300 | 
            -
                  assert_equal("%b %d %H:%M:%S", @parser.patterns['time_format'])
         | 
| 323 | 
            +
                  assert_equal(TextParser::SyslogParser::REGEXP, @parser.instance.patterns['format'])
         | 
| 324 | 
            +
                  assert_equal("%b %d %H:%M:%S", @parser.instance.patterns['time_format'])
         | 
| 301 325 | 
             
                end
         | 
| 302 326 |  | 
| 303 327 | 
             
                def test_parse_with_time_format
         | 
| @@ -306,7 +330,7 @@ module ParserTest | |
| 306 330 | 
             
                    assert_equal(str2time('Feb 28 12:00:00', '%b %d %H:%M:%S'), time)
         | 
| 307 331 | 
             
                    assert_equal(@expected, record)
         | 
| 308 332 | 
             
                  }
         | 
| 309 | 
            -
                  assert_equal('%b %d %M:%S:%H', @parser.patterns['time_format'])
         | 
| 333 | 
            +
                  assert_equal('%b %d %M:%S:%H', @parser.instance.patterns['time_format'])
         | 
| 310 334 | 
             
                end
         | 
| 311 335 |  | 
| 312 336 | 
             
                def test_parse_with_priority
         | 
| @@ -315,8 +339,8 @@ module ParserTest | |
| 315 339 | 
             
                    assert_equal(str2time('Feb 28 12:00:00', '%b %d %H:%M:%S'), time)
         | 
| 316 340 | 
             
                    assert_equal(@expected.merge('pri' => 6), record)
         | 
| 317 341 | 
             
                  }
         | 
| 318 | 
            -
                  assert_equal(TextParser::SyslogParser::REGEXP_WITH_PRI, @parser.patterns['format'])
         | 
| 319 | 
            -
                  assert_equal("%b %d %H:%M:%S", @parser.patterns['time_format'])
         | 
| 342 | 
            +
                  assert_equal(TextParser::SyslogParser::REGEXP_WITH_PRI, @parser.instance.patterns['format'])
         | 
| 343 | 
            +
                  assert_equal("%b %d %H:%M:%S", @parser.instance.patterns['time_format'])
         | 
| 320 344 | 
             
                end
         | 
| 321 345 |  | 
| 322 346 | 
             
                def test_parse_without_colon
         | 
| @@ -325,8 +349,8 @@ module ParserTest | |
| 325 349 | 
             
                    assert_equal(str2time('Feb 28 12:00:00', '%b %d %H:%M:%S'), time)
         | 
| 326 350 | 
             
                    assert_equal(@expected, record)
         | 
| 327 351 | 
             
                  }
         | 
| 328 | 
            -
                  assert_equal(TextParser::SyslogParser::REGEXP, @parser.patterns['format'])
         | 
| 329 | 
            -
                  assert_equal("%b %d %H:%M:%S", @parser.patterns['time_format'])
         | 
| 352 | 
            +
                  assert_equal(TextParser::SyslogParser::REGEXP, @parser.instance.patterns['format'])
         | 
| 353 | 
            +
                  assert_equal("%b %d %H:%M:%S", @parser.instance.patterns['time_format'])
         | 
| 330 354 | 
             
                end
         | 
| 331 355 |  | 
| 332 356 | 
             
                def test_parse_with_keep_time_key
         | 
| @@ -0,0 +1,47 @@ | |
| 1 | 
            +
            require_relative 'helper'
         | 
| 2 | 
            +
            require 'fluent/test'
         | 
| 3 | 
            +
            require 'fluent/event'
         | 
| 4 | 
            +
            require 'stringio'
         | 
| 5 | 
            +
            require 'msgpack'
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            module FluentProcessTest
         | 
| 8 | 
            +
              class DelayedForwarderTest < Test::Unit::TestCase
         | 
| 9 | 
            +
                include Fluent
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                test 'run and emit' do
         | 
| 12 | 
            +
                  io = StringIO.new
         | 
| 13 | 
            +
                  fwd = Fluent::DetachProcessManager::DelayedForwarder.new(io, 0.001)
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                  num_events_per_tag = 5000
         | 
| 16 | 
            +
                  num_tags = 20
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                  now = Time.now.to_i
         | 
| 19 | 
            +
                  record = {'key' => 'value'}
         | 
| 20 | 
            +
                  (num_tags * num_events_per_tag).times do |i|
         | 
| 21 | 
            +
                    tag = "foo.bar#{i % num_tags}"
         | 
| 22 | 
            +
                    fwd.emit(tag, OneEventStream.new(now, record))
         | 
| 23 | 
            +
                  end
         | 
| 24 | 
            +
                  sleep 0.5
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                  io.pos = 0
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                  tags = {}
         | 
| 29 | 
            +
                  MessagePack::Unpacker.new(io).each do |tag_and_msgpacks|
         | 
| 30 | 
            +
                    tag, ms = *tag_and_msgpacks
         | 
| 31 | 
            +
                    tags[tag] ||= ''
         | 
| 32 | 
            +
                    tags[tag] << ms
         | 
| 33 | 
            +
                  end
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                  assert_equal(num_tags, tags.size)
         | 
| 36 | 
            +
                  num_tags.times do |i|
         | 
| 37 | 
            +
                    tag = "foo.bar#{i % num_tags}"
         | 
| 38 | 
            +
                    ms = tags[tag]
         | 
| 39 | 
            +
                    count = 0
         | 
| 40 | 
            +
                    MessagePack::Unpacker.new(StringIO.new(ms)).each do |x|
         | 
| 41 | 
            +
                      count += 1
         | 
| 42 | 
            +
                    end
         | 
| 43 | 
            +
                    assert_equal(num_events_per_tag, count)
         | 
| 44 | 
            +
                  end
         | 
| 45 | 
            +
                end
         | 
| 46 | 
            +
              end
         | 
| 47 | 
            +
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: fluentd
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.12. | 
| 4 | 
            +
              version: 0.12.18
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Sadayuki Furuhashi
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2015- | 
| 11 | 
            +
            date: 2015-12-09 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: msgpack
         | 
| @@ -380,8 +380,10 @@ files: | |
| 380 380 | 
             
            - lib/fluent/test.rb
         | 
| 381 381 | 
             
            - lib/fluent/test/base.rb
         | 
| 382 382 | 
             
            - lib/fluent/test/filter_test.rb
         | 
| 383 | 
            +
            - lib/fluent/test/formatter_test.rb
         | 
| 383 384 | 
             
            - lib/fluent/test/input_test.rb
         | 
| 384 385 | 
             
            - lib/fluent/test/output_test.rb
         | 
| 386 | 
            +
            - lib/fluent/test/parser_test.rb
         | 
| 385 387 | 
             
            - lib/fluent/timezone.rb
         | 
| 386 388 | 
             
            - lib/fluent/version.rb
         | 
| 387 389 | 
             
            - test/config/assertions.rb
         | 
| @@ -444,6 +446,7 @@ files: | |
| 444 446 | 
             
            - test/test_output.rb
         | 
| 445 447 | 
             
            - test/test_parser.rb
         | 
| 446 448 | 
             
            - test/test_plugin_classes.rb
         | 
| 449 | 
            +
            - test/test_process.rb
         | 
| 447 450 | 
             
            - test/test_root_agent.rb
         | 
| 448 451 | 
             
            homepage: http://fluentd.org/
         | 
| 449 452 | 
             
            licenses:
         | 
| @@ -465,7 +468,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 465 468 | 
             
                  version: '0'
         | 
| 466 469 | 
             
            requirements: []
         | 
| 467 470 | 
             
            rubyforge_project: 
         | 
| 468 | 
            -
            rubygems_version: 2. | 
| 471 | 
            +
            rubygems_version: 2.2.2
         | 
| 469 472 | 
             
            signing_key: 
         | 
| 470 473 | 
             
            specification_version: 4
         | 
| 471 474 | 
             
            summary: Fluentd event collector
         | 
| @@ -530,4 +533,5 @@ test_files: | |
| 530 533 | 
             
            - test/test_output.rb
         | 
| 531 534 | 
             
            - test/test_parser.rb
         | 
| 532 535 | 
             
            - test/test_plugin_classes.rb
         | 
| 536 | 
            +
            - test/test_process.rb
         | 
| 533 537 | 
             
            - test/test_root_agent.rb
         |