Packages
wallaby
0.22.0
0.31.0
0.30.12
0.30.11
0.30.10
0.30.9
0.30.8
0.30.7
0.30.6
0.30.5
0.30.4
0.30.3
0.30.2
0.30.1
0.30.0
0.29.1
0.29.0
0.28.1
0.28.0
0.27.0
0.26.2
0.26.1
0.26.0
0.25.1
0.25.0
0.24.1
0.24.0
0.23.0
0.22.0
0.21.0
0.20.0
0.19.2
0.19.1
0.19.0
0.18.1
0.18.0
0.17.0
0.16.1
0.16.0
0.15.0
0.14.0
0.13.0
0.12.0
0.11.1
0.11.0
0.10.0
0.9.0
0.8.0
0.7.0
0.6.0
0.5.0
0.4.0
0.3.1
0.3.0
0.2.0
0.1.0
0.0.1
Concurrent feature tests for elixir
Current section
Files
Jump to
Current section
Files
lib/wallaby/session_store.ex
defmodule Wallaby.SessionStore do
@moduledoc false
use GenServer
alias Wallaby.Experimental.Selenium.WebdriverClient
def start_link, do: GenServer.start_link(__MODULE__, :ok, name: __MODULE__)
def monitor(session), do: GenServer.call(__MODULE__, {:monitor, session}, 10_000)
def demonitor(session), do: GenServer.call(__MODULE__, {:demonitor, session})
def init(:ok) do
Process.flag(:trap_exit, true)
{:ok, %{refs: %{}}}
end
def handle_call({:monitor, session}, {pid, _ref}, %{refs: refs} = state) do
ref = Process.monitor(pid)
refs = Map.put(refs, ref, session)
{:reply, :ok, %{state | refs: refs}}
end
def handle_call({:demonitor, session}, _from, %{refs: refs} = state) do
case Enum.find(refs, fn({_, value}) -> value.id == session.id end) do
{ref, _} ->
{_, refs} = Map.pop(refs, ref)
true = Process.demonitor(ref)
{:reply, :ok, %{state | refs: refs}}
nil ->
{:reply, :ok, state}
end
end
def handle_info({:DOWN, ref, :process, _pid, _reason}, %{refs: refs} = state) do
{session, refs} = Map.pop(refs, ref)
WebdriverClient.delete_session(session)
{:noreply, %{state | refs: refs}}
end
def terminate(_reason, %{refs: refs}) do
Enum.each(refs, fn({_ref, session}) -> close_session(session) end)
end
defp close_session(session) do
WebdriverClient.delete_session(session)
end
end