spec/supports/helpers.rb in logstash-codec-multiline-2.0.4 vs spec/supports/helpers.rb in logstash-codec-multiline-2.0.5
- old
+ new
@@ -1,5 +1,7 @@
+
+
def decode_events
multiline = LogStash::Codecs::Multiline.new(options)
events = []
random_number_of_events.times do |n|
@@ -7,6 +9,115 @@
end
# Grab the in-memory-event
multiline.flush { |event| events << event }
events
+end
+
+class LineListener
+ attr_reader :data, :path, :queue, :codec
+ # use attr_reader to define noop methods of Listener API
+ attr_reader :deleted, :created, :error, :eof #, :line
+
+ def initialize(queue, codec, path = '')
+ # store state from upstream
+ @queue = queue
+ @codec = codec
+ @path = path
+ end
+
+ # receives a line from some upstream source
+ # and sends it downstream
+ def accept(data)
+ @codec.accept dup_adding_state(data)
+ end
+
+ def process_event(event)
+ event["path"] = path
+ @queue << event
+ end
+
+ def add_state(data)
+ @data = data
+ self
+ end
+
+ private
+
+ # dup and add state for downstream
+ def dup_adding_state(line)
+ self.class.new(queue, codec, path).add_state(line)
+ end
+end
+
+class LineErrorListener < LineListener
+ def process_event(event)
+ raise StandardError.new("OMG, Daleks!")
+ end
+end
+
+class MultilineRspec < LogStash::Codecs::Multiline
+ def internal_buffer
+ @buffer
+ end
+ def buffer_size
+ @buffer.size
+ end
+end
+
+class TracerBase
+ def initialize() @tracer = []; end
+
+ def trace_for(symbol)
+ params = @tracer.assoc(symbol)
+ params.nil? ? false : params.last
+ end
+
+ def clear()
+ @tracer.clear()
+ end
+end
+
+class MultilineLogTracer < TracerBase
+ def warn(*args) @tracer.push [:warn, args]; end
+ def error(*args) @tracer.push [:error, args]; end
+ def debug(*args) @tracer.push [:debug, args]; end
+ def info(*args) @tracer.push [:info, args]; end
+
+ def info?() true; end
+ def debug?() true; end
+ def warn?() true; end
+ def error?() true; end
+end
+
+class AutoFlushTracer < TracerBase
+ def auto_flush() @tracer.push [:auto_flush, true]; end
+end
+
+class IdentityMapCodecTracer < TracerBase
+ def clone() self.class.new; end
+ def decode(data) @tracer.push [:decode, data]; end
+ def encode(event) @tracer.push [:encode, event]; end
+ def flush(&block) @tracer.push [:flush, block.call]; end
+ def close() @tracer.push [:close, true]; end
+ def logger() @logger ||= MultilineLogTracer.new; end
+end
+
+RSpec::Matchers.define(:have_an_empty_buffer) do
+ match do |actual|
+ actual.buffer_size.zero?
+ end
+
+ failure_message do
+ "Expecting #{actual.buffer_size} to be 0"
+ end
+end
+
+RSpec::Matchers.define(:match_path_and_line) do |path, line|
+ match do |actual|
+ actual["path"] == path && actual["message"] == line.join($/)
+ end
+
+ failure_message do
+ "Expecting #{actual['path']} to equal `#{path}` and #{actual["message"]} to equal #{line.join($/)}"
+ end
end