1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
|
require 'json'
require 'spec_helper'
RSpec.describe HTTParty::Logger::LogstashFormatter do
let(:severity) { :info }
let(:http_method) { 'GET' }
let(:path) { 'http://my.domain.com/my_path' }
let(:logger_double) { double('Logger') }
let(:request_double) { double('Request', http_method: Net::HTTP::Get, path: "#{path}") }
let(:frozen_time) { Time.new(2024, 1, 1, 12, 0, 0, "+00:00") }
let(:request_time) { frozen_time.strftime("%Y-%m-%d %H:%M:%S %z") }
let(:log_message) do
{
'@timestamp' => request_time,
'@version' => 1,
'content_length' => content_length || '-',
'http_method' => http_method,
'message' => message,
'path' => path,
'response_code' => response_code,
'severity' => severity,
'tags' => ['HTTParty'],
}.to_json
end
subject { described_class.new(logger_double, severity) }
before do
allow(Time).to receive(:now).and_return(frozen_time)
expect(logger_double).to receive(:info).with(log_message)
end
describe "#format" do
let(:response_code) { 302 }
let(:content_length) { '-' }
let(:message) { "[HTTParty] #{response_code} \"#{http_method} #{path}\" #{content_length} " }
it "formats a response to be compatible with Logstash" do
response_double = double(
code: response_code,
:[] => nil
)
subject.format(request_double, response_double)
end
end
end
|