81 lines
1.5 KiB
Go
81 lines
1.5 KiB
Go
package jwt
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/DATA-DOG/go-sqlmock"
|
|
"github.com/google/uuid"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func newGeneratorWithNoDB(t *testing.T) *TokenGenerator {
|
|
gen, err := CreateGenerator(
|
|
15,
|
|
60,
|
|
5,
|
|
"example.com",
|
|
"supersecret",
|
|
nil,
|
|
)
|
|
require.NoError(t, err)
|
|
|
|
return gen
|
|
}
|
|
|
|
func TestNoDBFail(t *testing.T) {
|
|
jti := uuid.New()
|
|
exp := time.Now().Add(time.Hour).Unix()
|
|
|
|
token := AccessToken{
|
|
JTI: jti,
|
|
EXP: exp,
|
|
}
|
|
|
|
// Revoke should fail due to no DB
|
|
err := token.Revoke(context.Background())
|
|
require.Error(t, err)
|
|
|
|
// CheckNotRevoked should fail
|
|
_, err = token.CheckNotRevoked(context.Background())
|
|
require.Error(t, err)
|
|
}
|
|
|
|
func TestRevokeAndCheckNotRevoked(t *testing.T) {
|
|
gen, mock, cleanup := newGeneratorWithMockDB(t)
|
|
defer cleanup()
|
|
|
|
jti := uuid.New()
|
|
exp := time.Now().Add(time.Hour).Unix()
|
|
|
|
token := AccessToken{
|
|
JTI: jti,
|
|
EXP: exp,
|
|
db: gen.dbConn,
|
|
}
|
|
|
|
// Revoke expectations
|
|
mock.ExpectBegin()
|
|
mock.ExpectExec(`INSERT INTO jwtblacklist`).
|
|
WithArgs(jti, exp).
|
|
WillReturnResult(sqlmock.NewResult(1, 1))
|
|
mock.ExpectCommit()
|
|
|
|
err := token.Revoke(context.Background())
|
|
require.NoError(t, err)
|
|
|
|
// CheckNotRevoked expectations (now revoked)
|
|
mock.ExpectBegin()
|
|
mock.ExpectQuery(`SELECT 1 FROM jwtblacklist`).
|
|
WithArgs(jti).
|
|
WillReturnRows(sqlmock.NewRows([]string{"1"}).AddRow(1))
|
|
mock.ExpectCommit()
|
|
|
|
valid, err := token.CheckNotRevoked(context.Background())
|
|
require.NoError(t, err)
|
|
require.False(t, valid)
|
|
|
|
require.NoError(t, mock.ExpectationsWereMet())
|
|
}
|