Sha256: 431a63d11c5910248ef588ed94ad74dfc6defa9bba4a57fac50ff5a273ce7673

Contents?: true

Size: 1.58 KB

Versions: 1

Compression:

Stored size: 1.58 KB

Contents

require 'test_helper'

class WorkerTest < LocaljobTestCase
  def setup
    @localjob = queue
    @worker   = worker
  end

  def test_pop_and_send_to_worker
    WalrusJob.any_instance.expects(:perform)

    @localjob << WalrusJob.new("move")

    job = @localjob.shift
    @worker.process(job)
  end

  def test_working_off_queue_in_child
    @localjob << WalrusJob.new("move")

    a = Thread.start {
      job = @localjob.shift
      @worker.process(job)
    }

    a.join

    assert_equal 0, @localjob.size
  end


  def test_doesnt_stop_on_error
    @localjob << AngryWalrusJob.new(100)
    @localjob << WalrusJob.new("be happy")

    a = Thread.start { @worker.work }

    # Hack to account for race condition, 0.01s should be plenty
    sleep 0.01
    a.kill

    assert_equal 0, @localjob.size
  end

  def test_workers_listen_on_multiple_queues
    @localjob << WalrusJob.new("move")

    other = queue("other-queue")
    other << WalrusJob.new("dance")

    @worker.channel << 'other-queue'

    a = Thread.start { @worker.work }

    sleep 0.01
    a.kill

    assert_equal 0, @localjob.size
    assert_equal 0, other.size
  end

  def test_worker_doesnt_die_on_bad_serialization
    @localjob.queue.send "--- !ruby/object:Whatever {}\n"

    a = Thread.start { @worker.work }

    sleep 0.01
    a.kill
  end
 
  on_platform 'linux' do
    def test_sigquit_terminates_the_worker
      @localjob << WalrusJob.new("move")

      assert_equal 1, @localjob.size

      pid = fork { @worker.work }

      Process.kill("QUIT", pid)
      Process.wait

      assert_equal 0, @localjob.size
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
localjob-0.0.2 test/worker_test.rb