OSDN Git Service

Hulk did something
[bytom/vapor.git] / api / api_test.go
diff --git a/api/api_test.go b/api/api_test.go
new file mode 100644 (file)
index 0000000..e984083
--- /dev/null
@@ -0,0 +1,97 @@
+package api
+
+import (
+       "context"
+       "net/http/httptest"
+       "os"
+       "testing"
+
+       "github.com/vapor/accesstoken"
+       "github.com/vapor/blockchain/rpc"
+       dbm "github.com/vapor/database/leveldb"
+       "github.com/vapor/testutil"
+)
+
+func TestAPIHandler(t *testing.T) {
+       a := &API{}
+       response := &Response{}
+
+       // init httptest server
+       a.buildHandler()
+       server := httptest.NewServer(a.handler)
+       defer server.Close()
+
+       // create accessTokens
+       testDB := dbm.NewDB("testdb", "leveldb", "temp")
+       defer os.RemoveAll("temp")
+       a.accessTokens = accesstoken.NewStore(testDB)
+
+       client := &rpc.Client{
+               BaseURL:     server.URL,
+               AccessToken: "test-user:test-secret",
+       }
+
+       cases := []struct {
+               path     string
+               request  interface{}
+               respWant *Response
+       }{
+               {
+                       path: "/create-key",
+                       request: struct {
+                               Alias    string `json:"alias"`
+                               Password string `json:"password"`
+                       }{Alias: "alice", Password: "123456"},
+                       respWant: &Response{
+                               Status: "fail",
+                               Msg:    "wallet not found, please check that the wallet is open",
+                       },
+               },
+               {
+                       path:    "/error",
+                       request: nil,
+                       respWant: &Response{
+                               Status: "fail",
+                               Msg:    "wallet not found, please check that the wallet is open",
+                       },
+               },
+               {
+                       path:    "/",
+                       request: nil,
+                       respWant: &Response{
+                               Status: "",
+                               Msg:    "",
+                       },
+               },
+               {
+                       path: "/create-access-token",
+                       request: struct {
+                               ID   string `json:"id"`
+                               Type string `json:"type"`
+                       }{ID: "test-access-id", Type: "test-access-type"},
+                       respWant: &Response{
+                               Status: "success",
+                               Msg:    "",
+                               Data:   map[string]interface{}{"id": "test-access-id", "type": "test-access-type", "token": "test-access-id:440d87ae0d625a7fcf076275b18372e09a0899e37ec86398879388de90cb0c67"},
+                       },
+               },
+               {
+                       path:    "/gas-rate",
+                       request: nil,
+                       respWant: &Response{
+                               Status: "success",
+                               Msg:    "",
+                               Data:   map[string]interface{}{"gasRate": 1000},
+                       },
+               },
+       }
+
+       for _, c := range cases {
+               response = &Response{}
+               client.Call(context.Background(), c.path, c.request, &response)
+
+               if !testutil.DeepEqual(response.Status, c.respWant.Status) {
+                       t.Errorf(`got=%#v; want=%#v`, response.Status, c.respWant.Status)
+               }
+       }
+}