package main
import (
"bytes"
"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)
}
}
//Send encrypted text Message ("test"")to server and get encrypted feedback
//we only check decrypted ToUserName should be the one we sent out.
//as decrypt itself is already a good proof of its working state.
func TestPostTxtMsg(t *testing.T) {
SetupConfig()
req := buildReqWechatPostTxtMsg()
rr, _ := getHTTPResponse(req, apiV1Main)
m := ReadEncryptedMsg(rr.Body.String())
xml := Decode(m.Encrypt)
h := ReadCommonHeader(xml)
expected := "oUN420bxqFqlx0ZQHciUOesZO3PE"
if h.ToUserName != expected {
t.Errorf("expect ToUserName: %v \r\nbut got %v",
expected, h.ToUserName)
}
}
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
}
// POST /api?signature=f06bb28c1d3847815d498fc0a343b11b4d03e095×tamp=1493212928&nonce=1461107899&openid=oUN420bxqFqlx0ZQHciUOesZO3PE&encrypt_type=aes&msg_signature=61a50d4656b13a7bbeecf53a5a85fbf37835762f HTTP/1.1
// Host: wechat.hitxy.org.au
// Accept: */*
// Cache-Control: no-cache
// Connection: Keep-Alive
// Content-Length: 534
// Content-Type: text/xml
// Pragma: no-cache
// User-Agent: Mozilla/4.0
// X-Forwarded-For: 103.7.30.105
// X-Forwarded-Host: wechat.hitxy.org.au
// X-Forwarded-Server: wechat.hitxy.org.au
//
//
//
//
// decrypt as:
//
// 1493212928
//
//
// 6413300692136991026
//
func buildReqWechatPostTxtMsg() *http.Request {
xml := `
`
b := bytes.NewBufferString(xml)
req, _ := http.NewRequest("POST", "/api?signature=f06bb28c1d3847815d498fc0a343b11b4d03e095×tamp=1493212928&nonce=1461107899&openid=oUN420bxqFqlx0ZQHciUOesZO3PE&encrypt_type=aes&msg_signature=61a50d4656b13a7bbeecf53a5a85fbf37835762f", b)
buildReqCommonHeader(req)
return req
}
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")
}