123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- require 'rails_helper'
- describe LongRunnable do
- class LongRunnableAgent < Agent
- include LongRunnable
- def default_options
- {test: 'test'}
- end
- end
- before(:all) do
- @agent = LongRunnableAgent.new
- end
- it "start_worker? defaults to true" do
- expect(@agent.start_worker?).to be_truthy
- end
- it "should build the worker_id" do
- expect(@agent.worker_id).to eq('LongRunnableAgent--bf21a9e8fbc5a3846fb05b4fa0859e0917b2202f')
- end
- context "#setup_worker" do
- it "returns active agent workers" do
- mock(LongRunnableAgent).active { [@agent] }
- workers = LongRunnableAgent.setup_worker
- expect(workers.length).to eq(1)
- expect(workers.first).to be_a(LongRunnableAgent::Worker)
- expect(workers.first.agent).to eq(@agent)
- end
- it "returns an empty array when no agent is active" do
- mock(LongRunnableAgent).active { [] }
- workers = LongRunnableAgent.setup_worker
- expect(workers.length).to eq(0)
- end
- end
- describe LongRunnable::Worker do
- before(:each) do
- @agent = Object.new
- @worker = LongRunnable::Worker.new(agent: @agent, id: 'test1234')
- @worker.setup!(Rufus::Scheduler.new, Mutex.new)
- end
- it "calls boolify of the agent" do
- mock(@agent).boolify('true') { true }
- expect(@worker.boolify('true')).to be_truthy
- end
- it "expects run to be overriden" do
- expect { @worker.run }.to raise_error(StandardError)
- end
- context "#run!" do
- it "runs the agent worker" do
- mock(@worker).run
- @worker.run!.join
- end
- it "stops when rescueing a SystemExit" do
- mock(@worker).run { raise SystemExit }
- mock(@worker).stop!
- @worker.run!.join
- end
- it "creates an agent log entry for a generic exception" do
- stub(STDERR).puts
- mock(@worker).run { raise "woups" }
- mock(@agent).error(/woups/)
- @worker.run!.join
- end
- end
- context "#stop!" do
- it "terminates the thread" do
- mock(@worker.thread).terminate
- @worker.stop!
- end
- it "gracefully stops the worker" do
- mock(@worker).stop
- @worker.stop!
- end
- end
- context "#restart!" do
- it "stops, setups and starts the worker" do
- mock(@worker).stop!
- mock(@worker).setup!(@worker.scheduler, @worker.mutex)
- mock(@worker).run!
- @worker.restart!
- end
- end
- context "scheduling" do
- it "schedules tasks once" do
- mock(@worker.scheduler).send(:schedule_in, 1.hour, tag: 'test1234')
- @worker.schedule_in 1.hour do noop; end
- end
- it "schedules repeating tasks" do
- mock(@worker.scheduler).send(:every, 1.hour, tag: 'test1234')
- @worker.every 1.hour do noop; end
- end
- it "allows the cron syntax" do
- mock(@worker.scheduler).send(:cron, '0 * * * *', tag: 'test1234')
- @worker.cron '0 * * * *' do noop; end
- end
- end
- end
- end
|