require 'rails_helper' require 'mqtt' require './spec/support/fake_mqtt_server' describe Agents::MqttAgent do before :each do @error_log = StringIO.new @server = MQTT::FakeServer.new('127.0.0.1') @server.logger = Logger.new(@error_log) @server.logger.level = Logger::DEBUG @server.start @valid_params = { 'uri' => "mqtt://#{@server.address}:#{@server.port}", 'topic' => '/#', 'max_read_time' => '0.1', 'expected_update_period_in_days' => "2" } @checker = Agents::MqttAgent.new( :name => "somename", :options => @valid_params, :schedule => "midnight", ) @checker.user = users(:jane) @checker.save! end after :each do @server.stop end describe "#check" do it "should create events in the initial run" do expect { @checker.check }.to change { Event.count }.by(2) end it "should ignore retained messages that are previously received" do expect { @checker.check }.to change { Event.count }.by(2) expect { @checker.check }.to change { Event.count }.by(1) expect { @checker.check }.to change { Event.count }.by(1) expect { @checker.check }.to change { Event.count }.by(2) end end describe "#working?" do it "checks if its generating events as scheduled" do expect(@checker).not_to be_working @checker.check expect(@checker.reload).to be_working three_days_from_now = 3.days.from_now allow(Time).to receive(:now) { three_days_from_now } expect(@checker).not_to be_working end end end