aboutsummaryrefslogtreecommitdiff
path: root/client_test.go
diff options
context:
space:
mode:
authorGravatar Scott Kidder <scott@kidder.io> 2023-10-30 11:08:51 -0700
committerGravatar GitHub <noreply@github.com> 2023-10-30 19:08:51 +0100
commit42bd7bb7e27a1c529b908892f9ce73f52cfd2292 (patch)
treeb4592f5de13b8d2ae08faf8a55ec792f08dd99fc /client_test.go
parentBUGFIX: HostClient.DialDualStack not work when using DoDeadline (#1634) (diff)
downloadfasthttp-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.go86
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)
+ }
+ })
+ }
+}