Current section

Files

Jump to
exq test performance_test.exs
Raw

test/performance_test.exs

Code.require_file "test_helper.exs", __DIR__
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
def wait_until(f, sleep_time) do
unless f do
:timer.sleep(sleep_time)
wait_until(f, sleep_time)
end
end
test "test to_job_json performance" do
started = :os.timestamp
max_timeout_ms = 1_000
for _ <- 1..1000, do: Exq.Redis.JobQueue.to_job_json("default", PerformanceTest.Worker, ["keep_on_trucking"])
elapsed_ms = :timer.now_diff(:os.timestamp, started) / 1_000
Logger.debug "to_job_json 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
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 "stats performance is in acceptable range" do
Tzdata.EtsHolder.start_link
Exq.Enqueuer.start_link(name: ExqE)
#{:ok, time} = Timex.DateFormat.parse("2016-01-07T13:30:00+00", "{ISO}")
started = :os.timestamp
for _ <- 1..1000 do
{:ok, time} = Timex.DateFormat.parse("2016-01-07T13:30:00+00", "{ISO}")
Exq.Redis.JobStat.record_processed(:testredis, "test", nil, time)
end
{:ok, failures, successes} = Exq.Api.realtime_stats(ExqE)
elapsed_ms = :timer.now_diff(:os.timestamp, started) / 1_000
Logger.debug "Exq Perf test took #{elapsed_ms / 1_000} secs"
assert List.keysort(successes, 0) == [{"2016-01-07 13:30:00 +0000", "1000"}]
end
end