Skip to content

Commit 4cc6119

Browse files
committed
fix: enhance response handling in Mint adapter
fixes #450 Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
1 parent dd8b206 commit 4cc6119

File tree

2 files changed

+58
-0
lines changed

2 files changed

+58
-0
lines changed

lib/tesla/adapter/mint.ex

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -350,6 +350,9 @@ if Code.ensure_loaded?(Mint.HTTP) do
350350

351351
{:done, ^ref}, acc ->
352352
Map.put(acc, :done, true)
353+
354+
{:push_promise, ^ref, _promised_ref, _headers}, acc ->
355+
acc
353356
end)
354357
end
355358
end

test/tesla/adapter/mint_test.exs

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -305,4 +305,59 @@ defmodule Tesla.Adapter.MintTest do
305305
read_body(conn, ref, opts, acc <> part)
306306
end
307307
end
308+
309+
describe "issue #450 - adapter doesn't crash on unsupported response types" do
310+
test "handles connection errors gracefully" do
311+
uri = URI.parse(@http)
312+
313+
request = %Env{
314+
method: :get,
315+
url: "http://#{uri.host}:1234"
316+
}
317+
318+
assert {:error, _reason} = call(request)
319+
end
320+
321+
test "handles malformed requests without crashes" do
322+
request = %Env{
323+
method: :get,
324+
url: "#{@http}/status/500"
325+
}
326+
327+
assert {:ok, %Env{} = response} = call(request)
328+
assert response.status == 500
329+
end
330+
331+
test "handles timeout scenarios without crashes" do
332+
request = %Env{
333+
method: :get,
334+
url: "#{@http}/delay/2"
335+
}
336+
337+
assert {:error, :timeout} = call(request, timeout: 100)
338+
end
339+
340+
test "handles connection drops during streaming" do
341+
request = %Env{
342+
method: :get,
343+
url: "#{@http}/stream-bytes/1000"
344+
}
345+
346+
assert {:ok, %Env{} = response} = call(request, body_as: :stream)
347+
assert response.status == 200
348+
349+
data = Enum.join(response.body)
350+
assert byte_size(data) > 0
351+
end
352+
353+
test "handles HTTP/2 connections when available" do
354+
request = %Env{
355+
method: :get,
356+
url: "#{@http}/get"
357+
}
358+
359+
assert {:ok, %Env{} = response} = call(request)
360+
assert response.status == 200
361+
end
362+
end
308363
end

0 commit comments

Comments
 (0)