Sha256: 6ea4c5229d42bd5f2bb7ce338f9ba8b20797d5f60a4178d319a5c117f2715dfa

Contents?: true

Size: 1.96 KB

Versions: 2

Compression:

Stored size: 1.96 KB

Contents

require 'spec_helper'

describe FluQ::Handler::Log do

  let(:event)  { FluQ::Event.new({"a" => "1"}, 1313131313) }
  let(:root)   { FluQ.root.join("../scenario/log/raw") }
  before       { FileUtils.rm_rf(root); FileUtils.mkdir_p(root) }

  it { should be_a(FluQ::Handler::Base) }
  its("config.keys") { should =~ [:convert, :path, :cache_max, :cache_ttl, :timeout] }

  it "can log events" do
    subject.on_events [event]
    subject.pool.each_key {|k| subject.pool[k].flush }
    root.join("20110812.log").read.should == %(1313131313\t{"a":"1"}\n)
  end

  it 'can have custom conversions' do
    subject = described_class.new convert: ->e { e.merge(ts: e.timestamp).map {|k,v| "#{k}=#{v}" }.join(',') }
    subject.on_events [event]
    subject.pool.each_key {|k| subject.pool[k].flush }
    root.join("20110812.log").read.should == "a=1,ts=1313131313\n"
  end

  it 'can rewrite events' do
    subject = described_class.new rewrite: ->e { e["a"].to_i * 1000 }, path: "log/raw/%Y%m/%t.log"
    subject.on_events [event]
    root.join("201108/1000.log").should be_file
  end

  it 'should not fail on temporary file errors' do
    subject.on_events [event]
    subject.pool.each_key {|k| subject.pool[k].close }
    subject.on_events [event]
    subject.pool.each_key {|k| subject.pool[k].flush }
    root.join("20110812.log").read.should have(2).lines
  end

  describe described_class::FilePool do
    subject    { described_class::FilePool.new(max_size: 2) }
    let(:path) { root.join("a.log") }

    it { should be_a(TimedLRU) }

    it 'should open files' do
      lambda {
        subject.open(path).should be_instance_of(File)
      }.should change { subject.keys }.from([]).to([path.to_s])
    end

    it 'should re-use open files' do
      fd = subject.open(path)
      lambda {
        subject.open(path).should be(fd)
      }.should_not change { subject.keys }
    end

    it 'should auto-close files' do
      fd = subject.open(path)
      fd.should be_autoclose
    end

  end

end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
fluq-0.8.1 spec/fluq/handler/log_spec.rb
fluq-0.8.0 spec/fluq/handler/log_spec.rb