Current section

Files

Jump to
elixir_talk test elixir_talk_test.exs
Raw

test/elixir_talk_test.exs

defmodule ElixirTalkTest do
use ExUnit.Case
setup do
{:ok, pid} = ElixirTalk.connect '192.168.99.10', 11300
{m, s, ms} = :os.timestamp
tube = "ElixirTalk_#{m}_#{s}_#{ms}"
ElixirTalk.use pid, tube
ElixirTalk.watch pid, tube
ElixirTalk.ignore pid, "default"
# Don't have to manually stop it, because ExUnit will send `shutdown` to the runner
# on_exit fn -> ElixirTalk.quit(pid) end
{:ok, [tube: tube, pid: pid]}
end
test "`connect` domain" do
{:ok, pid} = ElixirTalk.connect 'my.beanstalkd.com', 11300
assert is_pid(pid)
end
test "`put`", ctx do
{:inserted, id1} = ElixirTalk.put ctx[:pid], "hello world"
assert is_integer(id1)
{:inserted, id2} = ElixirTalk.put(ctx[:pid], "hello world", pri: 1)
assert is_integer(id2) == true and id2 - id1 == 1
{:inserted, id3} = ElixirTalk.put ctx[:pid], "hello world", pri: 1, delay: 5
assert is_integer(id3) == true and id3 - id1 == 2
{:inserted, id4} = ElixirTalk.put ctx[:pid], "hello world", pri: 1, delay: 5, ttr: 120
assert is_integer(id4) == true and id4 - id1 == 3
for id <- [id1, id2, id3, id4], do: ElixirTalk.delete(ctx[:pid], id)
end
test "`put` unicode", ctx do
{:inserted, id} = ElixirTalk.put ctx[:pid], "hełło"
assert is_integer(id)
ElixirTalk.delete(ctx[:pid], id)
end
test "`use`", ctx do
{:using, now_tube} = ElixirTalk.list_tube_used(ctx[:pid])
tube = "not_default"
{:using, data} = ElixirTalk.use ctx[:pid], tube
assert data == tube
ElixirTalk.use ctx[:pid], now_tube
end
test "`reserved`", ctx do
str = "hello world"
{:inserted, put_id} = ElixirTalk.put ctx[:pid], str
{:reserved, expected_id, expected_str} = ElixirTalk.reserve ctx[:pid]
assert put_id == expected_id
assert str == expected_str
end
test "`ignore`", ctx do
ret = ElixirTalk.ignore ctx[:pid], ctx[:tube]
assert ret == :not_ignored
tube = "new_tube"
{watch, count} = ElixirTalk.ignore ctx[:pid], tube
assert watch == :watching && count == 1
end
test "`list_tubes`", ctx do
tubes = ElixirTalk.list_tubes(ctx[:pid])
assert length(tubes) > 0
end
test "`list_tubes_watched`", ctx do
used_tube = ElixirTalk.list_tubes_watched ctx[:pid]
assert length(used_tube) == 1
assert hd(used_tube) == ctx[:tube]
tubes = ~w(tube1 tube2 tube3 tube4 tube5)
Enum.each tubes, &(ElixirTalk.watch ctx[:pid], &1)
used_tube = ElixirTalk.list_tubes_watched ctx[:pid]
assert length(used_tube) == 1 + length(tubes)
assert hd(used_tube) == ctx[:tube]
end
test "`list_tube_used`", ctx do
{:using, used_tube} = ElixirTalk.list_tube_used ctx[:pid]
assert used_tube == ctx[:tube]
using_tube = "using_tube_foo"
ElixirTalk.use ctx[:pid], using_tube
{:using, used_tube} = ElixirTalk.list_tube_used ctx[:pid]
assert used_tube == using_tube
end
test "`watch`", ctx do
tube = "new_tube"
{:watching, count} = ElixirTalk.watch ctx[:pid], tube
assert count == 2
end
test "`delete`", ctx do
{:inserted, id} = ElixirTalk.put ctx[:pid], "put to ensure has jobs"
ret = ElixirTalk.delete ctx[:pid], id
assert ret == :deleted
ret = ElixirTalk.delete ctx[:pid], id
assert ret == :not_found
{:inserted, id} = ElixirTalk.put ctx[:pid], "another job"
{:reserved, ^id, _} = ElixirTalk.reserve ctx[:pid], 0
assert ElixirTalk.delete(ctx[:pid], id) == :deleted
end
test "with large body smaller than 2**16", ctx do
body = String.duplicate("{msg: \"hello world\"}", 500)
{:inserted, id} = ElixirTalk.put ctx[:pid], body
assert is_integer(id)
{:reserved, ^id, ^body} = ElixirTalk.reserve ctx[:pid], 0
assert ElixirTalk.delete(ctx[:pid], id) == :deleted
end
test "with large body larger than 2**16", ctx do
body = String.duplicate("{msg: \"hello world\"}", 5000)
:job_too_big = ElixirTalk.put ctx[:pid], body
end
end