summaryrefslogtreecommitdiff
path: root/test/concurrent_limiter_test.exs
diff options
context:
space:
mode:
Diffstat (limited to 'test/concurrent_limiter_test.exs')
-rw-r--r--test/concurrent_limiter_test.exs53
1 files changed, 25 insertions, 28 deletions
diff --git a/test/concurrent_limiter_test.exs b/test/concurrent_limiter_test.exs
index e1d281e..090417e 100644
--- a/test/concurrent_limiter_test.exs
+++ b/test/concurrent_limiter_test.exs
@@ -1,42 +1,39 @@
+# ConcurrentLimiter: A concurrency limiter.
+# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
+# SPDX-License-Identifier: LGPL-3.0-only
+
defmodule ConcurrentLimiterTest do
use ExUnit.Case
doctest ConcurrentLimiter
- test "limiter ets is atomic" do
- name = "test1"
+ test "limiter is atomic" do
+ name = "test"
ConcurrentLimiter.new(name, 2, 2)
- atomic_test(name)
- end
-
- test "limiter atomics is atomic" do
- name = "test2"
- ConcurrentLimiter.new(name, 2, 2, backend: :atomics)
- atomic_test(name)
- end
-
- defp atomic_test(name) do
self = self()
- sleepy = fn sleep ->
- case ConcurrentLimiter.limit(name, fn ->
- send(self, :ok)
- Process.sleep(sleep)
- :ok
- end) do
- :ok -> :ok
- other -> send(self, other)
- end
- end
-
- spawn_link(fn -> sleepy.(500) end)
- spawn_link(fn -> sleepy.(500) end)
- spawn_link(fn -> sleepy.(500) end)
- spawn_link(fn -> sleepy.(500) end)
- spawn_link(fn -> sleepy.(500) end)
+ spawn_link(fn -> sleepy(name, 500) end)
+ spawn_link(fn -> sleepy(name, 500) end)
+ spawn_link(fn -> sleepy(name, 500) end)
+ spawn_link(fn -> sleepy(name, 500) end)
+ spawn_link(fn -> sleepy(name, 500) end)
assert_receive :ok, 2000
assert_receive :ok, 2000
assert_receive {:error, :overload}, 2000
assert_receive :ok, 2000
assert_receive :ok, 2000
end
+
+ defp sleepy(duration) do
+ result =
+ ConcurrentLimiter.limit(name, fn ->
+ send(self, :ok)
+ Process.sleep(sleep)
+ :ok
+ end)
+
+ case result do
+ :ok -> :ok
+ other -> send(self, other)
+ end
+ end
end