require 'spec_helper' describe RegexpPreview::MultiLine do describe "#matches" do subject { parser.matches } let(:parser) { RegexpPreview::MultiLine.new(target_path, "multiline", plugin_config) } describe "simple usage" do let(:target_path) { File.expand_path("./spec/support/fixtures/error0.log", Rails.root) } let :plugin_config do plugin_config = { "format_firstline" => "/foo/", "time_format" => "time_format", } plugin_config["format1"] = "/(?foo)\n/" plugin_config["format2"] = "/(?bar)/" 3.upto(Fluentd::Setting::InTail::MULTI_LINE_MAX_FORMAT_COUNT) do |i| plugin_config["format#{i}"] = "//" end plugin_config end it "should include matches info" do matches_info = { whole: "foo\nbar\nbaz\n1\n2\n3\n4\n5\n6\n10\n11\n12", matches: [ { key: "foo", matched: "foo", pos: [0, 3] }, { key: "bar", matched: "bar", pos: [4, 7] } ] } expect(subject[:matches]).to include matches_info end end describe "detect only continuos patterns" do let(:target_path) { File.expand_path("./spec/support/fixtures/error0.log", Rails.root) } let(:plugin_config) do plugin_config = { "format_firstline" => "/foo/", "time_format" => "time_format", } plugin_config["format1"] = "/(?foo)\n/" plugin_config["format2"] = "/(?baz)/" 3.upto(Fluentd::Setting::InTail::MULTI_LINE_MAX_FORMAT_COUNT) do |i| plugin_config["format#{i}"] = "//" end plugin_config end it "shouldn't match" do expect(subject[:matches]).to eq [] end end describe "example on document" do # http://docs.fluentd.org/articles/in_tail let(:target_path) { File.expand_path("./spec/support/fixtures/multiline_example.log", Rails.root) } let :plugin_config do plugin_config = { "format_firstline" => "/\\d{4}-\\d{1,2}-\\d{1,2}/", "format1" => "/^(?