fix(net/gclient): Client Clone with allocated header/cookie (#3902)

This commit is contained in:
CharLemAznable
2024-11-06 22:09:28 +08:00
committed by GitHub
parent d1872f17f7
commit 01cd0103e4
2 changed files with 40 additions and 10 deletions

View File

@ -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
}

View File

@ -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) {