Skip to content

Commit b3e3d87

Browse files
committed
feat: add tests for JWT expiration and valid JWKS handling in Nginx configuration
1 parent 06b86f1 commit b3e3d87

File tree

1 file changed

+60
-0
lines changed

1 file changed

+60
-0
lines changed

e2e/e2e_test.go

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,12 @@ import (
55
"fmt"
66
"net/http"
77
"testing"
8+
"time"
89

910
assertTestify "github.com/stretchr/testify/assert"
1011
container_test "github.com/tsuru/lua-resty-libjwt/e2e/container"
1112
jwks_test "github.com/tsuru/lua-resty-libjwt/e2e/jwks"
13+
nginx_test "github.com/tsuru/lua-resty-libjwt/e2e/nginx"
1214
request_test "github.com/tsuru/lua-resty-libjwt/e2e/request"
1315
)
1416

@@ -152,4 +154,62 @@ func TestNginxContainer(t *testing.T) {
152154
assert.Equal(http.StatusUnauthorized, statusCode)
153155
assert.Equal("{\"message\":\"token not found\"}\n", string(body))
154156
})
157+
158+
t.Run("Should return an error when JWT is expired", func(t *testing.T) {
159+
assert := assertTestify.New(t)
160+
containerTest.Clear()
161+
containerTest.ChangeNginxConfigReadFile("./nginx/nginx.private.jwks.conf")
162+
date := time.Now()
163+
jwt, jwks, _ := jwks_test.Generate(
164+
jwks_test.JWTParams{KID: "tsuru-kid-123", Iat: date.Add(-2 * time.Hour).Unix(), Exp: date.Add(-1 * time.Hour).Unix()},
165+
jwks_test.JWKSParams{KID: "tsuru-kid-123"})
166+
containerTest.AddFiles([]container_test.File{
167+
{Path: "/usr/share/tokens/jwks.json", File: jwks},
168+
})
169+
body, statusCode, err := request_test.Do(request_test.Params{
170+
URL: URL,
171+
HeaderKey: "Authorization",
172+
HeaderValue: fmt.Sprintf("Bearer %s", jwt),
173+
})
174+
assert.NoError(err)
175+
assert.Equal(http.StatusUnauthorized, statusCode)
176+
assert.Equal("{\"message\":\"token not valid\"}\n", string(body))
177+
})
178+
179+
t.Run("Should return success when a valid JWKS is provided", func(t *testing.T) {
180+
assert := assertTestify.New(t)
181+
containerTest.Clear()
182+
nginxConfBytes, err := nginx_test.ReplaceNginxConfig("./nginx/nginx.private.jwks.conf",
183+
[]string{"\"/usr/share/tokens/jwks_1.json\"", "\"/usr/share/tokens/jwks_2.json\""})
184+
assert.NoError(err)
185+
containerTest.ChangeNginxConfig(nginxConfBytes)
186+
_, jwksOne, _ := jwks_test.Generate(
187+
jwks_test.JWTParams{KID: "tsuru-kid-123"},
188+
jwks_test.JWKSParams{KID: "tsuru-kid-123"})
189+
containerTest.AddFiles([]container_test.File{
190+
{Path: "/usr/share/tokens/jwks_1.json", File: jwksOne},
191+
})
192+
jwtRequest, jwksRequest, _ := jwks_test.Generate(
193+
jwks_test.JWTParams{KID: "kid-123"},
194+
jwks_test.JWKSParams{KID: "kid-123"})
195+
body, statusCode, err := request_test.Do(request_test.Params{
196+
URL: URL,
197+
HeaderKey: "Authorization",
198+
HeaderValue: fmt.Sprintf("Bearer %s", jwtRequest),
199+
})
200+
assert.NoError(err)
201+
assert.Equal(http.StatusUnauthorized, statusCode)
202+
assert.Equal("{\"message\":\"token not valid\"}\n", string(body))
203+
containerTest.AddFiles([]container_test.File{
204+
{Path: "/usr/share/tokens/jwks_2.json", File: jwksRequest},
205+
})
206+
_, statusCode, err = request_test.Do(request_test.Params{
207+
URL: URL,
208+
HeaderKey: "Authorization",
209+
HeaderValue: fmt.Sprintf("Bearer %s", jwtRequest),
210+
})
211+
assert.NoError(err)
212+
assert.Equal(http.StatusOK, statusCode)
213+
})
214+
155215
}

0 commit comments

Comments
 (0)