diff --git a/lib/wayfarer/server/proxy.ex b/lib/wayfarer/server/proxy.ex index 788d7b8..32bfd74 100644 --- a/lib/wayfarer/server/proxy.ex +++ b/lib/wayfarer/server/proxy.ex @@ -244,10 +244,20 @@ defmodule Wayfarer.Server.Proxy do end end - defp handle_responses(conn, [{:done, req} | _], mint, req) do - {:ok, Conn.halt(conn), mint} + # If the connection is done without sending any body content, then we need to + # send the respond and halt the conn. + defp handle_responses(conn, [{:done, req} | _], mint, req) when conn.state == :unset do + conn = + conn + |> Conn.send_resp(conn.status, "") + |> Conn.halt() + + {:ok, conn, mint} end + defp handle_responses(conn, [{:done, req} | _], mint, req) when conn.state == :chunked, + do: {:ok, Conn.halt(conn), mint} + defp handle_responses(conn, [{:error, req, reason} | _], _mint, req), do: {:error, conn, reason} defp send_request(conn, mint) do diff --git a/test/wayfarer/server/proxy_test.exs b/test/wayfarer/server/proxy_test.exs index 853b5a0..4a6b787 100644 --- a/test/wayfarer/server/proxy_test.exs +++ b/test/wayfarer/server/proxy_test.exs @@ -55,7 +55,7 @@ defmodule Wayfarer.Server.ProxyTest do {:ok, mint, req} end) |> stub(:stream, fn mint, :ignore -> {:ok, mint, responses} end) - |> stub(:stream, fn mint, _ -> {:ok, mint, [{:done, req}]} end) + |> stub(:stream, fn mint, _ -> {:ok, mint, [{:status, req, 200}, {:done, req}]} end) end describe "request/2" do @@ -79,7 +79,7 @@ defmodule Wayfarer.Server.ProxyTest do {:ok, mint, req} end) |> expect(:stream, fn mint, :ignore -> - {:ok, mint, [{:done, req}]} + {:ok, mint, [{:status, req, 200}, {:done, req}]} end) assert conn = Proxy.request(conn, target)