diff options
Diffstat (limited to 'test/limiter_test.exs')
-rw-r--r-- | test/limiter_test.exs | 36 |
1 files changed, 9 insertions, 27 deletions
diff --git a/test/limiter_test.exs b/test/limiter_test.exs index c60db9e..1b81ead 100644 --- a/test/limiter_test.exs +++ b/test/limiter_test.exs @@ -2,38 +2,20 @@ defmodule LimiterTest do use ExUnit.Case doctest Limiter - defp test_ets(name, max, sleep, fun) do - count = :ets.update_counter(:limiter_test, name, {2, 1}, {name, 0}) - - if count <= max do - fun.({:ok, count}) - Process.sleep(sleep) - else - fun.(:fail) - end - after - :ets.update_counter(:limiter_test, name, {2, -1}, {name, 1}) + test "limiter ets is atomic" do + name = "test1" + Limiter.new(name, 2, 2) + atomic_test(name) end - test "limits with ets" do - :ets.new(:limiter_test, [:public, :named_table]) - ets = "test" - test = self() - spawn_link(fn -> test_ets(ets, 2, 500, fn result -> send(test, result) end) end) - spawn_link(fn -> test_ets(ets, 2, 750, fn result -> send(test, result) end) end) - spawn_link(fn -> test_ets(ets, 2, 500, fn result -> send(test, result) end) end) - assert_receive {:ok, 1} - assert_receive {:ok, 2} - assert_receive :fail - Process.sleep(500) - spawn_link(fn -> test_ets(ets, 2, 500, fn result -> send(test, result) end) end) - assert_receive {:ok, 2} + test "limiter atomics is atomic" do + name = "test2" + Limiter.new(name, 2, 2, backend: :atomics) + atomic_test(name) end - test "limiter" do - name = "test1" + defp atomic_test(name) do self = self() - Limiter.set(name, 2, 2) sleepy = fn sleep -> case Limiter.limit(name, fn -> |