spec/integration/logging_spec.rb in freddy-jruby-1.0.0 vs spec/integration/logging_spec.rb in freddy-jruby-1.3.2

- old
+ new

@@ -1,44 +1,101 @@ require 'spec_helper' +require 'logasm/tracer' -describe 'Logging' do - let(:freddy1) { Freddy.build(logger1, config) } - let(:freddy2) { Freddy.build(logger2, config) } +describe 'Logging with Logasm::Tracer' do + let(:logger) { ArrayLogger.new } + let(:tracer) { Logasm::Tracer.new(logger) } - let(:logger1) { spy('logger1') } - let(:logger2) { spy('logger2') } + before { OpenTracing.global_tracer = tracer } + after { OpenTracing.global_tracer = nil } - let(:destination) { random_destination } - let(:payload) { {pay: 'load'} } + context 'when receiving an untraced request' do + let(:freddy) { Freddy.build(spy, config) } + let(:destination) { random_destination } - after { [freddy1, freddy2].each(&:close) } - - before do - freddy1.respond_to destination do |payload, msg_handler| - msg_handler.success + before do + freddy.respond_to(destination) do |payload, msg_handler| + sleep 0.1 # emulate some processing + msg_handler.success({}) + end end - freddy2.deliver_with_response(destination, payload) { } - default_sleep - end + after { freddy.close } - it 'logs all consumed messages' do - expect(logger1).to have_received(:info).with(/Listening for requests on \S+/) - expect(logger1).to have_received(:debug).with( - message: 'Received message', - queue: destination, - payload: payload, - correlation_id: anything - ) + it 'generates a trace' do + freddy.deliver_with_response(destination, {}) + + expect(logger.calls.map(&:first)).to eq([ + # Initiator + "Span [freddy:request:#{destination}] started", + "Span [freddy:request:#{destination}] Publishing request", + + # Service + "Span [freddy:respond:#{destination}] started", + "Span [freddy:respond:#{destination}] Received message through respond_to", + "Span [freddy:respond:#{destination}] Sending response", + "Span [freddy:respond:#{destination}] finished", + + # Initiator + "Span [freddy:request:#{destination}] finished" + ]) + end end - it 'logs all produced messages' do - expect(logger2).to have_received(:debug).with(/Consuming messages on \S+/) - expect(logger2).to have_received(:debug).with( - message: 'Publishing request', - queue: destination, - payload: payload, - response_queue: anything, - correlation_id: anything - ) + context 'when receiving a traced request' do + let(:freddy) { Freddy.build(spy, config) } + let(:freddy2) { Freddy.build(spy, config) } + + let(:destination) { random_destination } + let(:destination2) { random_destination } + + before do + freddy.respond_to(destination) do |payload, msg_handler| + sleep 0.1 # emulate some processing + msg_handler.success({ + trace_initiator: {}, + current_receiver: freddy.deliver_with_response(destination2, {}) + }) + end + + freddy2.respond_to(destination2) do |payload, msg_handler| + sleep 0.1 # emulate some processing + msg_handler.success({}) + end + end + + after do + freddy.close + freddy2.close + end + + it 'generates a trace' do + freddy.deliver_with_response(destination, {}) + + expect(logger.calls.map(&:first)).to eq([ + # Initiator + "Span [freddy:request:#{destination}] started", + "Span [freddy:request:#{destination}] Publishing request", + + # Service 1 + "Span [freddy:respond:#{destination}] started", + "Span [freddy:respond:#{destination}] Received message through respond_to", + "Span [freddy:request:#{destination2}] started", + "Span [freddy:request:#{destination2}] Publishing request", + + # Service 2 + "Span [freddy:respond:#{destination2}] started", + "Span [freddy:respond:#{destination2}] Received message through respond_to", + "Span [freddy:respond:#{destination2}] Sending response", + "Span [freddy:respond:#{destination2}] finished", + + # Service 1 + "Span [freddy:request:#{destination2}] finished", + "Span [freddy:respond:#{destination}] Sending response", + "Span [freddy:respond:#{destination}] finished", + + # Initiator + "Span [freddy:request:#{destination}] finished" + ]) + end end end