2012-04-27 00:43:12 -04:00
|
|
|
require 'abstract_unit'
|
|
|
|
require 'rails/queueing'
|
|
|
|
|
|
|
|
class TestQueueTest < ActiveSupport::TestCase
|
|
|
|
class Job
|
|
|
|
attr_reader :id
|
|
|
|
def initialize(id, &block)
|
|
|
|
@id = id
|
|
|
|
@block = block
|
|
|
|
end
|
|
|
|
|
|
|
|
def run
|
|
|
|
@block.call if @block
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def setup
|
|
|
|
@queue = Rails::Queueing::TestQueue.new
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_contents
|
|
|
|
assert_equal [], @queue.contents
|
|
|
|
job = Job.new(1)
|
|
|
|
@queue.push job
|
|
|
|
assert_equal [job], @queue.contents
|
|
|
|
end
|
|
|
|
|
2012-04-27 16:15:51 -04:00
|
|
|
def test_order
|
|
|
|
time1 = time2 = nil
|
2012-04-27 16:21:51 -04:00
|
|
|
|
2012-04-27 16:15:51 -04:00
|
|
|
job1 = Job.new(1) { time1 = Time.now }
|
|
|
|
job2 = Job.new(2) { time2 = Time.now }
|
2012-04-27 16:21:51 -04:00
|
|
|
|
2012-04-27 16:15:51 -04:00
|
|
|
@queue.push job1
|
|
|
|
@queue.push job2
|
|
|
|
@queue.drain
|
2012-04-27 16:21:51 -04:00
|
|
|
|
2012-04-27 16:15:51 -04:00
|
|
|
assert time1 < time2, "Jobs run in the same order they were added"
|
|
|
|
end
|
|
|
|
|
2012-04-27 00:43:12 -04:00
|
|
|
def test_drain
|
|
|
|
t = nil
|
|
|
|
ran = false
|
|
|
|
|
|
|
|
job = Job.new(1) do
|
|
|
|
ran = true
|
|
|
|
t = Thread.current
|
|
|
|
end
|
|
|
|
|
|
|
|
@queue.push job
|
|
|
|
@queue.drain
|
|
|
|
|
|
|
|
assert_equal [], @queue.contents
|
|
|
|
assert ran, "The job runs synchronously when the queue is drained"
|
|
|
|
assert_not_equal t, Thread.current
|
|
|
|
end
|
|
|
|
end
|