diff options
author | Scott Kidder <scott@kidder.io> | 2023-10-30 11:08:51 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-10-30 19:08:51 +0100 |
commit | 42bd7bb7e27a1c529b908892f9ce73f52cfd2292 (patch) | |
tree | b4592f5de13b8d2ae08faf8a55ec792f08dd99fc /client_test.go | |
parent | BUGFIX: HostClient.DialDualStack not work when using DoDeadline (#1634) (diff) | |
download | fasthttp-42bd7bb7e27a1c529b908892f9ce73f52cfd2292.tar.gz fasthttp-42bd7bb7e27a1c529b908892f9ce73f52cfd2292.tar.bz2 fasthttp-42bd7bb7e27a1c529b908892f9ce73f52cfd2292.zip |
Allow redirect URI path to not be normalized. (#1638)
* Allow redirect URI path to not be normalized.
* Introduce DisableRedirectPathNormalizing field to Request
* Use field name as start of comment.
Co-authored-by: Erik Dubbelboer <erik@dubbelboer.com>
---------
Co-authored-by: Erik Dubbelboer <erik@dubbelboer.com>
Diffstat (limited to 'client_test.go')
-rw-r--r-- | client_test.go | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/client_test.go b/client_test.go index 9ff3bda..e6a1358 100644 --- a/client_test.go +++ b/client_test.go @@ -1589,6 +1589,10 @@ func TestClientFollowRedirects(t *testing.T) { u := ctx.URI() u.Update("/bar") ctx.Redirect(u.String(), StatusFound) + case "/abc/*/123": + u := ctx.URI() + u.Update("/xyz/*/456") + ctx.Redirect(u.String(), StatusFound) default: ctx.Success("text/plain", ctx.Path()) } @@ -1710,6 +1714,31 @@ func TestClientFollowRedirects(t *testing.T) { ReleaseResponse(resp) } + for i := 0; i < 10; i++ { + req := AcquireRequest() + resp := AcquireResponse() + + req.SetRequestURI("http://xxx/abc/*/123") + req.URI().DisablePathNormalizing = true + req.DisableRedirectPathNormalizing = true + + err := c.DoRedirects(req, resp, 16) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + + if statusCode := resp.StatusCode(); statusCode != StatusOK { + t.Fatalf("unexpected status code: %d", statusCode) + } + + if body := string(resp.Body()); body != "/xyz/*/456" { + t.Fatalf("unexpected response %q. Expecting %q", body, "/xyz/*/456") + } + + ReleaseRequest(req) + ReleaseResponse(resp) + } + req := AcquireRequest() resp := AcquireResponse() @@ -3306,3 +3335,60 @@ func TestClientTransportEx(t *testing.T) { t.Errorf("round trip count should be: %v", roundTripCount) } } + +func Test_getRedirectURL(t *testing.T) { + type args struct { + baseURL string + location []byte + disablePathNormalizing bool + } + tests := []struct { + name string + args args + want string + }{ + { + name: "Path normalizing enabled, no special characters in path", + args: args{ + baseURL: "http://foo.example.com/abc", + location: []byte("http://bar.example.com/def"), + disablePathNormalizing: false, + }, + want: "http://bar.example.com/def", + }, + { + name: "Path normalizing enabled, special characters in path", + args: args{ + baseURL: "http://foo.example.com/abc/*/def", + location: []byte("http://bar.example.com/123/*/456"), + disablePathNormalizing: false, + }, + want: "http://bar.example.com/123/%2A/456", + }, + { + name: "Path normalizing disabled, no special characters in path", + args: args{ + baseURL: "http://foo.example.com/abc", + location: []byte("http://bar.example.com/def"), + disablePathNormalizing: true, + }, + want: "http://bar.example.com/def", + }, + { + name: "Path normalizing disabled, special characters in path", + args: args{ + baseURL: "http://foo.example.com/abc/*/def", + location: []byte("http://bar.example.com/123/*/456"), + disablePathNormalizing: true, + }, + want: "http://bar.example.com/123/*/456", + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := getRedirectURL(tt.args.baseURL, tt.args.location, tt.args.disablePathNormalizing); got != tt.want { + t.Errorf("getRedirectURL() = %v, want %v", got, tt.want) + } + }) + } +} |