spec/inputs/rss_spec.rb in logstash-input-rss-2.0.5 vs spec/inputs/rss_spec.rb in logstash-input-rss-3.0.0

- old
+ new

@@ -1,14 +1,107 @@ # encoding: utf-8 require "logstash/devutils/rspec/spec_helper" require "logstash/inputs/rss" +require 'ostruct' describe LogStash::Inputs::Rss do describe "stopping" do let(:config) { {"url" => "localhost", "interval" => 10} } before do allow(Faraday).to receive(:get) allow(subject).to receive(:handle_response) end it_behaves_like "an interruptible input plugin" end -end \ No newline at end of file + + shared_examples "fetching data" do |type| + let(:config) do + { + "url" => "http://www.example.com/foo.rss", + "interval" => 10 + } + end + + let(:sample) do + body = File.read(File.join(fixtures_source, "sample-feed.xml")) + OpenStruct.new(:body => body) + end + + before(:each) do + allow(Faraday).to receive(:get).with(config["url"]).and_return(sample) + end + + context "when the feed is valid" do + let(:data) do + plugin = described_class.new(config) + plugin_input(plugin) do |queue| + sleep 0.1 while queue.empty? + events = [] + queue.size.times { |i| events << queue.pop } + events + end + end + + it "fetchs all items" do + expect(data.count).to be > 0 + end + end + + context "when the feed is invalid" do + + let(:sample) do + body = File.read(File.join(fixtures_source, "invalid-feed.xml")) + OpenStruct.new(:body => body) + end + + let(:plugin) { described_class.new(config) } + + it "fetchs no items and causes no errors" do + events = [] + expect { + plugin_input(plugin) do |queue| + sleep 1 + events = [] + queue.size.times { |i| events << queue.pop } + events + end + }.not_to raise_error + expect(events.count).to be == 0 + end + end + + context "when the feed is valid, but has zero items" do + + let(:sample) do + body = File.read(File.join(fixtures_source, "zero-items-feed.xml")) + OpenStruct.new(:body => body) + end + + let(:plugin) { described_class.new(config) } + + it "fetchs no items and causes no errors" do + events = [] + expect { + plugin_input(plugin) do |queue| + sleep 1 + events = [] + queue.size.times { |i| events << queue.pop } + events + end + }.not_to raise_error + expect(events.count).to be == 0 + end + end + + end + + describe "rss feed" do + let(:fixtures_source) { File.join(File.dirname(__FILE__), "..", "fixtures", "rss") } + it_behaves_like "fetching data" + end + + describe "atom feed" do + let(:fixtures_source) { File.join(File.dirname(__FILE__), "..", "fixtures", "atom") } + it_behaves_like "fetching data" + end + +end