Skip to content

Commit 30cf579

Browse files
committed
add user login tests
1 parent 1d52acc commit 30cf579

File tree

1 file changed

+145
-0
lines changed

1 file changed

+145
-0
lines changed

handlers/User_test.go

+145
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,145 @@
1+
package handlers
2+
3+
import (
4+
"testing"
5+
6+
"bytes"
7+
"encoding/json"
8+
"net/http"
9+
"net/http/httptest"
10+
11+
"io/ioutil"
12+
"os"
13+
14+
"crypto/rand"
15+
"crypto/rsa"
16+
17+
jwt "github.com/dgrijalva/jwt-go"
18+
"github.com/gaia-pipeline/gaia"
19+
"github.com/gaia-pipeline/gaia/store"
20+
"github.com/hashicorp/go-hclog"
21+
"github.com/labstack/echo"
22+
)
23+
24+
func TestUserLoginHMACKey(t *testing.T) {
25+
26+
dataDir, err := ioutil.TempDir("", "hmac")
27+
if err != nil {
28+
t.Fatalf("error creating data dir %v", err.Error())
29+
}
30+
31+
defer func() {
32+
gaia.Cfg = nil
33+
os.RemoveAll(dataDir)
34+
}()
35+
36+
gaia.Cfg = &gaia.Config{
37+
JWTKey: []byte("hmac-jwt-key"),
38+
Logger: hclog.New(&hclog.LoggerOptions{
39+
Level: hclog.Trace,
40+
Output: hclog.DefaultOutput,
41+
Name: "Gaia",
42+
}),
43+
DataPath: dataDir,
44+
}
45+
46+
dataStore := store.NewStore()
47+
err = dataStore.Init()
48+
if err != nil {
49+
t.Fatalf("cannot initialize store: %v", err.Error())
50+
}
51+
52+
e := echo.New()
53+
InitHandlers(e, dataStore, nil)
54+
55+
body := map[string]string{
56+
"username": "admin",
57+
"password": "admin",
58+
}
59+
bodyBytes, _ := json.Marshal(body)
60+
req := httptest.NewRequest(echo.POST, "/api/"+apiVersion+"/login", bytes.NewBuffer(bodyBytes))
61+
req.Header.Set("Content-Type", "application/json")
62+
rec := httptest.NewRecorder()
63+
e.ServeHTTP(rec, req)
64+
65+
if rec.Code != http.StatusOK {
66+
t.Fatalf("expected response code %v got %v", http.StatusOK, rec.Code)
67+
}
68+
69+
data, err := ioutil.ReadAll(rec.Body)
70+
user := &gaia.User{}
71+
err = json.Unmarshal(data, user)
72+
if err != nil {
73+
t.Fatalf("error unmarshaling responce %v", err.Error())
74+
}
75+
token, _, err := new(jwt.Parser).ParseUnverified(user.Tokenstring, jwt.MapClaims{})
76+
if err != nil {
77+
t.Fatalf("error parsing the token %v", err.Error())
78+
}
79+
alg := "HS256"
80+
if token.Header["alg"] != alg {
81+
t.Fatalf("expected token alg %v got %v", alg, token.Header["alg"])
82+
}
83+
84+
}
85+
86+
func TestUserLoginRSAKey(t *testing.T) {
87+
dataDir, err := ioutil.TempDir("", "rsa")
88+
if err != nil {
89+
t.Fatalf("error creating data dir %v", err.Error())
90+
}
91+
92+
defer func() {
93+
gaia.Cfg = nil
94+
os.RemoveAll(dataDir)
95+
}()
96+
97+
key, _ := rsa.GenerateKey(rand.Reader, 2048)
98+
gaia.Cfg = &gaia.Config{
99+
JWTKey: key,
100+
Logger: hclog.New(&hclog.LoggerOptions{
101+
Level: hclog.Trace,
102+
Output: hclog.DefaultOutput,
103+
Name: "Gaia",
104+
}),
105+
DataPath: dataDir,
106+
}
107+
108+
dataStore := store.NewStore()
109+
err = dataStore.Init()
110+
if err != nil {
111+
t.Fatalf("cannot initialize store: %v", err.Error())
112+
}
113+
114+
e := echo.New()
115+
InitHandlers(e, dataStore, nil)
116+
117+
body := map[string]string{
118+
"username": "admin",
119+
"password": "admin",
120+
}
121+
bodyBytes, _ := json.Marshal(body)
122+
req := httptest.NewRequest(echo.POST, "/api/"+apiVersion+"/login", bytes.NewBuffer(bodyBytes))
123+
req.Header.Set("Content-Type", "application/json")
124+
rec := httptest.NewRecorder()
125+
e.ServeHTTP(rec, req)
126+
127+
if rec.Code != http.StatusOK {
128+
t.Fatalf("expected response code %v got %v", http.StatusOK, rec.Code)
129+
}
130+
131+
data, err := ioutil.ReadAll(rec.Body)
132+
user := &gaia.User{}
133+
err = json.Unmarshal(data, user)
134+
if err != nil {
135+
t.Fatalf("error unmarshaling responce %v", err.Error())
136+
}
137+
token, _, err := new(jwt.Parser).ParseUnverified(user.Tokenstring, jwt.MapClaims{})
138+
if err != nil {
139+
t.Fatalf("error parsing the token %v", err.Error())
140+
}
141+
alg := "RS512"
142+
if token.Header["alg"] != alg {
143+
t.Fatalf("expected token alg %v got %v", alg, token.Header["alg"])
144+
}
145+
}

0 commit comments

Comments
 (0)