require 'spec_helper' describe RequestLogAnalyzer::FileFormat::Oink do describe '.create' do context 'without providing a lines argument' do before(:each) { @oink = RequestLogAnalyzer::FileFormat.load(:oink) } it "should create a valid file format" do @oink.should be_valid end it "should parse :memory_usage line" do @oink.line_definitions.should include(:memory_usage) end end end describe '#parse_line' do before(:each) { @oink = RequestLogAnalyzer::FileFormat.load(:oink, :all) } it "should parse a :memory_usage line correctly" do line = 'Jun 18 11:27:36 derek rails[67783]: Memory usage: 714052 | PID: 67783' @oink.should parse_line(line).as(:memory_usage).and_capture(:pid => 67783, :memory => 714052) end it "should parse the PID from a :processing line correctly" do line = 'Aug 14 21:16:30 derek rails[67783]: Processing PeopleController#index (for 1.1.1.1 at 2008-08-14 21:16:30) [GET]' @oink.should parse_line(line).as(:processing).and_capture(:pid => 67783, :controller => 'PeopleController', :action => 'index', :timestamp => 20080814211630, :method => 'GET', :ip => '1.1.1.1') end it "should parse a :instance_type_counter correctly" do line = "Dec 13 12:00:44 storenvy rails[26364]: Instantiation Breakdown: Total: 732 | User: 376 | Post: 323 | Comment: 32 | Blog: 1" @oink.should parse_line(line).as(:instance_type_counter).and_capture(:pid => 26364, :instance_counts => {'Total' => 732, 'User' => 376, 'Post' => 323, 'Comment' => 32, 'Blog' => 1}) end end describe '#parse_io' do context "Rails 2.2 style log" do before(:each) do @log_parser = RequestLogAnalyzer::Source::LogParser.new( RequestLogAnalyzer::FileFormat.load(:oink), :parse_strategy => 'cautious') end it "should parse requests" do request_counter.should_receive(:hit!).exactly(4).times @log_parser.parse_file(log_fixture(:oink_22)) do |request| request_counter.hit! if request.kind_of?(RequestLogAnalyzer::FileFormat::Rails::Request) && request.completed? end end it "should not record :memory_diff on first request" do @log_parser.parse_file(log_fixture(:oink_22)) do |request| if @log_parser.parsed_requests == 1 request[:memory_diff].should == nil end end end it "should record :memory_diff of 2nd tracked PID" do @log_parser.parse_file(log_fixture(:oink_22)) do |request| if @log_parser.parsed_requests == 3 request[:memory_diff].should == 50000*1024 end end end it "should record :memory_diff of 1st tracked PID" do @log_parser.parse_file(log_fixture(:oink_22)) do |request| if @log_parser.parsed_requests == 4 request[:memory_diff].should == 30000*1024 end end end end context 'Rails 2.2 style log w/failure' do before(:each) do @log_parser = RequestLogAnalyzer::Source::LogParser.new( RequestLogAnalyzer::FileFormat.load(:oink), :parse_strategy => 'cautious') end it "should parse requests" do request_counter.should_receive(:hit!).exactly(4).times @log_parser.parse_file(log_fixture(:oink_22_failure)) do |request| request_counter.hit! if request.kind_of?(RequestLogAnalyzer::FileFormat::Rails::Request) && request.completed? end end it "should ignore memory changes when a failure occurs" do @log_parser.parse_file(log_fixture(:oink_22_failure)) do |request| if @log_parser.parsed_requests == 4 request[:memory_diff].should == nil end end end end end end