OSDN Git Service

e98408302a7d0c449f7fd18096de876d833dfdbe
[bytom/vapor.git] / api / api_test.go
1 package api
2
3 import (
4         "context"
5         "net/http/httptest"
6         "os"
7         "testing"
8
9         "github.com/vapor/accesstoken"
10         "github.com/vapor/blockchain/rpc"
11         dbm "github.com/vapor/database/leveldb"
12         "github.com/vapor/testutil"
13 )
14
15 func TestAPIHandler(t *testing.T) {
16         a := &API{}
17         response := &Response{}
18
19         // init httptest server
20         a.buildHandler()
21         server := httptest.NewServer(a.handler)
22         defer server.Close()
23
24         // create accessTokens
25         testDB := dbm.NewDB("testdb", "leveldb", "temp")
26         defer os.RemoveAll("temp")
27         a.accessTokens = accesstoken.NewStore(testDB)
28
29         client := &rpc.Client{
30                 BaseURL:     server.URL,
31                 AccessToken: "test-user:test-secret",
32         }
33
34         cases := []struct {
35                 path     string
36                 request  interface{}
37                 respWant *Response
38         }{
39                 {
40                         path: "/create-key",
41                         request: struct {
42                                 Alias    string `json:"alias"`
43                                 Password string `json:"password"`
44                         }{Alias: "alice", Password: "123456"},
45                         respWant: &Response{
46                                 Status: "fail",
47                                 Msg:    "wallet not found, please check that the wallet is open",
48                         },
49                 },
50                 {
51                         path:    "/error",
52                         request: nil,
53                         respWant: &Response{
54                                 Status: "fail",
55                                 Msg:    "wallet not found, please check that the wallet is open",
56                         },
57                 },
58                 {
59                         path:    "/",
60                         request: nil,
61                         respWant: &Response{
62                                 Status: "",
63                                 Msg:    "",
64                         },
65                 },
66                 {
67                         path: "/create-access-token",
68                         request: struct {
69                                 ID   string `json:"id"`
70                                 Type string `json:"type"`
71                         }{ID: "test-access-id", Type: "test-access-type"},
72                         respWant: &Response{
73                                 Status: "success",
74                                 Msg:    "",
75                                 Data:   map[string]interface{}{"id": "test-access-id", "type": "test-access-type", "token": "test-access-id:440d87ae0d625a7fcf076275b18372e09a0899e37ec86398879388de90cb0c67"},
76                         },
77                 },
78                 {
79                         path:    "/gas-rate",
80                         request: nil,
81                         respWant: &Response{
82                                 Status: "success",
83                                 Msg:    "",
84                                 Data:   map[string]interface{}{"gasRate": 1000},
85                         },
86                 },
87         }
88
89         for _, c := range cases {
90                 response = &Response{}
91                 client.Call(context.Background(), c.path, c.request, &response)
92
93                 if !testutil.DeepEqual(response.Status, c.respWant.Status) {
94                         t.Errorf(`got=%#v; want=%#v`, response.Status, c.respWant.Status)
95                 }
96         }
97 }