123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- require 'rails_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
- after(:each) do
- @agent_runner.stop
- AgentRunner.class_variable_set(:@@agents, [])
- end
- context "#run" do
- before do
- mock(@agent_runner).run_workers
- 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'])
- agent_runner.stop
- 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'])
- agent_runner.stop
- end
- end
- context "running workers" do
- before do
- AgentRunner.class_variable_set(:@@agents, [HuginnScheduler, DelayedJobWorker])
- stub.instance_of(HuginnScheduler).setup
- stub.instance_of(DelayedJobWorker).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
- agent_runner.stop
- end
- end
- end
|