Packages
exq
0.22.0
0.23.0
0.22.0
0.21.0
0.20.0
0.19.0
0.18.0
0.17.0
0.16.2
0.16.1
0.16.0
0.15.0
0.14.0
0.13.5
0.13.4
0.13.3
0.13.2
0.13.1
0.13.0
0.12.2
0.12.1
0.12.0
0.11.0
0.10.1
0.10.0
0.9.1
0.9.0
0.8.7
0.8.6
0.8.5
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.3
0.7.2
0.7.1
0.7.0
0.6.5
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.0
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.0
0.2.3
0.2.2
0.2.1
0.2.0
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
0.0.2
Exq is a job processing library compatible with Resque / Sidekiq for the Elixir language.
Current section
Files
Jump to
Current section
Files
test/performance_test.exs
defmodule PerformanceTest do
use ExUnit.Case
require Logger
import ExqTestUtil
setup do
TestRedis.setup()
on_exit(fn ->
TestRedis.teardown()
end)
:ok
end
defmodule Worker do
def perform(arg) do
if arg == "last" do
Logger.info("Last message detected")
send(:tester, :done)
end
end
end
defmodule FlakeyWorker do
def perform(instruction) do
case instruction do
"done" -> send(:tester, :done)
1 -> raise "error"
2 -> Process.exit(self(), :normal)
3 -> Process.exit(self(), :kill)
4 -> 1 / 0
5 -> 1 = 0
6 -> Exq.worker_job(Exq)
end
end
end
test "test to_job_serialized performance" do
started = :os.timestamp()
max_timeout_ms = 1_000
for _ <- 1..1000,
do:
Exq.Redis.JobQueue.to_job_serialized(
"default",
PerformanceTest.Worker,
["keep_on_trucking"],
max_retries: 10
)
elapsed_ms = :timer.now_diff(:os.timestamp(), started) / 1_000
Logger.debug("to_job_serialized performance test took #{elapsed_ms / 1_000} secs")
assert elapsed_ms < max_timeout_ms
end
test "performance is in acceptable range" do
Process.register(self(), :tester)
started = :os.timestamp()
max_timeout_ms = 5 * 1_000
{:ok, sup} = Exq.start_link()
for _ <- 1..1000,
do: Exq.enqueue(Exq, "default", PerformanceTest.Worker, ["keep_on_trucking"])
Exq.enqueue(Exq, "default", PerformanceTest.Worker, ["last"])
# Wait for last message
receive do
:done -> Logger.info("Received done")
after
# This won't count enqueue
max_timeout_ms -> assert false, "Timeout of #{max_timeout_ms} reached for performance test"
end
elapsed_ms = :timer.now_diff(:os.timestamp(), started) / 1_000
Logger.debug("Perf test took #{elapsed_ms / 1_000} secs")
count = Exq.Redis.Connection.llen!(:testredis, "test:queue:default")
assert count == 0
assert elapsed_ms < max_timeout_ms
# let stats finish
wait_long()
stop_process(sup)
end
test "performance for flakey workers" do
Process.register(self(), :tester)
max_timeout_ms = 2 * 1_000
{:ok, sup} = Exq.start_link(concurrency: 20)
for _ <- 1..200,
do:
Exq.enqueue(Exq, "default", PerformanceTest.FlakeyWorker, [
Enum.random([1, 2, 3, 4, 5, 6])
])
Exq.enqueue(Exq, "default", PerformanceTest.FlakeyWorker, [:done])
# Wait for last message
receive do
:done -> Logger.info("Received done")
after
# This won't count enqueue
max_timeout_ms -> assert false, "Timeout of #{max_timeout_ms} reached for performance test"
end
count = Exq.Redis.Connection.llen!(:testredis, "test:queue:default")
assert count == 0
# let stats finish
wait_long()
stop_process(sup)
end
end