mirror of https://github.com/reiseburo/hermann
76 lines
2.3 KiB
Ruby
76 lines
2.3 KiB
Ruby
require 'spec_helper'
|
|
|
|
require 'hermann/producer'
|
|
require 'hermann/consumer'
|
|
require 'hermann/discovery/zookeeper'
|
|
require 'concurrent'
|
|
|
|
require 'protobuf'
|
|
require_relative '../fixtures/testevent.pb'
|
|
|
|
describe 'producer' do
|
|
include_context 'integration test context'
|
|
|
|
let(:timeout) { 10 }
|
|
let(:message) { 'msg' }
|
|
let(:consumer) do
|
|
Hermann::Consumer.new(topic, 'rspec-group', zookeepers)
|
|
end
|
|
let(:consumer_promise) do
|
|
Concurrent::Promise.execute do
|
|
value = nil
|
|
puts "consuming off `#{topic}`"
|
|
consumer.consume(topic) do |dequeued|
|
|
puts "received the message: #{dequeued.inspect}"
|
|
|
|
buffer = dequeued.message.to_a
|
|
# value = String.from_java_bytes(dequeued.message)
|
|
value = buffer.pack('C*').encode('UTF-8', {:invalid => :replace, :undef => :replace, :replace => ''})
|
|
# puts ".......................encoding: #{buffer.pack('c*')} #{buffer.pack('c*').encoding}"
|
|
|
|
# value = buffer.pack('c*').encode("ASCII-8BIT", {:invalid => :replace, :undef => :replace, :replace => ''})
|
|
puts value
|
|
consumer.shutdown
|
|
end
|
|
# Return this out of the block
|
|
value
|
|
end
|
|
end
|
|
let(:brokers_array) do
|
|
broker_ids = Hermann::Discovery::Zookeeper.new(zookeepers).get_brokers
|
|
puts "using ZK discovered brokers: #{broker_ids}"
|
|
broker_ids
|
|
end
|
|
let(:producer) { Hermann::Producer.new(nil, brokers_array) }
|
|
|
|
it 'produces and consumes messages', :type => :integration, :platform => :java do
|
|
producer.push(message, :topic => topic).value!(timeout)
|
|
expect(consumer_promise.value!(timeout)).to eql(message)
|
|
end
|
|
|
|
context 'with binary data', :type => :integration, :platform => :java do
|
|
let(:event) do
|
|
Hermann::TestEvent.new(:name => 'rspec',
|
|
:state => 3,
|
|
:bogomips => 9001)
|
|
end
|
|
|
|
let(:message) { event.encode }
|
|
|
|
it 'should be a thing' do
|
|
producer.push(message, :topic => topic).value!(timeout)
|
|
dequeued = consumer_promise.value!(timeout)
|
|
expect(dequeued).to eql(message.encode!('UTF-8', {:invalid => :replace, :undef => :replace, :replace => ''}))
|
|
|
|
expect {
|
|
Hermann::TestEvent.decode(dequeued)
|
|
}.not_to raise_error
|
|
end
|
|
end
|
|
|
|
after :each do
|
|
# Make sure we shut down our connection in any case
|
|
consumer.shutdown
|
|
end
|
|
end
|