From 01cd0103e41b8462306272d152252a7ba749c3aa Mon Sep 17 00:00:00 2001 From: CharLemAznable <545541819@qq.com> Date: Wed, 6 Nov 2024 22:09:28 +0800 Subject: [PATCH] fix(net/gclient): Client Clone with allocated header/cookie (#3902) --- net/gclient/gclient.go | 16 ++++++-------- net/gclient/gclient_z_unit_test.go | 34 ++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 10 deletions(-) diff --git a/net/gclient/gclient.go b/net/gclient/gclient.go index 44b99e2a3..f15880843 100644 --- a/net/gclient/gclient.go +++ b/net/gclient/gclient.go @@ -84,17 +84,13 @@ func New() *Client { func (c *Client) Clone() *Client { newClient := New() *newClient = *c - if len(c.header) > 0 { - newClient.header = make(map[string]string) - for k, v := range c.header { - newClient.header[k] = v - } + newClient.header = make(map[string]string, len(c.header)) + for k, v := range c.header { + newClient.header[k] = v } - if len(c.cookies) > 0 { - newClient.cookies = make(map[string]string) - for k, v := range c.cookies { - newClient.cookies[k] = v - } + newClient.cookies = make(map[string]string, len(c.cookies)) + for k, v := range c.cookies { + newClient.cookies[k] = v } return newClient } diff --git a/net/gclient/gclient_z_unit_test.go b/net/gclient/gclient_z_unit_test.go index 64c48dd48..d6e8c6f2f 100644 --- a/net/gclient/gclient_z_unit_test.go +++ b/net/gclient/gclient_z_unit_test.go @@ -177,6 +177,40 @@ func Test_Client_Chain_Header(t *testing.T) { t.Assert(c.HeaderRaw("test1: 1234567890\ntest2: abcdefg").GetContent(ctx, "/header1"), "1234567890") t.Assert(c.HeaderRaw("test1: 1234567890\ntest2: abcdefg").GetContent(ctx, "/header2"), "abcdefg") }) + gtest.C(t, func(t *gtest.T) { + c := g.Client() + c.SetPrefix(fmt.Sprintf("http://127.0.0.1:%d", s.GetListenedPort())) + + t.Assert(c.GetContent(ctx, "/header1"), "") + + copyWithHeader := c.Header(g.MapStrStr{"test1": "1234567890"}) + t.Assert(copyWithHeader.GetContent(ctx, "/header1"), "1234567890") + + t.Assert(c.GetContent(ctx, "/header1"), "") + }) +} + +func Test_Client_Chain_Cookie(t *testing.T) { + s := g.Server(guid.S()) + s.BindHandler("/cookie", func(r *ghttp.Request) { + r.Response.Write(r.Cookie.Get("test", "def")) + }) + s.SetDumpRouterMap(false) + s.Start() + defer s.Shutdown() + + time.Sleep(100 * time.Millisecond) + gtest.C(t, func(t *gtest.T) { + c := g.Client() + c.SetPrefix(fmt.Sprintf("http://127.0.0.1:%d", s.GetListenedPort())) + + t.Assert(c.GetContent(ctx, "/cookie"), "def") + + copyWithCookie := c.Cookie(g.MapStrStr{"test": "1234567890"}) + t.Assert(copyWithCookie.GetContent(ctx, "/cookie"), "1234567890") + + t.Assert(c.GetContent(ctx, "/cookie"), "def") + }) } func Test_Client_Chain_Context(t *testing.T) {