1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
package common
import (
"fmt"
"net/http"
"os"
"testing"
"github.com/jarcoal/httpmock"
)
const (
username = "admin"
password = "admin"
baseHost = "http://localhost"
usersUrl = "/api/v1/users"
)
type User struct {
ID int `json:"id"`
Name string `json:"name"`
Age int `json:"age"`
}
var users = []User{{ID: 1, Name: "Guanghongwei", Age: 18}, {ID: 2, Name: "ibuler", Age: 19}}
var user = User{ID: 2, Name: "Jumpserver", Age: 5}
var userDeleteUrl = fmt.Sprintf("%s/%d", usersUrl, user.ID)
func TestClient_Do(t *testing.T) {
c := NewClient(10, "")
_, err := c.Do("GET", usersUrl, nil, nil)
if err == nil {
t.Error("Failed Do(), want get err but not")
}
c.SetBasicAuth(username, password)
var res []User
_, err = c.Do("GET", usersUrl, nil, &res)
if err != nil {
t.Errorf("Failed Do() error: %s", err.Error())
}
if len(res) != 2 {
t.Errorf("user not equal 2: %d", len(res))
}
}
func TestClient_Get(t *testing.T) {
c := NewClient(10, baseHost)
_, err := c.Get(usersUrl, nil)
if err == nil {
t.Errorf("Failed Get(%s): want get err but not", usersUrl)
}
c.SetBasicAuth(username, password)
_, err = c.Get(usersUrl, nil)
if err != nil {
t.Errorf("Failed Get(%s): %s", usersUrl, err.Error())
}
}
func TestClient_Post(t *testing.T) {
c := NewClient(10, baseHost)
var userCreated User
_, err := c.Post(usersUrl, user, &userCreated)
if err != nil {
t.Errorf("Failed Post(): %s", err.Error())
}
if userCreated.ID != user.ID {
t.Errorf("Failed Post(), id not euqal: %d != %d", userCreated.ID, user.ID)
}
}
func TestClient_Put(t *testing.T) {
c := NewClient(10, "")
var userUpdated User
_, err := c.Put(usersUrl, user, &userUpdated)
if err != nil {
t.Errorf("Failed Put(): %s", err.Error())
}
if userUpdated.ID != user.ID {
t.Errorf("Failed Post(), id not euqal: %d != %d", userUpdated.ID, user.ID)
}
}
func TestClient_Delete(t *testing.T) {
c := NewClient(10, baseHost)
c.SetBasicAuth(username, password)
_, err := c.Delete(userDeleteUrl, nil)
if err != nil {
t.Errorf("Failed Delete(): %s", err.Error())
}
}
func PrepareMockData() {
httpmock.RegisterResponder("GET", usersUrl,
func(req *http.Request) (*http.Response, error) {
u, p, ok := req.BasicAuth()
if !ok || u != username || p != password {
return httpmock.NewStringResponse(401, ""), nil
}
resp, err := httpmock.NewJsonResponse(200, users)
if err != nil {
return httpmock.NewStringResponse(500, ""), nil
}
return resp, nil
},
)
resp, err := httpmock.NewJsonResponder(201, user)
if err != nil {
fmt.Println("Create post reps failed")
}
httpmock.RegisterResponder("POST", usersUrl, resp)
httpmock.RegisterResponder("PUT", usersUrl, resp)
httpmock.RegisterResponder("DELETE", userDeleteUrl, httpmock.NewStringResponder(204, ""))
}
func TestMain(m *testing.M) {
httpmock.Activate()
PrepareMockData()
defer httpmock.DeactivateAndReset()
code := m.Run()
os.Exit(code)
}
func TestConvertSizeToBytes(t *testing.T) {
data := map[string]int{
"100M": 100 * 1024 * 1024,
"10M": 10 * 1024 * 1024,
"1G": 1024 * 1024 * 1024,
"1024":1024,
}
for k, v := range data {
convValue := ConvertSizeToBytes(k)
if convValue != v {
t.Errorf("%s should be equale to %d bytes, but conver to %d", k, v, convValue)
}
t.Logf("%s convert to %d bytes", k, convValue)
}
}