requests/session_test.go

383 lines
8.4 KiB
Go
Raw Normal View History

2018-10-17 06:25:17 +00:00
package requests
import (
2018-10-17 10:38:04 +00:00
"log"
2018-10-17 06:25:17 +00:00
"net/http"
"regexp"
"testing"
)
2018-10-17 10:38:04 +00:00
func init() {
log.SetFlags(log.Lshortfile | log.LstdFlags)
}
2018-10-17 06:25:17 +00:00
func TestNewSession(t *testing.T) {
ses := NewSession()
if ses == nil {
t.Error("session create fail, value is nil")
}
}
func TestSession_Get(t *testing.T) {
type fields struct {
client *http.Client
}
type args struct {
url string
}
tests := []struct {
name string
fields fields
args args
}{
{
name: "Get test",
fields: fields{client: &http.Client{}},
args: args{url: "http://httpbin.org/get"},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
ses := &Session{
client: tt.fields.client,
}
2018-10-17 10:38:04 +00:00
resp, err := ses.Get(tt.args.url).Execute()
2018-10-17 06:25:17 +00:00
if err != nil {
t.Error(err)
}
if len(resp.Content()) <= 200 {
t.Error(resp.Content())
}
})
}
}
func TestSession_Post(t *testing.T) {
type args struct {
2018-10-17 10:38:04 +00:00
params []interface{}
2018-10-17 06:25:17 +00:00
}
2018-10-17 10:38:04 +00:00
2018-10-17 06:25:17 +00:00
tests := []struct {
2018-10-17 10:38:04 +00:00
name string
args args
want *regexp.Regexp
2018-10-17 06:25:17 +00:00
}{
{
2018-10-17 10:38:04 +00:00
name: "Post test",
args: args{params: nil},
want: regexp.MustCompile(`"form": \{\}`),
2018-10-17 06:25:17 +00:00
},
{
2018-10-17 10:38:04 +00:00
name: "Post data",
args: args{params: []interface{}{[]byte("a=1&b=2")}},
want: regexp.MustCompile(`"form": \{[^"]+"a": "1"[^"]+"b": "2"[^\}]+\}`),
2018-10-17 06:25:17 +00:00
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
2018-10-17 10:38:04 +00:00
ses := NewSession()
2018-11-08 06:39:23 +00:00
got, err := ses.Post("http://httpbin.org/post").SetBody(tt.args.params...).Execute()
2018-10-17 10:38:04 +00:00
if err != nil {
t.Errorf("Metchod error = %v", err)
2018-10-17 06:25:17 +00:00
return
}
if tt.want.MatchString(got.DContent) == false {
2018-10-17 10:38:04 +00:00
t.Errorf("Metchod = %v, want %v", got, tt.want)
2018-10-17 06:25:17 +00:00
}
2018-10-17 10:38:04 +00:00
2018-10-17 06:25:17 +00:00
})
}
}
func TestSession_Setparams(t *testing.T) {
type fields struct {
client *http.Client
2018-10-23 09:08:50 +00:00
params *Body
2018-10-17 06:25:17 +00:00
}
type args struct {
params []interface{}
}
tests := []struct {
name string
fields fields
args args
want *regexp.Regexp
wantErr bool
}{
{
2018-10-17 10:38:04 +00:00
name: "test Setparams",
args: args{params: []interface{}{map[string]string{"a": "1", "b": "2"}}},
want: regexp.MustCompile(`"form": \{[^"]+"a": "1"[^"]+"b": "2"[^\}]+\}`),
2018-10-17 06:25:17 +00:00
},
{
2018-10-17 10:38:04 +00:00
name: "test json",
args: args{params: []interface{}{`{"a":"1","b":"2"}`, TypeJSON}},
want: regexp.MustCompile(`"json": \{[^"]+"a": "1"[^"]+"b": "2"[^\}]+\}`),
2018-10-17 06:25:17 +00:00
},
{
name: "test xml",
2018-10-23 09:08:50 +00:00
fields: fields{client: &http.Client{}, params: &Body{}},
2018-10-17 06:25:17 +00:00
args: args{params: []interface{}{`<request><parameters><password>test</password></parameters></request>`, TypeXML}},
want: regexp.MustCompile(`"data": "<request><parameters><password>test</password></parameters></request>"`),
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
ses := NewSession()
2018-11-08 06:39:23 +00:00
got, err := ses.Post("http://httpbin.org/post").SetBody(tt.args.params...).Execute()
2018-10-17 06:25:17 +00:00
if (err != nil) != tt.wantErr {
2018-10-17 10:38:04 +00:00
t.Errorf("Metchod error = %v, wantErr %v", err, tt.wantErr)
2018-10-17 06:25:17 +00:00
return
}
if tt.want.MatchString(got.DContent) == false {
2018-10-17 10:38:04 +00:00
t.Errorf("Metchod = %v, want %v", got, tt.want)
2018-10-17 06:25:17 +00:00
}
})
}
}
func TestSession_PostUploadFile(t *testing.T) {
type args struct {
params interface{}
}
tests := []struct {
name string
args args
want *regexp.Regexp
}{
{
name: "test post uploadfile glob",
args: args{params: "tests/*.js"},
want: regexp.MustCompile(`"file0": "data:application/octet-stream;base64`),
},
{
name: "test post uploadfile only one file",
args: args{params: "tests/json.file"},
want: regexp.MustCompile(`"file0": "json.file.+jsonjsonjsonjson"`),
},
{
name: "test post uploadfile key values",
args: args{params: map[string]string{"a": "32"}},
want: regexp.MustCompile(`"a": "32"`),
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
ses := NewSession()
2018-11-08 06:39:23 +00:00
got, err := ses.Post("http://httpbin.org/post").SetBody(tt.args.params, TypeFormData).Execute()
2018-10-17 06:25:17 +00:00
if err != nil {
2018-10-17 10:38:04 +00:00
t.Errorf("Metchod error = %v", err)
2018-10-17 06:25:17 +00:00
return
}
if tt.want.MatchString(got.DContent) == false {
2018-10-17 10:38:04 +00:00
t.Errorf("Metchod = %v, want %v", got, tt.want)
2018-10-17 06:25:17 +00:00
}
})
}
}
func TestSession_Put(t *testing.T) {
type args struct {
params interface{}
}
tests := []struct {
name string
args args
want *regexp.Regexp
}{
{
name: "test post uploadfile glob",
args: args{params: "tests/*.js"},
want: regexp.MustCompile(`"file0": "data:application/octet-stream;base64`),
},
{
name: "test post uploadfile only one file",
args: args{params: "tests/json.file"},
want: regexp.MustCompile(`"file0": "json.file.+jsonjsonjsonjson"`),
},
{
name: "test post uploadfile key values",
args: args{params: map[string]string{"a": "32"}},
want: regexp.MustCompile(`"a": "32"`),
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
ses := NewSession()
2018-11-08 06:39:23 +00:00
got, err := ses.Put("http://httpbin.org/put").SetBody(tt.args.params, TypeFormData).Execute()
2018-10-17 06:25:17 +00:00
if err != nil {
2018-10-17 10:38:04 +00:00
t.Errorf("Metchod error = %v", err)
2018-10-17 06:25:17 +00:00
return
}
if tt.want.MatchString(got.DContent) == false {
2018-10-17 10:38:04 +00:00
t.Errorf("Metchod = %v, want %v", got, tt.want)
2018-10-17 06:25:17 +00:00
}
})
}
}
func TestSession_Patch(t *testing.T) {
type args struct {
params interface{}
}
tests := []struct {
name string
args args
want *regexp.Regexp
}{
{
name: "test post uploadfile glob",
args: args{params: "tests/*.js"},
want: regexp.MustCompile(`"file0": "data:application/octet-stream;base64`),
},
{
name: "test post uploadfile only one file",
args: args{params: "tests/json.file"},
want: regexp.MustCompile(`"file0": "json.file.+jsonjsonjsonjson"`),
},
{
name: "test post uploadfile key values",
args: args{params: map[string]string{"a": "32"}},
want: regexp.MustCompile(`"a": "32"`),
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
ses := NewSession()
2018-11-08 06:39:23 +00:00
got, err := ses.Patch("http://httpbin.org/patch").SetBody(tt.args.params, TypeFormData).Execute()
2018-10-17 06:25:17 +00:00
if err != nil {
2018-10-17 10:38:04 +00:00
t.Errorf("Metchod error = %v", err)
2018-10-17 06:25:17 +00:00
return
}
if tt.want.MatchString(got.DContent) == false {
2018-10-17 10:38:04 +00:00
t.Errorf("Metchod = %v, want %v", got, tt.want)
2018-10-17 06:25:17 +00:00
}
})
}
}
2018-10-19 08:26:50 +00:00
func TestSession_SetConfig(t *testing.T) {
type args struct {
typeConfig TypeConfig
values interface{}
}
tests := []struct {
name string
args args
wantErr bool
}{
{
name: "test timeout",
2018-11-08 06:26:51 +00:00
args: args{typeConfig: CRequestTimeout, values: 0.01},
2018-10-19 08:26:50 +00:00
wantErr: true,
},
{
name: "test not timeout",
2018-11-08 06:26:51 +00:00
args: args{typeConfig: CRequestTimeout, values: 5},
2018-10-19 08:26:50 +00:00
wantErr: false,
},
{
name: "test proxy",
2018-11-08 06:26:51 +00:00
args: args{typeConfig: CProxy, values: "http://474420502.top:7070"},
2018-10-19 08:26:50 +00:00
wantErr: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
ses := NewSession()
ses.SetConfig(tt.args.typeConfig, tt.args.values)
_, err := ses.Get("https://httpbin.org/get").Execute()
if (err != nil) != tt.wantErr {
t.Errorf("Metchod error = %v", err)
return
}
})
}
}
func TestSession_SetConfigInsecure(t *testing.T) {
ses := NewSession()
2018-11-08 06:26:51 +00:00
ses.SetConfig(CInsecure, false)
2018-10-19 08:26:50 +00:00
for _, badSSL := range []string{
"https://self-signed.badssl.com/",
"https://expired.badssl.com/",
"https://wrong.host.badssl.com/",
} {
resp, err := ses.Get(badSSL).Execute()
if err != nil {
t.Error("Unable to make request", err)
}
if resp.GResponse.StatusCode != 200 {
t.Error("Request did not return OK, is ", resp.GResponse.StatusCode)
}
}
}
2018-10-23 09:08:50 +00:00
func TestSession_Cookies(t *testing.T) {
ses := NewSession()
2018-10-25 08:12:43 +00:00
t.Run("set cookie", func(t *testing.T) {
2018-10-23 09:08:50 +00:00
2018-10-25 08:12:43 +00:00
resp, err := ses.Get("http://httpbin.org/cookies/set").AddKVCookie("a", "1").Execute()
if err != nil {
t.Error("cookies set error", err)
}
2018-10-23 09:08:50 +00:00
2018-10-25 08:12:43 +00:00
if !regexp.MustCompile(`"a": "1"`).MatchString(resp.DContent) {
t.Error(resp.DContent)
}
})
2018-10-23 09:08:50 +00:00
}
func TestSession_Header(t *testing.T) {
chromeua := "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"
ses := NewSession()
2018-10-25 08:12:43 +00:00
t.Run("ua header test", func(t *testing.T) {
2018-10-23 09:08:50 +00:00
2018-10-25 08:12:43 +00:00
ses.Header.Add(HeaderKeyUA, chromeua)
resp, err := ses.Get("https://www.baidu.com").Execute()
if err != nil {
t.Error("cookies set error", err)
}
2018-10-23 09:08:50 +00:00
2018-10-25 08:12:43 +00:00
if len(resp.DContent) <= 5000 {
t.Error(resp.DContent, len(resp.DContent))
}
ses = NewSession()
resp, err = ses.Get("https://www.baidu.com").AddHeader(HeaderKeyUA, chromeua).Execute()
if err != nil {
t.Error("cookies set error", err)
}
if len(resp.DContent) <= 5000 {
t.Error(resp.DContent, len(resp.DContent))
}
})
2018-10-23 09:08:50 +00:00
}