Skip to content

Commit fb0d6c3

Browse files
committed
write test for ValidateBearerJWT
1 parent db8167f commit fb0d6c3

File tree

2 files changed

+60
-3
lines changed

2 files changed

+60
-3
lines changed

internal/auth.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,11 @@ func ValidateBearerJWT(req *http.Request, p provider.Provider) (string, string,
2727

2828
splitAuth := strings.Split(auth, " ")
2929
if len(splitAuth) != 2 {
30-
return "", "", fmt.Errorf("Invalid authorization header: %q", auth)
30+
return "", "", fmt.Errorf("Invalid authorization header: %s", auth)
3131
}
3232

3333
if splitAuth[0] != "Bearer" {
34-
return "", "", fmt.Errorf("No Bearer token: %q", auth)
34+
return "", "", fmt.Errorf("No Bearer token: %s", auth)
3535
}
3636

3737
u, err := p.GetUser(splitAuth[1])

internal/auth_test.go

Lines changed: 58 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package tfa
22

33
import (
4+
"errors"
45
"net/http"
56
"net/http/httptest"
67
"net/url"
@@ -9,20 +10,76 @@ import (
910
"time"
1011

1112
"github.com/logica0419/traefik-forward-auth/internal/provider"
13+
"github.com/logica0419/traefik-forward-auth/internal/provider/mock"
1214
"github.com/stretchr/testify/assert"
15+
"go.uber.org/mock/gomock"
1316
)
1417

1518
/**
1619
* Tests
1720
*/
1821

22+
func TestAuthValidateBearerJWT(t *testing.T) {
23+
assert := assert.New(t)
24+
config, _ = NewConfig([]string{})
25+
r, _ := http.NewRequest("GET", "http://example.com", nil)
26+
ctrl := gomock.NewController(t)
27+
mockProvider := mock.NewMockProvider(ctrl)
28+
29+
// Should require Authorization header
30+
mockProvider.EXPECT().GetUser("").Times(0)
31+
_, _, err := ValidateBearerJWT(r, mockProvider)
32+
if assert.Error(err) {
33+
assert.Equal("No Authorization header", err.Error())
34+
}
35+
36+
// Should require 2 parts
37+
r.Header.Set("Authorization", "invalid")
38+
mockProvider.EXPECT().GetUser("").Times(0)
39+
_, _, err = ValidateBearerJWT(r, mockProvider)
40+
if assert.Error(err) {
41+
assert.Equal("Invalid authorization header: invalid", err.Error())
42+
}
43+
44+
r.Header.Set("Authorization", "not valid header")
45+
mockProvider.EXPECT().GetUser("").Times(0)
46+
_, _, err = ValidateBearerJWT(r, mockProvider)
47+
if assert.Error(err) {
48+
assert.Equal("Invalid authorization header: not valid header", err.Error())
49+
}
50+
51+
// Should require Bearer Authorization header
52+
r.Header.Set("Authorization", "Basic dGVzdDp0ZXN0")
53+
mockProvider.EXPECT().GetUser("").Times(0)
54+
_, _, err = ValidateBearerJWT(r, mockProvider)
55+
if assert.Error(err) {
56+
assert.Equal("No Bearer token: Basic dGVzdDp0ZXN0", err.Error())
57+
}
58+
59+
// Should cache invalid token
60+
r.Header.Set("Authorization", "Bearer invalid_token")
61+
mockProvider.EXPECT().GetUser("invalid_token").Return(provider.User{}, errors.New("invalid token"))
62+
_, _, err = ValidateBearerJWT(r, mockProvider)
63+
if assert.Error(err) {
64+
assert.Equal("invalid token", err.Error())
65+
}
66+
67+
// Should accept valid Bearer token
68+
r.Header.Set("Authorization", "Bearer valid_token")
69+
mockProvider.EXPECT().GetUser("valid_token").Return(provider.User{Email: "test@test.com"}, nil)
70+
email, token, err := ValidateBearerJWT(r, mockProvider)
71+
assert.Nil(err, "valid request should not return an error")
72+
assert.Equal("test@test.com", email, "valid request should return user email")
73+
assert.Equal("valid_token", token, "valid request should return user token")
74+
}
75+
1976
func TestAuthValidateCookie(t *testing.T) {
2077
assert := assert.New(t)
2178
config, _ = NewConfig([]string{})
2279
r, _ := http.NewRequest("GET", "http://example.com", nil)
2380
c := &http.Cookie{}
2481

25-
// Should require 3 parts
82+
// Should require 4 parts
2683
c.Value = ""
2784
_, _, err := ValidateCookie(r, c)
2885
if assert.Error(err) {

0 commit comments

Comments
 (0)