add request test helper

This commit is contained in:
Fabian 2018-03-10 17:35:21 +01:00 committed by Ethan Buchman
parent 8aec254333
commit f1cdf57a48
1 changed files with 54 additions and 86 deletions

View File

@ -28,45 +28,36 @@ import (
) )
func TestKeys(t *testing.T) { func TestKeys(t *testing.T) {
prepareClient(t) _, db, err := initKeybase(t)
require.Nil(t, err, "Couldn't init Keybase")
cdc := app.MakeCodec() cdc := app.MakeCodec()
r := initRouter(cdc) r := initRouter(cdc)
// empty keys // empty keys
req, err := http.NewRequest("GET", "/keys", nil) res := request(t, r, "GET", "/keys", nil)
require.Nil(t, err) require.Equal(t, http.StatusOK, res.Code, res.Body.String())
res := httptest.NewRecorder()
r.ServeHTTP(res, req)
assert.Equal(t, http.StatusOK, res.Code, res.Body.String())
body := res.Body.String() body := res.Body.String()
require.Equal(t, body, "[]", "Expected an empty array") assert.Equal(t, body, "[]", "Expected an empty array")
// add key // add key
addr := createKey(t, r) addr := createKey(t, r)
assert.Len(t, addr, 40, "Returned address has wrong format", res.Body.String()) assert.Len(t, addr, 40, "Returned address has wrong format", res.Body.String())
// existing keys // existing keys
req, err = http.NewRequest("GET", "/keys", nil) res = request(t, r, "GET", "/keys", nil)
require.Nil(t, err) require.Equal(t, http.StatusOK, res.Code, res.Body.String())
res = httptest.NewRecorder()
r.ServeHTTP(res, req)
assert.Equal(t, http.StatusOK, res.Code, res.Body.String())
var m [1]keys.KeyOutput var m [1]keys.KeyOutput
decoder := json.NewDecoder(res.Body) decoder := json.NewDecoder(res.Body)
err = decoder.Decode(&m) err = decoder.Decode(&m)
require.NoError(t, err)
assert.Equal(t, m[0].Name, "test", "Did not serve keys name correctly") assert.Equal(t, m[0].Name, "test", "Did not serve keys name correctly")
assert.Equal(t, m[0].Address, addr, "Did not serve keys Address correctly") assert.Equal(t, m[0].Address, addr, "Did not serve keys Address correctly")
// select key // select key
req, _ = http.NewRequest("GET", "/keys/test", nil) res = request(t, r, "GET", "/keys/test", nil)
res = httptest.NewRecorder() require.Equal(t, http.StatusOK, res.Code, res.Body.String())
r.ServeHTTP(res, req)
assert.Equal(t, http.StatusOK, res.Code, res.Body.String())
var m2 keys.KeyOutput var m2 keys.KeyOutput
decoder = json.NewDecoder(res.Body) decoder = json.NewDecoder(res.Body)
err = decoder.Decode(&m2) err = decoder.Decode(&m2)
@ -76,29 +67,19 @@ func TestKeys(t *testing.T) {
// update key // update key
var jsonStr = []byte(`{"old_password":"1234567890", "new_password":"12345678901"}`) var jsonStr = []byte(`{"old_password":"1234567890", "new_password":"12345678901"}`)
req, err = http.NewRequest("PUT", "/keys/test", bytes.NewBuffer(jsonStr)) res = request(t, r, "PUT", "/keys/test", jsonStr)
require.Nil(t, err) require.Equal(t, http.StatusOK, res.Code, res.Body.String())
res = httptest.NewRecorder()
r.ServeHTTP(res, req)
assert.Equal(t, http.StatusOK, res.Code, res.Body.String())
// here it should say unauthorized as we changed the password before // here it should say unauthorized as we changed the password before
req, err = http.NewRequest("PUT", "/keys/test", bytes.NewBuffer(jsonStr)) res = request(t, r, "PUT", "/keys/test", jsonStr)
require.Nil(t, err) require.Equal(t, http.StatusUnauthorized, res.Code, res.Body.String())
res = httptest.NewRecorder()
r.ServeHTTP(res, req)
assert.Equal(t, http.StatusUnauthorized, res.Code, res.Body.String())
// delete key // delete key
jsonStr = []byte(`{"password":"12345678901"}`) jsonStr = []byte(`{"password":"12345678901"}`)
req, err = http.NewRequest("DELETE", "/keys/test", bytes.NewBuffer(jsonStr)) res = request(t, r, "DELETE", "/keys/test", jsonStr)
require.Nil(t, err) require.Equal(t, http.StatusOK, res.Code, res.Body.String())
res = httptest.NewRecorder()
r.ServeHTTP(res, req) db.Close()
assert.Equal(t, http.StatusOK, res.Code, res.Body.String())
} }
func TestVersion(t *testing.T) { func TestVersion(t *testing.T) {
@ -107,11 +88,7 @@ func TestVersion(t *testing.T) {
r := initRouter(cdc) r := initRouter(cdc)
// node info // node info
req, err := http.NewRequest("GET", "/version", nil) res := request(t, r, "GET", "/version", nil)
require.Nil(t, err)
res := httptest.NewRecorder()
r.ServeHTTP(res, req)
require.Equal(t, http.StatusOK, res.Code, res.Body.String()) require.Equal(t, http.StatusOK, res.Code, res.Body.String())
// TODO fix regexp // TODO fix regexp
@ -131,26 +108,18 @@ func TestNodeStatus(t *testing.T) {
r := initRouter(cdc) r := initRouter(cdc)
// node info // node info
req, err := http.NewRequest("GET", "/node_info", nil) res := request(t, r, "GET", "/node_info", nil)
require.Nil(t, err)
res := httptest.NewRecorder()
r.ServeHTTP(res, req)
require.Equal(t, http.StatusOK, res.Code, res.Body.String()) require.Equal(t, http.StatusOK, res.Code, res.Body.String())
var m p2p.NodeInfo var m p2p.NodeInfo
decoder := json.NewDecoder(res.Body) decoder := json.NewDecoder(res.Body)
err = decoder.Decode(&m) err := decoder.Decode(&m)
require.Nil(t, err, "Couldn't parse node info") require.Nil(t, err, "Couldn't parse node info")
assert.NotEqual(t, p2p.NodeInfo{}, m, "res: %v", res) assert.NotEqual(t, p2p.NodeInfo{}, m, "res: %v", res)
// syncing // syncing
req, err = http.NewRequest("GET", "/syncing", nil) res = request(t, r, "GET", "/syncing", nil)
require.Nil(t, err)
res = httptest.NewRecorder()
r.ServeHTTP(res, req)
require.Equal(t, http.StatusOK, res.Code, res.Body.String()) require.Equal(t, http.StatusOK, res.Code, res.Body.String())
assert.Equal(t, "true", res.Body.String()) assert.Equal(t, "true", res.Body.String())
@ -164,35 +133,27 @@ func TestBlock(t *testing.T) {
cdc := app.MakeCodec() cdc := app.MakeCodec()
r := initRouter(cdc) r := initRouter(cdc)
req, err := http.NewRequest("GET", "/blocks/latest", nil) res := request(t, r, "GET", "/blocks/latest", nil)
require.Nil(t, err)
res := httptest.NewRecorder()
r.ServeHTTP(res, req)
require.Equal(t, http.StatusOK, res.Code, res.Body.String()) require.Equal(t, http.StatusOK, res.Code, res.Body.String())
var m ctypes.ResultBlock var m ctypes.ResultBlock
decoder := json.NewDecoder(res.Body) decoder := json.NewDecoder(res.Body)
err = decoder.Decode(&m) err := decoder.Decode(&m)
require.Nil(t, err, "Couldn't parse block") require.Nil(t, err, "Couldn't parse block")
assert.NotEqual(t, ctypes.ResultBlock{}, m) assert.NotEqual(t, ctypes.ResultBlock{}, m)
req, err = http.NewRequest("GET", "/blocks/1", nil) // --
require.Nil(t, err)
res = httptest.NewRecorder()
r.ServeHTTP(res, req) res = request(t, r, "GET", "/blocks/1", nil)
require.Equal(t, http.StatusOK, res.Code, res.Body.String()) require.Equal(t, http.StatusOK, res.Code, res.Body.String())
assert.NotEqual(t, ctypes.ResultBlock{}, m) assert.NotEqual(t, ctypes.ResultBlock{}, m)
req, err = http.NewRequest("GET", "/blocks/2", nil) // --
require.Nil(t, err)
res = httptest.NewRecorder()
r.ServeHTTP(res, req) res = request(t, r, "GET", "/blocks/2", nil)
require.Equal(t, http.StatusNotFound, res.Code) require.Equal(t, http.StatusNotFound, res.Code, res.Body.String())
} }
func TestValidators(t *testing.T) { func TestValidators(t *testing.T) {
@ -203,34 +164,26 @@ func TestValidators(t *testing.T) {
cdc := app.MakeCodec() cdc := app.MakeCodec()
r := initRouter(cdc) r := initRouter(cdc)
req, err := http.NewRequest("GET", "/validatorsets/latest", nil) res := request(t, r, "GET", "/validatorsets/latest", nil)
require.Nil(t, err)
res := httptest.NewRecorder()
r.ServeHTTP(res, req)
require.Equal(t, http.StatusOK, res.Code, res.Body.String()) require.Equal(t, http.StatusOK, res.Code, res.Body.String())
var m ctypes.ResultValidators var m ctypes.ResultValidators
decoder := json.NewDecoder(res.Body) decoder := json.NewDecoder(res.Body)
err = decoder.Decode(&m) err := decoder.Decode(&m)
require.Nil(t, err, "Couldn't parse block") require.Nil(t, err, "Couldn't parse validatorset")
assert.NotEqual(t, ctypes.ResultValidators{}, m) assert.NotEqual(t, ctypes.ResultValidators{}, m)
req, err = http.NewRequest("GET", "/validatorsets/1", nil) // --
require.Nil(t, err)
res = httptest.NewRecorder()
r.ServeHTTP(res, req) res = request(t, r, "GET", "/validatorsets/1", nil)
require.Equal(t, http.StatusOK, res.Code, res.Body.String()) require.Equal(t, http.StatusOK, res.Code, res.Body.String())
assert.NotEqual(t, ctypes.ResultValidators{}, m) assert.NotEqual(t, ctypes.ResultValidators{}, m)
req, err = http.NewRequest("GET", "/validatorsets/2", nil) // --
require.Nil(t, err)
res = httptest.NewRecorder()
r.ServeHTTP(res, req) res = request(t, r, "GET", "/validatorsets/2", nil)
require.Equal(t, http.StatusNotFound, res.Code) require.Equal(t, http.StatusNotFound, res.Code)
} }
@ -303,13 +256,28 @@ func runOrTimeout(cmd *cobra.Command, timeout time.Duration) error {
func createKey(t *testing.T, r http.Handler) string { func createKey(t *testing.T, r http.Handler) string {
var jsonStr = []byte(`{"name":"test", "password":"1234567890"}`) var jsonStr = []byte(`{"name":"test", "password":"1234567890"}`)
req, err := http.NewRequest("POST", "/keys", bytes.NewBuffer(jsonStr)) res := request(t, r, "POST", "/keys", jsonStr)
require.Nil(t, err)
res := httptest.NewRecorder()
r.ServeHTTP(res, req)
assert.Equal(t, http.StatusOK, res.Code, res.Body.String()) assert.Equal(t, http.StatusOK, res.Code, res.Body.String())
addr := res.Body.String() addr := res.Body.String()
return addr return addr
} }
func request(t *testing.T, r http.Handler, method string, path string, payload []byte) *httptest.ResponseRecorder {
req, err := http.NewRequest(method, path, bytes.NewBuffer(payload))
require.Nil(t, err)
res := httptest.NewRecorder()
r.ServeHTTP(res, req)
return res
}
func initKeybase(t *testing.T) (cryptoKeys.Keybase, *dbm.GoLevelDB, error) {
os.RemoveAll("./testKeybase")
db, err := dbm.NewGoLevelDB("keys", "./testKeybase")
require.Nil(t, err)
kb := client.GetKeyBase(db)
keys.SetKeyBase(kb)
return kb, db, nil
}