-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathapi_test.go
More file actions
121 lines (98 loc) · 3.06 KB
/
api_test.go
File metadata and controls
121 lines (98 loc) · 3.06 KB
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
package main_test
import (
"bytes"
"encoding/json"
"log"
"math/rand"
"net/http"
"strings"
"testing"
"time"
"github.com/Mawthuq-Software/Wireguard-Central-Node/src/api/router/responses"
"github.com/Mawthuq-Software/Wireguard-Central-Node/src/api/router/routes"
)
var url = "https://eu1.raspberrytech.one:8446"
var userEmail = randomString(9) + "@fakemail.com"
var userUsername = randomString(11)
var userPassword = randomString(13)
var userToken string
func Test_AddUser(t *testing.T) {
var newUser routes.User
newUser.Email = userEmail
newUser.Username = userUsername
newUser.Password = userPassword
jsonResp, _ := json.Marshal(newUser)
reqReader := bytes.NewReader(jsonResp)
req, _ := http.NewRequest("POST", url+"/user/add", reqReader)
res := makeReq(req)
checkResponseCode(t, http.StatusAccepted, res.StatusCode)
}
func Test_AddExistingUser(t *testing.T) {
var existingUser routes.User
existingUser.Email = userEmail
existingUser.Username = userUsername
existingUser.Password = userPassword
jsonResp, _ := json.Marshal(existingUser)
reqReader := bytes.NewReader(jsonResp)
req, _ := http.NewRequest("POST", url+"/user/add", reqReader)
res := makeReq(req)
checkResponseCode(t, http.StatusBadRequest, res.StatusCode)
}
//This test must run for token to be generated
func Test_LoginExistingUser(t *testing.T) {
var existingUser routes.User
existingUser.Username = userUsername
existingUser.Password = userPassword
jsonResp, _ := json.Marshal(existingUser)
reqReader := bytes.NewReader(jsonResp)
req, _ := http.NewRequest("POST", url+"/user/login", reqReader)
res := makeReq(req)
var user responses.TokenResponse
err := routes.ParseResponse(res, &user)
if err != nil {
t.Errorf(err.Error())
}
userToken = user.Token
checkResponseCode(t, http.StatusAccepted, res.StatusCode)
}
func Test_LoginNonExistentUser(t *testing.T) {
var existingUser routes.User
existingUser.Username = randomString(20)
existingUser.Password = randomString(20)
jsonResp, _ := json.Marshal(existingUser)
reqReader := bytes.NewReader(jsonResp)
req, _ := http.NewRequest("POST", url+"/user/login", reqReader)
res := makeReq(req)
checkResponseCode(t, http.StatusBadRequest, res.StatusCode)
}
func Test_ValidateToken(t *testing.T) {
req, _ := http.NewRequest("POST", url+"/token/validate", nil)
req.Header.Set("Bearer", userToken)
res := makeReq(req)
checkResponseCode(t, http.StatusOK, res.StatusCode)
}
func randomString(n int) string {
rand.Seed(time.Now().Unix())
charSet := "abcdedfghijklmnopqrstABCDEFGHIJKLMNOPQRST"
var output strings.Builder
for i := 0; i < n; i++ {
random := rand.Intn(len(charSet))
randomChar := charSet[random]
output.WriteString(string(randomChar))
}
return output.String()
}
func checkResponseCode(t *testing.T, expected, actual int) {
if expected != actual {
t.Errorf("Expected response code %d. Got %d\n", expected, actual)
}
}
func makeReq(req *http.Request) *http.Response {
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
log.Fatalln(err)
}
return resp
}