Current section

Files

Jump to
exq test worker_test.exs
Raw

test/worker_test.exs

Code.require_file "test_helper.exs", __DIR__
defmodule WorkerTest do
use ExUnit.Case
defmodule NoArgWorker do
def perform do
end
end
defmodule ThreeArgWorker do
def perform(_, _, _) do
end
end
defmodule CustomMethodWorker do
def custom_perform do
end
end
defmodule MissingMethodWorker do
end
defmodule RaiseWorker do
def perform do
raise "error"
end
end
defmodule SuicideWorker do
def perform do
Process.exit(self, :kill)
end
end
def assert_terminate(worker, normal_terminate) do
Exq.Worker.Server.work(worker)
if normal_terminate do
assert_receive {:"$gen_cast", {:record_processed, _, _}}
else
assert_receive {:"$gen_cast", {:record_failure, _, _, _}}
end
end
def start_worker(job) do
work_table = :ets.new(:work_table, [:set, :public])
Exq.Worker.Server.start_link(job, self, "default", work_table, self, "exq", "localhost", self)
end
test "execute valid job with perform" do
{:ok, worker} = start_worker("{ \"queue\": \"default\", \"class\": \"WorkerTest.NoArgWorker\", \"args\": [] }")
assert_terminate(worker, true)
end
test "execute valid rubyish job with perform" do
{:ok, worker} = start_worker("{ \"queue\": \"default\", \"class\": \"WorkerTest::NoArgWorker\", \"args\": [] }")
assert_terminate(worker, true)
end
test "execute valid job with perform args" do
{:ok, worker} = start_worker("{ \"queue\": \"default\", \"class\": \"WorkerTest.ThreeArgWorker\", \"args\": [1, 2, 3] }")
assert_terminate(worker, true)
end
test "execute worker raising error" do
{:ok, worker} = start_worker("{ \"queue\": \"default\", \"class\": \"WorkerTest.RaiseWorker\", \"args\": [] }")
assert_terminate(worker, false)
end
test "execute valid job with custom function" do
{:ok, worker} = start_worker("{ \"queue\": \"default\", \"class\": \"WorkerTest.CustomMethodWorker/custom_perform\", \"args\": [] }")
assert_terminate(worker, false)
end
test "execute invalid module perform" do
{:ok, worker} = start_worker("{ \"queue\": \"default\", \"class\": \"NonExistant\", \"args\": [] }")
assert_terminate(worker, false)
end
test "worker killed still sends stats" do
{:ok, worker} = start_worker("{ \"queue\": \"default\", \"class\": \"SuicideWorker\", \"args\": [] }")
assert_terminate(worker, false)
end
test "execute invalid module function" do
{:ok, worker} = start_worker("{ \"queue\": \"default\", \"class\": \"WorkerTest.MissingMethodWorker/nonexist\", \"args\": [] }")
assert_terminate(worker, false)
end
end