Packages
wallaby
0.11.1
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/server.ex
defmodule Wallaby.Server do
use GenServer
def start_link(_args) do
GenServer.start_link(__MODULE__, [])
end
def get_base_url(server) do
GenServer.call(server, :get_base_url, :infinity)
end
def init(_) do
port = find_available_port
Port.open({:spawn, phantomjs_command(port)}, [:binary, :stream, :use_stdio, :exit_status])
{:ok, %{running: false, awaiting_url: [], base_url: "http://localhost:#{port}/"}}
end
def phantomjs_command(port) do
"#{script_path} #{phantomjs_path} --webdriver=#{port} #{args}"
end
defp find_available_port do
{:ok, listen} = :gen_tcp.listen(0, [])
{:ok, port} = :inet.port(listen)
:gen_tcp.close(listen)
port
end
defp script_path do
Path.absname("priv/run_phantom.sh", Application.app_dir(:wallaby))
end
defp phantomjs_path do
Wallaby.phantomjs_path
end
defp args do
Application.get_env(:wallaby, :phantomjs_args, "")
end
def handle_info({_port, {:data, output}}, %{running: false} = state) do
if output =~ "running on port" do
Enum.each state.awaiting_url, &GenServer.reply(&1, state.base_url)
{:noreply, %{state | running: true, awaiting_url: []}}
else
{:noreply, state}
end
end
def handle_info({_port, {:exit_status, status}}, state) do
{:stop, {:exit_status, status}, %{state | running: false}}
end
def handle_info(_msg, state) do
{:noreply, state}
end
def handle_call(:get_base_url, from, %{running: false} = state) do
awaiting_url = [from|state.awaiting_url]
{:noreply, %{state | awaiting_url: awaiting_url}}
end
def handle_call(:get_base_url, _from, state) do
{:reply, state.base_url, state}
end
end