spec/inputs/xmpp_spec.rb in logstash-input-xmpp-1.0.0 vs spec/inputs/xmpp_spec.rb in logstash-input-xmpp-2.0.0

- old
+ new

@@ -1,72 +1,145 @@ +# encoding: utf-8 require "logstash/devutils/rspec/spec_helper" +require 'logstash/inputs/xmpp' +require 'support/xmpp4r_mocks.rb' + +describe LogStash::Inputs::Xmpp do + let(:rooms) { ['logstash', 'kibana'] } + let(:config) do + { + 'user' => 'foo@domain.org/chat', + 'password' => 'bAr', + 'rooms' => rooms + } + end + + before do + allow(Jabber::Client).to receive(:new) do |jid| + Jabber::ClientMock.new(jid) + end + + allow(Jabber::MUC::SimpleMUCClient).to receive(:new) do |client| + Jabber::MucClientMock.new(client) + end + end + + context 'when running' do + let(:queue) { [] } + let(:msg) { 'Hello Logstash'} + let(:inject_block) do + -> { subject.client.inject_message(Jabber::MessageMock.new(msg)) } + end + + subject { LogStash::Inputs::Xmpp.new(config) } + + before do + subject.register + plugin_thread = Thread.new(subject, queue) { |subj, que| subj.run(que) } + sleep 0.01 until plugin_thread.status == 'sleep' + inject_block.call + subject.stop + end + + context "when using Client" do + it 'pushes normal events into a queue' do + event = queue.first + expect(event['message']).to eq(msg) + expect(event['from']).to eq('bar@domain.org/chat') + end + end + + context "when using Rooms" do + let(:inject_block) do + -> do + subject.muc_clients.each do |muc| + muc.inject_message('now', 'bar', 'Hello Foo') + end + end + end + + it 'pushes room events into a queue' do + rooms.each do |room| + event = queue.shift + expect(event['message']).to eq('Hello Foo') + expect(event['from']).to eq('bar') + expect(event['room']).to eq(room) + end + end + end + end + + context 'when shutting down' do + it_behaves_like "an interruptible input plugin" + end +end