68 lines
1.9 KiB
Go
68 lines
1.9 KiB
Go
// FILE: auth/auth_test.go
|
|
package auth
|
|
|
|
import (
|
|
"crypto/rand"
|
|
"crypto/rsa"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestNewAuthenticator(t *testing.T) {
|
|
// Test HS256 creation
|
|
auth, err := NewAuthenticator([]byte("test-secret-key-must-be-32-bytes"))
|
|
require.NoError(t, err, "Failed to create HS256 authenticator")
|
|
assert.Equal(t, "HS256", auth.algorithm)
|
|
|
|
// Test with short secret
|
|
_, err = NewAuthenticator([]byte("short"))
|
|
assert.Equal(t, ErrSecretTooShort, err)
|
|
|
|
// Test RS256 with private key
|
|
privateKey, err := rsa.GenerateKey(rand.Reader, 2048)
|
|
require.NoError(t, err)
|
|
|
|
authRS, err := NewAuthenticator(privateKey, "RS256")
|
|
require.NoError(t, err)
|
|
assert.Equal(t, "RS256", authRS.algorithm)
|
|
assert.NotNil(t, authRS.privateKey)
|
|
assert.NotNil(t, authRS.publicKey)
|
|
|
|
// Test RS256 with public key only
|
|
authPub, err := NewAuthenticator(&privateKey.PublicKey, "RS256")
|
|
require.NoError(t, err)
|
|
assert.Equal(t, "RS256", authPub.algorithm)
|
|
assert.Nil(t, authPub.privateKey)
|
|
assert.NotNil(t, authPub.publicKey)
|
|
|
|
// Test invalid algorithm
|
|
_, err = NewAuthenticator([]byte("test-secret-key-must-be-32-bytes"), "INVALID")
|
|
assert.Equal(t, ErrInvalidAlgorithm, err)
|
|
|
|
// Test invalid key type for HS256
|
|
_, err = NewAuthenticator(privateKey, "HS256")
|
|
assert.Equal(t, ErrInvalidKeyType, err)
|
|
}
|
|
|
|
func TestInterfaceCompliance(t *testing.T) {
|
|
// Verify Authenticator implements AuthenticatorInterface
|
|
auth, _ := NewAuthenticator([]byte("test-secret-key-must-be-32-bytes"))
|
|
|
|
var _ AuthenticatorInterface = auth
|
|
|
|
// Test interface methods work
|
|
hash, err := auth.HashPassword("testpass123")
|
|
require.NoError(t, err)
|
|
|
|
err = auth.VerifyPassword("testpass123", hash)
|
|
assert.NoError(t, err)
|
|
|
|
token, err := auth.GenerateToken("user1", nil)
|
|
require.NoError(t, err)
|
|
|
|
userID, _, err := auth.ValidateToken(token)
|
|
require.NoError(t, err)
|
|
assert.Equal(t, "user1", userID)
|
|
} |