agent_runner_spec.rb 3.1KB

    require 'spec_helper' describe AgentRunner do context "without traps" do before do stub.instance_of(Rufus::Scheduler).every stub.instance_of(AgentRunner).set_traps @agent_runner = AgentRunner.new end context "#run" do before do mock(@agent_runner).run_workers mock.instance_of(IO).puts('Stopping AgentRunner...') end it "runs until stop is called" do mock.instance_of(Rufus::Scheduler).join Thread.new { while @agent_runner.instance_variable_get(:@running) != false do sleep 0.1; @agent_runner.stop end } @agent_runner.run end it "handles signals" do @agent_runner.instance_variable_set(:@signal_queue, ['TERM']) @agent_runner.run end end context "#load_workers" do before do AgentRunner.class_variable_set(:@@agents, [HuginnScheduler, DelayedJobWorker]) end it "loads all workers" do workers = @agent_runner.send(:load_workers) expect(workers).to be_a(Hash) expect(workers.keys).to eq(['HuginnScheduler', 'DelayedJobWorker']) end it "loads only the workers specified in the :only option" do @agent_runner = AgentRunner.new(only: HuginnScheduler) workers = @agent_runner.send(:load_workers) expect(workers.keys).to eq(['HuginnScheduler']) end it "does not load workers specified in the :except option" do @agent_runner = AgentRunner.new(except: HuginnScheduler) workers = @agent_runner.send(:load_workers) expect(workers.keys).to eq(['DelayedJobWorker']) end end context "running workers" do before do AgentRunner.class_variable_set(:@@agents, [HuginnScheduler, DelayedJobWorker]) stub.instance_of(IO).puts stub.instance_of(LongRunnable::Worker).setup! end context "#run_workers" do it "runs all the workers" do mock.instance_of(HuginnScheduler).run! mock.instance_of(DelayedJobWorker).run! @agent_runner.send(:run_workers) end it "kills no long active workers" do mock.instance_of(HuginnScheduler).run! mock.instance_of(DelayedJobWorker).run! @agent_runner.send(:run_workers) AgentRunner.class_variable_set(:@@agents, [DelayedJobWorker]) mock.instance_of(HuginnScheduler).stop! @agent_runner.send(:run_workers) end end context "#restart_dead_workers" do before do mock.instance_of(HuginnScheduler).run! mock.instance_of(DelayedJobWorker).run! @agent_runner.send(:run_workers) end it "restarts dead workers" do stub.instance_of(HuginnScheduler).thread { OpenStruct.new(alive?: false) } mock.instance_of(HuginnScheduler).run! @agent_runner.send(:restart_dead_workers) end end end end context "#set_traps" do it "sets traps for INT TERM and QUIT" do agent_runner = AgentRunner.new mock(Signal).trap('INT') mock(Signal).trap('TERM') mock(Signal).trap('QUIT') agent_runner.set_traps end end end