package main import ( "fmt" "log" "net/http" "net/http/httptest" "testing" ) //when we setup wechate parameters,we chat will verify us func TestInitialSetup(t *testing.T) { SetupConfig() req := buildReqWechatAPISetup() rr, _ := getHTTPResponse(req, answerInitialAuth) // Check the response body is what we expect. expected := `913461463450840893` if rr.Body.String() != expected { t.Errorf("handler returned unexpected body: got %v want %v", rr.Body.String(), expected) } } func TestWebRootHandler(t *testing.T) { SetupConfig() req := buildReqWechatWebRoot() rr, _ := getHTTPResponse(req, webrootHandler) // Check the response body is what we expect. expected := `Hi there, I love dummydir! echostr => [913461463450840893] signature => [e39de9f2e28079c01ebb4b803dfc3442b819545c]` if rr.Body.String() != expected { t.Errorf("handler returned unexpected body: got %v want %v", rr.Body.String(), expected) } } func getHTTPResponse(req *http.Request, handler http.HandlerFunc) (rr *httptest.ResponseRecorder, err error) { // Our handlers satisfy http.Handler, so we can call their ServeHTTP method // directly and pass in our Request and ResponseRecorder. rr = httptest.NewRecorder() handler.ServeHTTP(rr, req) // Check the status code is what we expect. if status := rr.Code; status != http.StatusOK { err = fmt.Errorf("wrong HTTP status code: got %v want %v", status, http.StatusOK) } return } func buildReqWechatWebRoot() *http.Request { req, _ := http.NewRequest("GET", "/dummydir", nil) buildReqCommonHeader(req) q := req.URL.Query() q.Add("signature", "e39de9f2e28079c01ebb4b803dfc3442b819545c") q.Add("echostr", "913461463450840893") req.URL.RawQuery = q.Encode() return req } func buildReqWechatAPISetup() *http.Request { // Create a request to pass to our handler. //We don't have any query body for now, so we'll // pass 'nil' as the third parameter. req, err := http.NewRequest("GET", "/apii", nil) if err != nil { log.Fatal(err) } q := req.URL.Query() q.Add("signature", "e39de9f2e28079c01ebb4b803dfc3442b819545c") q.Add("echostr", "913461463450840893") q.Add("timestamp", "1492970761") q.Add("nonce", "1850971833") req.URL.RawQuery = q.Encode() buildReqCommonHeader(req) return req } func buildReqCommonHeader(r *http.Request) { // // example request // // GET /api?signature=e39de9f2e28079c01ebb4b803dfc3442b819545c&echostr=913461463450840893×tamp=1492970761&nonce=1850971833 HTTP/1.1 // Host: wechat.hitxy.org.au // Accept: */* // Cache-Control: no-cache // Connection: Keep-Alive // Pragma: no-cache // User-Agent: Mozilla/4.0 // X-Forwarded-For: 103.7.30.107 // X-Forwarded-Host: wechat.hitxy.org.au // X-Forwarded-Server: wechat.hitxy.org.au h := r.Header h.Set("Host", "wechat.hitxy.org.au") h.Set("Accept", "*/*") h.Set("Cache-Control", "no-cache") h.Set("Connection", "Keep-Alive") h.Set("Pragma", "no-cache") h.Set("User-Agent", "Patrick testcase") h.Set("X-Forwarded-For", "103.7.30.107") h.Set("X-Forwarded-Host", "wechat.hitxy.org.au") h.Set("X-Forwarded-Server", "wechat.hitxy.org.au") }