| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- defmodule GenReset.TrackerTest do
- use ExUnit.Case
- setup do
- send(GenReset.Tracker, :"$gen_reset")
- :ok
- end
- test "adding pids" do
- assert GenReset.Tracker.add(self()) == :ok
- assert GenReset.Tracker.pids == [self()]
- end
- test "removing existing pid" do
- assert GenReset.Tracker.add(self()) == :ok
- assert GenReset.Tracker.pids == [self()]
- assert GenReset.Tracker.remove(self()) == :ok
- assert GenReset.Tracker.pids == []
- end
- test "dead pid is automatically removed" do
- pid = Process.spawn(fn ->
- receive do
- _ -> :ok
- end
- end, [])
- GenReset.Tracker.add(pid)
- assert GenReset.Tracker.pids == [pid]
- Process.exit(pid, :kill)
- TimeHelper.wait_until(fn ->
- assert GenReset.Tracker.pids == []
- end)
- end
- end
- defmodule TimeHelper do
- def wait_until(fun), do: wait_until(500, fun)
- def wait_until(0, fun), do: fun.()
- def wait_until(timeout, fun) do
- try do
- fun.()
- rescue
- ExUnit.AssertionError ->
- :timer.sleep(10)
- wait_until(max(0, timeout - 10), fun)
- end
- end
- end
|