-
Notifications
You must be signed in to change notification settings - Fork 120
Open
Description
{{:badmatch, {:error, :eaddrinuse}},
[
{Bypass.Instance, :do_up, 2, [file: 'lib/bypass/instance.ex', line: 322]},
{Bypass.Instance, :init, 1, [file: 'lib/bypass/instance.ex', line: 34]},
{:gen_server, :init_it, 2, [file: 'gen_server.erl', line: 374]},
{:gen_server, :init_it, 6, [file: 'gen_server.erl', line: 342]},
{:proc_lib, :init_p_do_apply, 3, [file: 'proc_lib.erl', line: 249]}
]}
The race condition could be reproduced with the following script
defmodule BypassReproTest.Case do
use ExUnit.Case, async: true
test "reproduce bypass" do
:ok = :hackney_pool.start_pool(:first_pool, timeout: 15000, max_connections: 100)
Application.put_env(:bypass, :test_framework, :espec)
1..10_000
|> Task.async_stream(
fn i ->
bypass = Bypass.open()
Bypass.stub(bypass, "GET", "/ping", fn conn ->
Plug.Conn.resp(conn, 200, "pong")
end)
response =
HTTPoison.get!("http://localhost:#{bypass.port}/ping", [], hackney: [pool: :bypass])
assert response.status_code == 200
Bypass.verify_expectations!(bypass)
end,
ordered: false,
max_concurrency: 50,
timeout: 50000
)
|> Stream.run()
end
end
The Code.ensure_loaded should be commented out as well.
if Code.ensure_loaded?(ESpec) do
defp verify_expectations!(:espec, bypass) do
do_verify_expectations(bypass.pid, ESpec.AssertionError)
end
end
Metadata
Metadata
Assignees
Labels
No labels