gen_reset_tracker_test.exs 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. defmodule GenReset.TrackerTest do
  2. use ExUnit.Case
  3. setup do
  4. GenServer.call(GenReset.Tracker, :reset)
  5. :ok
  6. end
  7. test "adding pids" do
  8. assert GenReset.Tracker.add(self()) == :ok
  9. assert GenReset.Tracker.pids == [self()]
  10. end
  11. test "removing existing pid" do
  12. assert GenReset.Tracker.add(self()) == :ok
  13. assert GenReset.Tracker.pids == [self()]
  14. assert GenReset.Tracker.remove(self()) == :ok
  15. assert GenReset.Tracker.pids == []
  16. end
  17. test "dead pid is automatically removed" do
  18. pid = Process.spawn(fn ->
  19. receive do
  20. _ -> :ok
  21. end
  22. end, [])
  23. GenReset.Tracker.add(pid)
  24. assert GenReset.Tracker.pids == [pid]
  25. Process.exit(pid, :kill)
  26. TimeHelper.wait_until(fn ->
  27. assert GenReset.Tracker.pids == []
  28. end)
  29. end
  30. end
  31. defmodule TimeHelper do
  32. def wait_until(fun), do: wait_until(500, fun)
  33. def wait_until(0, fun), do: fun.()
  34. def wait_until(timeout, fun) do
  35. try do
  36. fun.()
  37. rescue
  38. ExUnit.AssertionError ->
  39. :timer.sleep(10)
  40. wait_until(max(0, timeout - 10), fun)
  41. end
  42. end
  43. end