customer/internal/service/encrypt/encrypt_test.go
2023-05-16 04:12:34 +03:00

183 lines
4.9 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package encrypt_test
import (
"errors"
"strings"
"testing"
"github.com/stretchr/testify/assert"
"penahub.gitlab.yandexcloud.net/pena-services/pena-social-auth/internal/models"
"penahub.gitlab.yandexcloud.net/pena-services/pena-social-auth/internal/service/encrypt"
"penahub.gitlab.yandexcloud.net/pena-services/pena-social-auth/internal/service/encrypt/mocks"
)
var (
privateKeyCurve25519 = strings.Replace(
`-----BEGIN PRIVATE KEY-----
MC4CAQAwBQYDK2VwBCIEIKn0BKwF3vZvODgWAnUIwQhd8de5oZhY48gc23EWfrfs
-----END PRIVATE KEY-----`,
"\t",
"",
-1,
)
privateKeyCurve25519Invalid = strings.Replace(
`-----BEGIN PRIVATE KEY-----
MC4CAQAwBQYDK2VwBCIE3vZvODgWAnUIhd8de5oZhY48gc23EWfrfs
-----END PRIVATE KEY-----`,
"\t",
"",
-1,
)
publicKeyCurve25519 = strings.Replace(
`-----BEGIN PUBLIC KEY-----
MCowBQYDK2VwAyEAEbnIvjIMle4rqVol6K2XUqOxHy1KJoNoZdKJrRUPKL4=
-----END PUBLIC KEY-----`,
"\t",
"",
-1,
)
publicKeyCurve25519InvalidLength = strings.Replace(
`-----BEGIN PUBLIC KEY-----
MowBQYDK2VwA9yEAEbnIvjIMle4rqVol6K2XUqOxHy1KJoNoZdKJrRUPKL4=
-----END PUBLIC KEY-----`,
"\t",
"",
-1,
)
)
func TestSignCommonSecret(t *testing.T) {
t.Run("Успешная подпись общего секрета", func(t *testing.T) {
encryptService := encrypt.New(&encrypt.ServiceDeps{
PrivateCurveKey: privateKeyCurve25519,
SignSecret: "secret",
})
assert.NotPanics(t, func() {
encryptedText, err := encryptService.SignCommonSecret()
assert.NoError(t, err)
assert.NotEmpty(t, encryptedText)
assert.NotZero(t, encryptedText)
})
})
t.Run("Ошибка подписи из-за кривого ключа (заголовок имеется)", func(t *testing.T) {
encryptService := encrypt.New(&encrypt.ServiceDeps{
PrivateCurveKey: privateKeyCurve25519Invalid,
SignSecret: "secret",
})
assert.NotPanics(t, func() {
encryptedText, err := encryptService.SignCommonSecret()
assert.Error(t, err)
assert.Empty(t, encryptedText)
assert.Zero(t, encryptedText)
})
})
t.Run("Ошибка подписи из-за рандомного кривого ключа", func(t *testing.T) {
encryptService := encrypt.New(&encrypt.ServiceDeps{
PrivateCurveKey: "testtesttesttest",
SignSecret: "secret",
})
assert.NotPanics(t, func() {
encryptedText, err := encryptService.SignCommonSecret()
assert.Error(t, err)
assert.Empty(t, encryptedText)
assert.Zero(t, encryptedText)
})
})
}
func TestVerifySignature(t *testing.T) {
t.Run("Успешное подтвеждение подписи", func(t *testing.T) {
encryptService := encrypt.New(&encrypt.ServiceDeps{
PublicCurveKey: publicKeyCurve25519,
PrivateCurveKey: privateKeyCurve25519,
SignSecret: "secret",
})
assert.NotPanics(t, func() {
signature, _ := encryptService.SignCommonSecret()
isValid, err := encryptService.VerifySignature(signature)
assert.NoError(t, err)
assert.Equal(t, true, isValid)
})
})
t.Run("Неудачное подтверждение подписи из-за невалидности ключа", func(t *testing.T) {
encryptService := encrypt.New(&encrypt.ServiceDeps{
PublicCurveKey: "teettaegarehah",
PrivateCurveKey: privateKeyCurve25519,
SignSecret: "secret",
})
assert.NotPanics(t, func() {
signature, _ := encryptService.SignCommonSecret()
isValid, err := encryptService.VerifySignature(signature)
assert.Error(t, err)
assert.Equal(t, false, isValid)
})
})
t.Run("Неудачное подтверждение подписи при использовании ключа у которого невалидный размер (слишком большой)", func(t *testing.T) {
encryptService := encrypt.New(&encrypt.ServiceDeps{
PublicCurveKey: publicKeyCurve25519InvalidLength,
PrivateCurveKey: privateKeyCurve25519,
SignSecret: "secret",
})
assert.NotPanics(t, func() {
signature, _ := encryptService.SignCommonSecret()
isValid, err := encryptService.VerifySignature(signature)
assert.Error(t, err)
assert.Equal(t, false, isValid)
})
})
}
func TestVerifyJWT(t *testing.T) {
jwtToken := "token-token"
jwtUser := models.JWTAuthUser{
ID: "id1",
}
t.Run("Успешное подтверждение токена", func(t *testing.T) {
jwtUtil := mocks.NewJwtUtil(t)
encryptService := encrypt.New(&encrypt.ServiceDeps{
JWT: jwtUtil,
})
jwtUtil.EXPECT().Validate(jwtToken).Return(&jwtUser, nil).Once()
id, err := encryptService.VerifyJWT(jwtToken)
assert.NoError(t, err)
assert.Equal(t, jwtUser.ID, id)
})
t.Run("Ошибка подтверждения токена", func(t *testing.T) {
jwtUtil := mocks.NewJwtUtil(t)
encryptService := encrypt.New(&encrypt.ServiceDeps{
JWT: jwtUtil,
})
jwtUtil.EXPECT().Validate(jwtToken).Return(nil, errors.New("validate jwt error")).Once()
id, err := encryptService.VerifyJWT(jwtToken)
assert.Error(t, err)
assert.Empty(t, id)
})
}