@@ -20,6 +20,10 @@ all_tests() ->
2020 % fun relative_redirect_request_no_follow/0,
2121 fun relative_redirect_request_follow /0 ,
2222 fun test_duplicate_headers /0 ,
23+ fun test_post_includes_content_length_with_body /0 ,
24+ fun test_post_includes_content_length_with_empty_body /0 ,
25+ fun test_get_includes_content_length_with_body /0 ,
26+ fun test_get_excludes_content_length_with_empty_body /0 ,
2327 fun test_custom_host_headers /0 ,
2428 fun async_request /0 ,
2529 fun async_head_request /0 ,
@@ -186,6 +190,59 @@ test_custom_host_headers() ->
186190 ReqHeaders = proplists :get_value (<<" headers" >>, Obj ),
187191 ? assertEqual (<<" myhost.com" >>, proplists :get_value (<<" Host" >>, ReqHeaders )).
188192
193+ test_post_includes_content_length_with_body () ->
194+ URL = <<" http://localhost:8000/post" >>,
195+ Body = <<" {\" test\" : \" ok\" }" >>,
196+ Options = [with_body ],
197+ {ok , 200 , _H , JsonBody } = hackney :post (URL , [], Body , Options ),
198+ Obj = jsone :decode (JsonBody , [{object_format , proplist }]),
199+ ReqHeaders = proplists :get_value (<<" headers" >>, Obj ),
200+ ? assertEqual (<<" 15" >>, proplists :get_value (<<" Content-Length" >>, ReqHeaders )).
201+
202+ test_post_includes_content_length_with_empty_body () ->
203+ URL = <<" http://localhost:8000/post" >>,
204+ Body = <<>>,
205+ Options = [with_body ],
206+ {ok , 200 , _H , JsonBody } = hackney :post (URL , [], Body , Options ),
207+ Obj = jsone :decode (JsonBody , [{object_format , proplist }]),
208+ ReqHeaders = proplists :get_value (<<" headers" >>, Obj ),
209+ ? assertEqual (<<" 0" >>, proplists :get_value (<<" Content-Length" >>, ReqHeaders )).
210+
211+ test_get_includes_content_length_with_body () ->
212+ URL = <<" http://localhost:8000/post" >>,
213+ Body = <<" {\" test\" : \" ok\" }" >>,
214+ Options = [with_body ],
215+ {ok , 200 , _H , JsonBody } = hackney :post (URL , [], Body , Options ),
216+ Obj = jsone :decode (JsonBody , [{object_format , proplist }]),
217+ ReqHeaders = proplists :get_value (<<" headers" >>, Obj ),
218+ ? assertEqual (<<" 15" >>, proplists :get_value (<<" Content-Length" >>, ReqHeaders )).
219+ % % URL = <<"http://localhost:8000/get">>,
220+ % % TestBodies = [<<>>, [], [<<>>]],
221+ % % Options = [with_body],
222+ % % lists:foreach(fun(Body) ->
223+ % % {ok, 200, _H, JsonBody} = hackney:get(URL, [], Body, Options),
224+ % % Obj = jsone:decode(JsonBody, [{object_format, proplist}]),
225+ % % ReqHeaders = proplists:get_value(<<"headers">>, Obj),
226+
227+ % % %% For GET requests with empty bodies, these headers should not be present
228+ % % ?assertEqual(undefined, proplists:get_value(<<"Content-Type">>, ReqHeaders)),
229+ % % ?assertEqual(undefined, proplists:get_value(<<"Content-Length">>, ReqHeaders))
230+ % % end, TestBodies).
231+
232+ test_get_excludes_content_length_with_empty_body () ->
233+ URL = <<" http://localhost:8000/get" >>,
234+ EmptyBodies = [<<>>, [], [<<>>]],
235+ Options = [with_body ],
236+ lists :foreach (fun (Body ) ->
237+ {ok , 200 , _H , JsonBody } = hackney :get (URL , [], Body , Options ),
238+ Obj = jsone :decode (JsonBody , [{object_format , proplist }]),
239+ ReqHeaders = proplists :get_value (<<" headers" >>, Obj ),
240+
241+ % % For GET requests with empty bodies, these headers should not be present
242+ ? assertEqual (undefined , proplists :get_value (<<" Content-Type" >>, ReqHeaders )),
243+ ? assertEqual (undefined , proplists :get_value (<<" Content-Length" >>, ReqHeaders ))
244+ end , EmptyBodies ).
245+
189246test_frees_manager_ets_when_body_is_in_client () ->
190247 URL = <<" http://localhost:8000/get" >>,
191248 BeforeCount = ets :info (hackney_manager_refs , size ),
0 commit comments