hunter/hunter_test.go

102 lines
1.9 KiB
Go

package hunter
import (
"encoding/json"
"log"
"testing"
)
func init() {
log.Println("recommend: docker run -p 80:80 kennethreitz/httpbin")
}
type WebGet struct {
PreGetUrl
}
func (web *WebGet) Execute(cxt *TaskContext) {
resp, err := cxt.Hunt()
if err != nil {
panic(err)
}
cxt.SetShare("test", resp.Content())
}
type WebPost struct {
PrePostUrl
}
func (web *WebPost) Execute(cxt *TaskContext) {
wf := cxt.Workflow()
wf.SetBodyAuto("param=hello form")
resp, err := wf.Execute()
if err != nil {
panic(err)
}
cxt.SetShare("test", string(resp.Content()))
}
func TestCasePostForm(t *testing.T) {
hunter := NewHunter()
hunter.AddTask(&WebPost{PrePostUrl: "http://httpbin.org/post"})
hunter.Execute()
data := make(map[string]interface{})
content := hunter.GetShare("test").(string)
err := json.Unmarshal([]byte(content), &data)
if err != nil {
t.Error(err)
}
if iform, ok := data["form"]; ok {
form := iform.(map[string]interface{})
if form["param"].(string) != "hello form" {
t.Error(iform)
}
}
}
type WebSub struct {
PrePostUrl
}
func (web *WebSub) Execute(cxt *TaskContext) {
wf := cxt.Workflow()
wf.SetBodyAuto(`{"a": "1","url":["http://httpbin.org/post","http://httpbin.org/get"]}`)
resp, err := wf.Execute()
if err != nil {
panic(err)
}
cxt.SetShare("test", resp.Content())
data := make(map[string]interface{})
json.Unmarshal(resp.Content(), &data)
if urlList, ok := data["json"].(map[string]interface{})["url"].([]interface{}); ok {
for _, is := range urlList {
s := is.(string)
cxt.AddTask(&WebSub1{PrePostUrl(s)})
}
}
}
type WebSub1 struct {
PrePostUrl
}
func (web *WebSub1) Execute(cxt *TaskContext) {
cxt.SetShare("test", cxt.Path()+"."+cxt.TaskID())
}
func TestCaseWebSub(t *testing.T) {
hunter := NewHunter()
hunter.AddTask(&WebSub{"http://httpbin.org/post"})
hunter.Execute()
content := hunter.GetShare("test").(string)
if content != ".0.1" {
t.Error(content)
}
}