@@ -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,45 @@ 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+
220+ test_get_excludes_content_length_with_empty_body () ->
221+ URL = <<" http://localhost:8000/get" >>,
222+ EmptyBodies = [<<>>, [], [<<>>]],
223+ Options = [with_body ],
224+ lists :foreach (fun (Body ) ->
225+ {ok , 200 , _H , JsonBody } = hackney :get (URL , [], Body , Options ),
226+ Obj = jsone :decode (JsonBody , [{object_format , proplist }]),
227+ ReqHeaders = proplists :get_value (<<" headers" >>, Obj ),
228+ ? assertEqual (undefined , proplists :get_value (<<" Content-Type" >>, ReqHeaders )),
229+ ? assertEqual (undefined , proplists :get_value (<<" Content-Length" >>, ReqHeaders ))
230+ end , EmptyBodies ).
231+
189232test_frees_manager_ets_when_body_is_in_client () ->
190233 URL = <<" http://localhost:8000/get" >>,
191234 BeforeCount = ets :info (hackney_manager_refs , size ),
0 commit comments