diff --git a/response_test.go b/response_test.go index 47b7ad1..e8f27f0 100644 --- a/response_test.go +++ b/response_test.go @@ -32,13 +32,17 @@ func TestFromHTTPResponse(t *testing.T) { t.Error("esp.GetSrcResponse().Header == nil") } - if resp.GetStatue() != "200 OK" && resp.GetStatueCode() != 200 { + if resp.GetStatue() != "200 OK" || resp.GetStatueCode() != 200 { t.Error(" resp.GetStatue() != 200 OK") } if len(resp.GetHeader()["Content-Length"]) != 1 { t.Error("resp.GetHeader() is error ?") } + + if int64(len(resp.Content())) != resp.GetContentLength() { + t.Error("content len is not equal") + } } func TestResponseDeflate(t *testing.T) { diff --git a/session.go b/session.go index 00b8f7a..855d324 100644 --- a/session.go +++ b/session.go @@ -287,7 +287,7 @@ func (ses *Session) GetQuery() url.Values { return ses.Query } -// SetHeader 设置set Header的值 +// SetHeader 设置set Header的值, 必须符合规范 HaHa -> Haha 如果真要HaHa,只能这样 Ha-Ha func (ses *Session) SetHeader(header http.Header) { ses.Header = header } diff --git a/session_test.go b/session_test.go index c826b5f..6cd2e4a 100644 --- a/session_test.go +++ b/session_test.go @@ -466,8 +466,11 @@ func TestSession_SetQuery(t *testing.T) { if err != nil { t.Error(err) } - if gjson.Get(resp.Content(), "url").String() != "http://httpbin.org/get?query=a&query=b" { - t.Error("url", resp.Content()) + query := gjson.Get(resp.Content(), "args.query").Array() + for _, q := range query { + if !(q.String() == "a" || q.String() == "b") { + t.Error("query error, ", resp.Content()) + } } } diff --git a/workflow.go b/workflow.go index 416be26..8e71097 100644 --- a/workflow.go +++ b/workflow.go @@ -34,13 +34,13 @@ func (wf *Workflow) SwitchSession(ses *Session) { wf.session = ses } -// AddHeader 添加头信息 Get方法从Header参数上获取 +// AddHeader 添加头信息 Get方法从Header参数上获取 必须符合规范 HaHa -> Haha 如果真要HaHa,只能这样 Ha-Ha func (wf *Workflow) AddHeader(key, value string) *Workflow { wf.Header[key] = append(wf.Header[key], value) return wf } -// SetHeader 设置完全替换原有Header +// SetHeader 设置完全替换原有Header 必须符合规范 HaHa -> Haha 如果真要HaHa,只能这样 Ha-Ha func (wf *Workflow) SetHeader(header http.Header) *Workflow { wf.Header = make(http.Header) for k, HValues := range header { @@ -192,7 +192,7 @@ func (wf *Workflow) GetURLRawPath() string { // return wf // } -// SetURLRawPath 设置Pa晚上参数 +// SetURLRawPath 设置 参数 eg. /get = http:// hostname + /get func (wf *Workflow) SetURLRawPath(path string) *Workflow { wf.ParsedURL.Path = path return wf diff --git a/workflow_test.go b/workflow_test.go index d9492a3..a07a68a 100644 --- a/workflow_test.go +++ b/workflow_test.go @@ -1,6 +1,8 @@ package requests import ( + "net/http" + "net/url" "regexp" "testing" @@ -59,3 +61,145 @@ func TestWorkflow(t *testing.T) { }) } + +func TestWorkflow_SetHeader(t *testing.T) { + ses := NewSession() + wf := ses.Get("http://httpbin.org/headers") + var header http.Header + header = make(http.Header) + header["Eson"] = []string{"Bad"} + header["HaHa"] = []string{"xixi"} + wf.SetHeader(header) + + resp, err := wf.Execute() + if err == nil && gjson.Get(resp.Content(), "headers.Eson").String() != "Bad" { + t.Error("wf header error", resp.Content()) + } + + if err == nil && gjson.Get(resp.Content(), "headers.Haha").String() != "xixi" { + t.Error("wf header error", resp.Content()) + } + + // 输入不符合规范不 会自动转换 + if wf.GetHeader()["HaHa"][0] != "xixi" { + t.Error("Header 错误") + } + + if len(ses.GetHeader()) != 0 { + t.Error("session header should be zero") + } + + delete(header, "HaHa") + ses.SetHeader(header) + wf = ses.Get("http://httpbin.org/headers") + wf.AddHeader("Hello", "Hehe") + + resp, err = wf.Execute() + if err != nil || gjson.Get(resp.Content(), "headers.Eson").String() != "Bad" { + t.Error("wf header error", resp.Content()) + } + + if err != nil || gjson.Get(resp.Content(), "headers.Hello").String() != "Hehe" { + t.Error("wf header error", resp.Content()) + } + + if len(wf.GetHeader()) != 1 || wf.GetHeader()["Hello"][0] != "Hehe" { + t.Error("session header should be 1") + } + + cheader := wf.GetCombineHeader() + if len(cheader) != 2 || cheader["Eson"][0] != "Bad" { + t.Error("GetCombineHeader error") + } + + resp, err = wf.DelHeader("Hello").Execute() + if err != nil { + t.Error(err, resp.Content()) + } + + if gjson.Get(resp.Content(), "headers.Hello").Exists() { + t.Error(" wf.DelHeader error") + } +} + +func TestWorkflow_Cookies(t *testing.T) { + ses := NewSession() + u, err := url.Parse("http://httpbin.org") + if err != nil { + t.Error(err) + } + ses.SetCookies(u, []*http.Cookie{&http.Cookie{Name: "Request", Value: "Cookiejar"}}) + wf := ses.Get("http://httpbin.org/cookies") + wf.AddCookie(&http.Cookie{Name: "eson", Value: "Bad"}) + + resp, _ := wf.Execute() + if gjson.Get(resp.Content(), "cookies.Request").String() != "Cookiejar" { + t.Error(" wf.AddCookie error") + } + + if gjson.Get(resp.Content(), "cookies.eson").String() != "Bad" { + t.Error(" wf.AddCookie error") + } + + wf.DelCookie("eson") + resp, _ = wf.Execute() + if gjson.Get(resp.Content(), "cookies.Request").String() != "Cookiejar" { + t.Error(" wf.AddCookie error") + } + if gjson.Get(resp.Content(), "cookies.eson").Exists() { + t.Error(" wf.DelCookie error") + } + + wf.AddCookies([]*http.Cookie{&http.Cookie{Name: "A", Value: "AA"}, &http.Cookie{Name: "B", Value: "BB"}}) + + resp, _ = wf.Execute() + if gjson.Get(resp.Content(), "cookies.Request").String() != "Cookiejar" { + t.Error(" wf.AddCookie error") + } + if gjson.Get(resp.Content(), "cookies.A").String() != "AA" { + t.Error(" wf.AddCookies error") + } + + if gjson.Get(resp.Content(), "cookies.B").String() != "BB" { + t.Error(" wf.AddCookies error") + } + + wf.DelCookie(&http.Cookie{Name: "A", Value: "AA"}) + resp, _ = wf.Execute() + if gjson.Get(resp.Content(), "cookies.A").Exists() { + t.Error(" wf.AddCookies error") + } + + if gjson.Get(resp.Content(), "cookies.B").String() != "BB" { + t.Error(" wf.AddCookies error") + } +} + +func TestWorkflow_URL(t *testing.T) { + ses := NewSession() + wf := ses.Get("http://httpbin.org/") + u, err := url.Parse("http://httpbin.org/get") + if err != nil { + t.Error(err) + } + wf.SetParsedURL(u) + resp, _ := wf.Execute() + if gjson.Get(resp.Content(), "url").String() != "http://httpbin.org/get" { + t.Error("SetParsedURL ", resp.Content()) + } + + if wf.GetParsedURL().String() != "http://httpbin.org/get" { + t.Error("SetParsedURL ", resp.Content()) + } + + wf = ses.Get("http://httpbin.org/") + + resp, _ = wf.SetURLRawPath("/get").Execute() + if gjson.Get(resp.Content(), "url").String() != "http://httpbin.org/get" { + t.Error("SetParsedURL ", resp.Content()) + } + + if wf.GetURLRawPath() != "/get" { + t.Error("SetParsedURL ", resp.Content()) + } +}