Sha256: 72f3e1950f5bb4d746b8ced70f7f49f54540f9da841aa9daccb3f512c3d85331

Contents?: true

Size: 1.97 KB

Versions: 9

Compression:

Stored size: 1.97 KB

Contents

$: << File.dirname(__FILE__)
$: << File.join(File.dirname(__FILE__), '..', 'lib')

require 'rubygems'
require 'minitest-patch'
require 'cabin'
require 'stringio'
require 'minitest/autorun' if __FILE__ == $0

describe Cabin::Channel do
  class Receiver
    attr_accessor :data

    public
    def initialize
      @data = []
    end

    def <<(data)
      @data << data
    end
  end # class Receiver

  before do
    @logger = Cabin::Channel.new
    @target = Receiver.new
    @logger.subscribe(@target)

    @info_reader,  @info_writer  = IO.pipe
    @error_reader, @error_writer = IO.pipe
  end

  after do
    @logger.unsubscribe(@target.object_id)
    [ @info_reader, @info_writer,
      @error_reader, @error_writer ].each do |io|
      io.close unless io.closed?
    end
  end

  test 'Piping one IO' do
    @info_writer.puts 'Hello world'
    @info_writer.close

    @logger.pipe(@info_reader => :info)
    assert_equal(1, @target.data.length)
    assert_equal('Hello world', @target.data[0][:message])
  end

  test 'Piping multiple IOs' do
    @info_writer.puts 'Hello world'
    @info_writer.close

    @error_writer.puts 'Goodbye world'
    @error_writer.close

    @logger.pipe(@info_reader => :info, @error_reader => :error)
    assert_equal(2, @target.data.length)
    assert_equal('Hello world',   @target.data[0][:message])
    assert_equal(:info,           @target.data[0][:level])
    assert_equal('Goodbye world', @target.data[1][:message])
    assert_equal(:error,          @target.data[1][:level])
  end

  test 'Piping with a block' do
    @info_writer.puts 'Hello world'
    @info_writer.close

    @error_writer.puts 'Goodbye world'
    @error_writer.close

    info  = StringIO.new
    error = StringIO.new

    @logger.pipe(@info_reader => :info, @error_reader => :error) do |message, level|
      info  << message if level == :info
      error << message if level == :error
    end

    assert_equal('Hello world',   info.string)
    assert_equal('Goodbye world', error.string)
  end
end

Version data entries

9 entries across 7 versions & 4 rubygems

Version Path
able-neo4j-1.0.0 vendor/bundle/jruby/1.9/gems/cabin-0.7.1/test/test_pipe.rb
logstash-input-beats-2.0.2 vendor/jruby/1.9/gems/cabin-0.7.1/test/test_pipe.rb
logstash-input-beats-2.0.2 vendor/jruby/1.9/gems/logstash-codec-json-2.0.3/vendor/gems/cabin-0.7.2/test/test_pipe.rb
logstash-input-beats-2.0.2 vendor/jruby/1.9/gems/cabin-0.7.2/test/test_pipe.rb
logstash-codec-json-2.0.3 vendor/gems/cabin-0.7.2/test/test_pipe.rb
cabin-0.7.2 test/test_pipe.rb
logstash-input-beats-0.9.2 vendor/jruby/1.9/gems/cabin-0.7.1/test/test_pipe.rb
logstash-input-beats-0.9.1 vendor/jruby/1.9/gems/cabin-0.7.1/test/test_pipe.rb
cabin-0.7.1 test/test_pipe.rb