@@ -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_headers_with_body /0 ,
24+ fun test_post_includes_content_headers_with_empty_body /0 ,
25+ fun test_get_includes_content_headers_with_body /0 ,
26+ fun test_get_excludes_content_headers_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,48 @@ 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_headers_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+ ? assertEqual (<<" application/octet-stream" >>, proplists :get_value (<<" Content-Type" >>, ReqHeaders )).
202+
203+ test_post_includes_content_headers_with_empty_body () ->
204+ URL = <<" http://localhost:8000/post" >>,
205+ Body = <<>>,
206+ Options = [with_body ],
207+ {ok , 200 , _H , JsonBody } = hackney :post (URL , [], Body , Options ),
208+ Obj = jsone :decode (JsonBody , [{object_format , proplist }]),
209+ ReqHeaders = proplists :get_value (<<" headers" >>, Obj ),
210+ ? assertEqual (<<" 0" >>, proplists :get_value (<<" Content-Length" >>, ReqHeaders )),
211+ ? assertEqual (<<" application/octet-stream" >>, proplists :get_value (<<" Content-Type" >>, ReqHeaders )).
212+
213+ test_get_includes_content_headers_with_body () ->
214+ URL = <<" http://localhost:8000/get" >>,
215+ Body = <<" {\" test\" : \" ok\" }" >>,
216+ Options = [with_body ],
217+ {ok , 200 , _H , JsonBody } = hackney :get (URL , [], Body , Options ),
218+ Obj = jsone :decode (JsonBody , [{object_format , proplist }]),
219+ ReqHeaders = proplists :get_value (<<" headers" >>, Obj ),
220+ ? assertEqual (<<" 15" >>, proplists :get_value (<<" Content-Length" >>, ReqHeaders )),
221+ ? assertEqual (<<" application/octet-stream" >>, proplists :get_value (<<" Content-Type" >>, ReqHeaders )).
222+
223+ test_get_excludes_content_headers_with_empty_body () ->
224+ URL = <<" http://localhost:8000/get" >>,
225+ EmptyBodies = [<<>>, [], [<<>>]],
226+ Options = [with_body ],
227+ lists :foreach (fun (Body ) ->
228+ {ok , 200 , _H , JsonBody } = hackney :get (URL , [], Body , Options ),
229+ Obj = jsone :decode (JsonBody , [{object_format , proplist }]),
230+ ReqHeaders = proplists :get_value (<<" headers" >>, Obj ),
231+ ? assertEqual (undefined , proplists :get_value (<<" Content-Type" >>, ReqHeaders )),
232+ ? assertEqual (undefined , proplists :get_value (<<" Content-Length" >>, ReqHeaders ))
233+ end , EmptyBodies ).
234+
189235test_frees_manager_ets_when_body_is_in_client () ->
190236 URL = <<" http://localhost:8000/get" >>,
191237 BeforeCount = ets :info (hackney_manager_refs , size ),
0 commit comments