@@ -978,3 +978,62 @@ func TestClient_StandardClient(t *testing.T) {
978978 t .Fatalf ("expected %v, got %v" , client , v )
979979 }
980980}
981+
982+ func TestClient_RedirectWithBody (t * testing.T ) {
983+ var redirects int32
984+ // Mock server which always responds 200.
985+ ts := httptest .NewServer (http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
986+ switch r .RequestURI {
987+ case "/redirect" :
988+ w .Header ().Set ("Location" , "/target" )
989+ w .WriteHeader (http .StatusTemporaryRedirect )
990+ case "/target" :
991+ atomic .AddInt32 (& redirects , 1 )
992+ w .WriteHeader (http .StatusCreated )
993+ default :
994+ t .Fatalf ("bad uri: %s" , r .RequestURI )
995+ }
996+ }))
997+ defer ts .Close ()
998+
999+ client := NewClient ()
1000+ client .RequestLogHook = func (logger Logger , req * http.Request , retryNumber int ) {
1001+ if _ , err := req .GetBody (); err != nil {
1002+ t .Fatalf ("unexpected error with GetBody: %v" , err )
1003+ }
1004+ }
1005+ // create a request with a body
1006+ req , err := NewRequest (http .MethodPost , ts .URL + "/redirect" , strings .NewReader (`{"foo":"bar"}` ))
1007+ if err != nil {
1008+ t .Fatalf ("err: %v" , err )
1009+ }
1010+
1011+ resp , err := client .Do (req )
1012+ if err != nil {
1013+ t .Fatalf ("err: %v" , err )
1014+ }
1015+ resp .Body .Close ()
1016+
1017+ if resp .StatusCode != http .StatusCreated {
1018+ t .Fatalf ("expected status code 201, got: %d" , resp .StatusCode )
1019+ }
1020+
1021+ // now one without a body
1022+ if err := req .SetBody (nil ); err != nil {
1023+ t .Fatalf ("err: %v" , err )
1024+ }
1025+
1026+ resp , err = client .Do (req )
1027+ if err != nil {
1028+ t .Fatalf ("err: %v" , err )
1029+ }
1030+ resp .Body .Close ()
1031+
1032+ if resp .StatusCode != http .StatusCreated {
1033+ t .Fatalf ("expected status code 201, got: %d" , resp .StatusCode )
1034+ }
1035+
1036+ if atomic .LoadInt32 (& redirects ) != 2 {
1037+ t .Fatalf ("Expected the client to be redirected 2 times, got: %d" , atomic .LoadInt32 (& redirects ))
1038+ }
1039+ }
0 commit comments