github.com/hellofresh/janus@v0.0.0-20230925145208-ce8de8183c67/pkg/jwt/claims_test.go (about)

     1  package jwt
     2  
     3  import (
     4  	"bytes"
     5  	"encoding/json"
     6  	"math/rand"
     7  	"testing"
     8  
     9  	"github.com/dgrijalva/jwt-go"
    10  	"github.com/stretchr/testify/assert"
    11  	"github.com/stretchr/testify/require"
    12  )
    13  
    14  func TestJanusClaims_UnmarshalJSON(t *testing.T) {
    15  	claims := NewJanusClaims(0)
    16  
    17  	claimBytes := []byte(`{"exp":1,"iat":2,"iss":"test","username":"janus"}`)
    18  	dec := json.NewDecoder(bytes.NewBuffer(claimBytes))
    19  	err := dec.Decode(&claims)
    20  	require.NoError(t, err)
    21  
    22  	assert.Equal(t, float64(1), claims.MapClaims["exp"])
    23  	assert.Equal(t, float64(2), claims.MapClaims["iat"])
    24  	assert.Equal(t, "test", claims.MapClaims["iss"])
    25  	assert.Equal(t, "janus", claims.MapClaims["username"])
    26  }
    27  
    28  func TestJanusClaims_VerifyExpiresAt(t *testing.T) {
    29  	leeway := 1 + rand.Int63n(120)
    30  	claims := NewJanusClaims(leeway)
    31  	now := jwt.TimeFunc().Unix()
    32  
    33  	claims.MapClaims["exp"] = float64(now - 1)
    34  	assert.True(t, claims.VerifyExpiresAt(now, true))
    35  
    36  	claims.MapClaims["exp"] = float64(now - leeway)
    37  	assert.True(t, claims.VerifyExpiresAt(now, true))
    38  
    39  	claims.MapClaims["exp"] = float64(now - leeway - 1)
    40  	assert.False(t, claims.VerifyExpiresAt(now, true))
    41  }
    42  
    43  func TestJanusClaims_VerifyIssuedAt(t *testing.T) {
    44  	leeway := 1 + rand.Int63n(120)
    45  	claims := NewJanusClaims(leeway)
    46  	now := jwt.TimeFunc().Unix()
    47  
    48  	claims.MapClaims["iat"] = float64(now + 1)
    49  	assert.True(t, claims.VerifyIssuedAt(now, true))
    50  
    51  	claims.MapClaims["iat"] = float64(now + leeway)
    52  	assert.True(t, claims.VerifyIssuedAt(now, true))
    53  
    54  	claims.MapClaims["iat"] = float64(now + leeway + 1)
    55  	assert.False(t, claims.VerifyIssuedAt(now, true))
    56  }
    57  
    58  func TestJanusClaims_VerifyNotBefore(t *testing.T) {
    59  	leeway := 1 + rand.Int63n(120)
    60  	claims := NewJanusClaims(leeway)
    61  	now := jwt.TimeFunc().Unix()
    62  
    63  	claims.MapClaims["nbf"] = float64(now + 1)
    64  	assert.True(t, claims.VerifyNotBefore(now, true))
    65  
    66  	claims.MapClaims["nbf"] = float64(now + leeway)
    67  	assert.True(t, claims.VerifyNotBefore(now, true))
    68  
    69  	claims.MapClaims["nbf"] = float64(now + leeway + 1)
    70  	assert.False(t, claims.VerifyNotBefore(now, true))
    71  }
    72  
    73  func TestJanusClaims_Valid(t *testing.T) {
    74  	leeway := 1 + rand.Int63n(120)
    75  	claims := NewJanusClaims(leeway)
    76  	now := jwt.TimeFunc().Unix()
    77  
    78  	claims.MapClaims["iat"] = float64(now + 1)
    79  	assert.NoError(t, claims.Valid())
    80  }