|
@@ -2,7 +2,7 @@ require "rails_helper"
|
|
|
|
|
|
describe Agents::DigestAgent do
|
|
|
before do
|
|
|
- @checker = Agents::DigestAgent.new(:name => "something", :options => { :expected_receive_period_in_days => "2", :message => "{{ events | map:'data' | join:';' }}" })
|
|
|
+ @checker = Agents::DigestAgent.new(:name => "something", :options => { :expected_receive_period_in_days => "2", :retained_events => "0", :message => "{{ events | map:'data' | join:';' }}" })
|
|
|
@checker.user = users(:bob)
|
|
|
@checker.save!
|
|
|
end
|
|
@@ -15,54 +15,140 @@ describe Agents::DigestAgent do
|
|
|
event.save!
|
|
|
|
|
|
expect(@checker).not_to be_working # no events have ever been received
|
|
|
- Agents::DigestAgent.async_receive(@checker.id, [event.id])
|
|
|
+ @checker.options[:expected_receive_period_in_days] = 2
|
|
|
+ @checker.save!
|
|
|
+ Agents::DigestAgent.async_receive @checker.id, [event.id]
|
|
|
expect(@checker.reload).to be_working # Events received
|
|
|
three_days_from_now = 3.days.from_now
|
|
|
stub(Time).now { three_days_from_now }
|
|
|
- expect(@checker.reload).not_to be_working # too much time has passed
|
|
|
+ expect(@checker).not_to be_working # too much time has passed
|
|
|
end
|
|
|
end
|
|
|
+
|
|
|
+ describe "validation" do
|
|
|
+ before do
|
|
|
+ expect(@checker).to be_valid
|
|
|
+ end
|
|
|
+
|
|
|
+ it "should validate retained_events" do
|
|
|
+ @checker.options[:retained_events] = ""
|
|
|
+ expect(@checker).to be_valid
|
|
|
+ @checker.options[:retained_events] = "0"
|
|
|
+ expect(@checker).to be_valid
|
|
|
+ @checker.options[:retained_events] = "10"
|
|
|
+ expect(@checker).to be_valid
|
|
|
+ @checker.options[:retained_events] = "10000"
|
|
|
+ expect(@checker).not_to be_valid
|
|
|
+ @checker.options[:retained_events] = "-1"
|
|
|
+ expect(@checker).not_to be_valid
|
|
|
+ end
|
|
|
+
|
|
|
+ end
|
|
|
|
|
|
describe "#receive" do
|
|
|
- it "queues any payloads it receives" do
|
|
|
- event1 = Event.new
|
|
|
- event1.agent = agents(:bob_rain_notifier_agent)
|
|
|
- event1.payload = { :data => "event1" }
|
|
|
- event1.save!
|
|
|
-
|
|
|
- event2 = Event.new
|
|
|
- event2.agent = agents(:bob_weather_agent)
|
|
|
- event2.payload = { :data => "event2" }
|
|
|
- event2.save!
|
|
|
-
|
|
|
- Agents::DigestAgent.async_receive(@checker.id, [event1.id, event2.id])
|
|
|
- expect(@checker.reload.memory[:queue]).to eq([event1.id, event2.id])
|
|
|
+
|
|
|
+ describe "and retained_events is 0" do
|
|
|
+
|
|
|
+ before { @checker.options['retained_events'] = 0 }
|
|
|
+
|
|
|
+ it "retained_events any payloads it receives" do
|
|
|
+ event1 = Event.new
|
|
|
+ event1.agent = agents(:bob_rain_notifier_agent)
|
|
|
+ event1.payload = { :data => "event1" }
|
|
|
+ event1.save!
|
|
|
+
|
|
|
+ event2 = Event.new
|
|
|
+ event2.agent = agents(:bob_weather_agent)
|
|
|
+ event2.payload = { :data => "event2" }
|
|
|
+ event2.save!
|
|
|
+
|
|
|
+ @checker.receive([event1])
|
|
|
+ @checker.receive([event2])
|
|
|
+ expect(@checker.memory["queue"]).to eq([event1.id, event2.id])
|
|
|
+ end
|
|
|
+ end
|
|
|
+
|
|
|
+ describe "but retained_events is 1" do
|
|
|
+
|
|
|
+ before { @checker.options['retained_events'] = 1 }
|
|
|
+
|
|
|
+ it "retained_eventss only 1 event at a time" do
|
|
|
+ event1 = Event.new
|
|
|
+ event1.agent = agents(:bob_rain_notifier_agent)
|
|
|
+ event1.payload = { :data => "event1" }
|
|
|
+ event1.save!
|
|
|
+
|
|
|
+ event2 = Event.new
|
|
|
+ event2.agent = agents(:bob_weather_agent)
|
|
|
+ event2.payload = { :data => "event2" }
|
|
|
+ event2.save!
|
|
|
+
|
|
|
+ @checker.receive([event1])
|
|
|
+ @checker.receive([event2])
|
|
|
+ expect(@checker.memory['queue']).to eq([event2.id])
|
|
|
+ end
|
|
|
end
|
|
|
+
|
|
|
end
|
|
|
|
|
|
describe "#check" do
|
|
|
- it "should emit a event" do
|
|
|
- expect { Agents::DigestAgent.async_check(@checker.id) }.not_to change { Event.count }
|
|
|
+
|
|
|
+ describe "and retained_events is 0" do
|
|
|
+
|
|
|
+ before { @checker.options['retained_events'] = 0 }
|
|
|
+
|
|
|
+ it "should emit a event" do
|
|
|
+ expect { Agents::DigestAgent.async_check(@checker.id) }.not_to change { Event.count }
|
|
|
|
|
|
- event1 = Event.new
|
|
|
- event1.agent = agents(:bob_rain_notifier_agent)
|
|
|
- event1.payload = { :data => "event" }
|
|
|
- event1.save!
|
|
|
+ event1 = Event.new
|
|
|
+ event1.agent = agents(:bob_rain_notifier_agent)
|
|
|
+ event1.payload = { :data => "event" }
|
|
|
+ event1.save!
|
|
|
|
|
|
- event2 = Event.new
|
|
|
- event2.agent = agents(:bob_weather_agent)
|
|
|
- event2.payload = { :data => "event" }
|
|
|
- event2.save!
|
|
|
+ event2 = Event.new
|
|
|
+ event2.agent = agents(:bob_weather_agent)
|
|
|
+ event2.payload = { :data => "event" }
|
|
|
+ event2.save!
|
|
|
|
|
|
- Agents::DigestAgent.async_receive(@checker.id, [event1.id, event2.id])
|
|
|
- @checker.sources << agents(:bob_rain_notifier_agent) << agents(:bob_weather_agent)
|
|
|
- @checker.save!
|
|
|
+ @checker.receive([event1])
|
|
|
+ @checker.receive([event2])
|
|
|
+ @checker.sources << agents(:bob_rain_notifier_agent) << agents(:bob_weather_agent)
|
|
|
+ @checker.save!
|
|
|
+
|
|
|
+ expect { @checker.check }.to change { Event.count }.by(1)
|
|
|
+ expect(@checker.most_recent_event.payload["events"]).to eq([event1.payload, event2.payload])
|
|
|
+ expect(@checker.most_recent_event.payload["message"]).to eq("event;event")
|
|
|
+ expect(@checker.memory['queue']).to be_empty
|
|
|
+ end
|
|
|
+ end
|
|
|
+
|
|
|
+ describe "but retained_events is 1" do
|
|
|
+
|
|
|
+ before { @checker.options['retained_events'] = 1 }
|
|
|
+
|
|
|
+ it "should emit a event" do
|
|
|
+ expect { Agents::DigestAgent.async_check(@checker.id) }.not_to change { Event.count }
|
|
|
+
|
|
|
+ event1 = Event.new
|
|
|
+ event1.agent = agents(:bob_rain_notifier_agent)
|
|
|
+ event1.payload = { :data => "event" }
|
|
|
+ event1.save!
|
|
|
+
|
|
|
+ event2 = Event.new
|
|
|
+ event2.agent = agents(:bob_weather_agent)
|
|
|
+ event2.payload = { :data => "event" }
|
|
|
+ event2.save!
|
|
|
+
|
|
|
+ @checker.receive([event1])
|
|
|
+ @checker.receive([event2])
|
|
|
+ @checker.sources << agents(:bob_rain_notifier_agent) << agents(:bob_weather_agent)
|
|
|
+ @checker.save!
|
|
|
|
|
|
- expect { Agents::DigestAgent.async_check(@checker.id) }.to change { Event.count }.by(1)
|
|
|
- @checker.reload
|
|
|
- expect(@checker.most_recent_event.payload["events"]).to eq([event1.payload, event2.payload])
|
|
|
- expect(@checker.most_recent_event.payload["message"]).to eq("event;event")
|
|
|
- expect(@checker.memory[:queue]).to be_empty
|
|
|
+ expect { @checker.check }.to change { Event.count }.by(1)
|
|
|
+ expect(@checker.most_recent_event.payload["events"]).to eq([event2.payload])
|
|
|
+ expect(@checker.most_recent_event.payload["message"]).to eq("event")
|
|
|
+ expect(@checker.memory['queue'].length).to eq(1)
|
|
|
+ end
|
|
|
end
|
|
|
end
|
|
|
end
|