spec/lib/flapjack/data/event_spec.rb in flapjack-0.8.1 vs spec/lib/flapjack/data/event_spec.rb in flapjack-0.8.2

- old
+ new

@@ -21,39 +21,166 @@ } context 'class' do it "returns the next event (blocking, archiving)" do - expect(mock_redis).to receive(:brpoplpush).with('events', /^events_archive:/, 0).and_return(event_data.to_json) + expect(mock_redis).to receive(:brpoplpush). + with('events', /^events_archive:/, 0).and_return(event_data.to_json) expect(mock_redis).to receive(:expire) - result = Flapjack::Data::Event.next('events', :block => true, :archive_events => true, :redis => mock_redis) + result = Flapjack::Data::Event.next('events', :block => true, + :archive_events => true, :redis => mock_redis) expect(result).to be_an_instance_of(Flapjack::Data::Event) end it "returns the next event (blocking, not archiving)" do - expect(mock_redis).to receive(:brpop).with('events', 0).and_return(['events', event_data.to_json]) + expect(mock_redis).to receive(:brpop).with('events', 0). + and_return(['events', event_data.to_json]) - result = Flapjack::Data::Event.next('events', :block => true, :archive_events => false, :redis => mock_redis) + result = Flapjack::Data::Event.next('events',:block => true, + :archive_events => false, :redis => mock_redis) expect(result).to be_an_instance_of(Flapjack::Data::Event) end it "returns the next event (non-blocking, archiving)" do - expect(mock_redis).to receive(:rpoplpush).with('events', /^events_archive:/).and_return(event_data.to_json) + expect(mock_redis).to receive(:rpoplpush). + with('events', /^events_archive:/).and_return(event_data.to_json) expect(mock_redis).to receive(:expire) - result = Flapjack::Data::Event.next('events', :block => false, :archive_events => true, :redis => mock_redis) + result = Flapjack::Data::Event.next('events', :block => false, + :archive_events => true, :redis => mock_redis) expect(result).to be_an_instance_of(Flapjack::Data::Event) end it "returns the next event (non-blocking, not archiving)" do - expect(mock_redis).to receive(:rpop).with('events').and_return(event_data.to_json) + expect(mock_redis).to receive(:rpop).with('events'). + and_return(event_data.to_json) - result = Flapjack::Data::Event.next('events', :block => false, :archive_events => false, :redis => mock_redis) + result = Flapjack::Data::Event.next('events', :block => false, + :archive_events => false, :redis => mock_redis) expect(result).to be_an_instance_of(Flapjack::Data::Event) end - it "handles invalid event JSON" + it "rejects invalid event JSON (archiving)" do + bad_event_json = '{{{' + expect(mock_redis).to receive(:brpoplpush). + with('events', /^events_archive:/, 0).and_return(bad_event_json) + expect(mock_redis).to receive(:multi) + expect(mock_redis).to receive(:lrem).with(/^events_archive:/, 1, bad_event_json) + expect(mock_redis).to receive(:lpush).with(/^events_rejected:/, bad_event_json) + expect(mock_redis).to receive(:exec) + expect(mock_redis).to receive(:expire) + + result = Flapjack::Data::Event.next('events', :block => true, + :archive_events => true, :redis => mock_redis) + expect(result).to be_nil + end + + it "rejects invalid event JSON (not archiving)" do + bad_event_json = '{{{' + expect(mock_redis).to receive(:brpop).with('events', 0). + and_return(['events', bad_event_json]) + expect(mock_redis).to receive(:lpush).with(/^events_rejected:/, bad_event_json) + + result = Flapjack::Data::Event.next('events', :block => true, + :archive_events => false, :redis => mock_redis) + expect(result).to be_nil + end + + ['type', 'state', 'entity', 'check', 'summary'].each do |required_key| + + it "rejects an event with missing '#{required_key}' key (archiving)" do + bad_event_data = event_data.clone + bad_event_data.delete(required_key) + bad_event_json = bad_event_data.to_json + expect(mock_redis).to receive(:brpoplpush). + with('events', /^events_archive:/, 0).and_return(bad_event_json) + expect(mock_redis).to receive(:multi) + expect(mock_redis).to receive(:lrem).with(/^events_archive:/, 1, bad_event_json) + expect(mock_redis).to receive(:lpush).with(/^events_rejected:/, bad_event_json) + expect(mock_redis).to receive(:exec) + expect(mock_redis).to receive(:expire) + + result = Flapjack::Data::Event.next('events', :block => true, + :archive_events => true, :redis => mock_redis) + expect(result).to be_nil + end + + it "rejects an event with missing '#{required_key}' key (not archiving)" do + bad_event_data = event_data.clone + bad_event_data.delete(required_key) + bad_event_json = bad_event_data.to_json + expect(mock_redis).to receive(:brpop).with('events', 0). + and_return(['events', bad_event_json]) + expect(mock_redis).to receive(:lpush).with(/^events_rejected:/, bad_event_json) + + result = Flapjack::Data::Event.next('events', :block => true, + :archive_events => false, :redis => mock_redis) + expect(result).to be_nil + end + + it "rejects an event with invalid '#{required_key}' key (archiving)" do + bad_event_data = event_data.clone + bad_event_data[required_key] = {'hello' => 'there'} + bad_event_json = bad_event_data.to_json + expect(mock_redis).to receive(:brpoplpush). + with('events', /^events_archive:/, 0).and_return(bad_event_json) + expect(mock_redis).to receive(:multi) + expect(mock_redis).to receive(:lrem).with(/^events_archive:/, 1, bad_event_json) + expect(mock_redis).to receive(:lpush).with(/^events_rejected:/, bad_event_json) + expect(mock_redis).to receive(:exec) + expect(mock_redis).to receive(:expire) + + result = Flapjack::Data::Event.next('events', :block => true, + :archive_events => true, :redis => mock_redis) + expect(result).to be_nil + end + + it "rejects an event with invalid '#{required_key}' key (not archiving)" do + bad_event_data = event_data.clone + bad_event_data[required_key] = {'hello' => 'there'} + bad_event_json = bad_event_data.to_json + expect(mock_redis).to receive(:brpop).with('events', 0). + and_return(['events', bad_event_json]) + expect(mock_redis).to receive(:lpush).with(/^events_rejected:/, bad_event_json) + + result = Flapjack::Data::Event.next('events', :block => true, + :archive_events => false, :redis => mock_redis) + expect(result).to be_nil + end + end + + ['time', 'details', 'acknowledgement_id', 'duration'].each do |optional_key| + it "rejects an event with invalid '#{optional_key}' key (archiving)" do + bad_event_data = event_data.clone + bad_event_data[optional_key] = {'hello' => 'there'} + bad_event_json = bad_event_data.to_json + expect(mock_redis).to receive(:brpoplpush). + with('events', /^events_archive:/, 0).and_return(bad_event_json) + expect(mock_redis).to receive(:multi) + expect(mock_redis).to receive(:lrem).with(/^events_archive:/, 1, bad_event_json) + expect(mock_redis).to receive(:lpush).with(/^events_rejected:/, bad_event_json) + expect(mock_redis).to receive(:exec) + expect(mock_redis).to receive(:expire) + + result = Flapjack::Data::Event.next('events', :block => true, + :archive_events => true, :redis => mock_redis) + expect(result).to be_nil + end + + it "rejects an event with invalid '#{optional_key}' key (archiving)" do + bad_event_data = event_data.clone + bad_event_data[optional_key] = {'hello' => 'there'} + bad_event_json = bad_event_data.to_json + expect(mock_redis).to receive(:brpop).with('events', 0). + and_return(['events', bad_event_json]) + expect(mock_redis).to receive(:lpush).with(/^events_rejected:/, bad_event_json) + + result = Flapjack::Data::Event.next('events', :block => true, + :archive_events => false, :redis => mock_redis) + expect(result).to be_nil + end + end it "returns a count of pending events" do events_len = 23 expect(mock_redis).to receive(:llen).with('events').and_return(events_len)