2024-11-27 15:01:51 +00:00
package main
import (
2024-11-28 12:31:54 +00:00
"crypto/rand"
"crypto/rsa"
"crypto/x509"
"encoding/pem"
"gitea.pena/PenaSide/common/encrypt"
2024-12-06 09:55:16 +00:00
"gitea.pena/PenaSide/common/validate"
2024-11-27 15:01:51 +00:00
"gitea.pena/PenaSide/customer/internal/models"
"github.com/stretchr/testify/assert"
2024-11-28 12:31:54 +00:00
"os"
2024-11-27 15:01:51 +00:00
"testing"
)
func TestValidateTG ( t * testing . T ) {
err := validateTG ( "7127966184:AAG1steOCH4wDvHRe9QcsXJPS4dWRyRYsqg" , - 1002177203276 , - 1002177203276 )
assert . NoError ( t , err )
}
func TestValidateMail ( t * testing . T ) {
err := validateMail ( models . MailClientCfg {
2024-12-06 12:40:21 +00:00
ApiURL : "https://api.smtp.bz/v1/smtp/send" ,
2024-11-27 15:01:51 +00:00
Sender : "noreply@mailing.pena.digital" ,
ApiKey : "P0YsjUB137upXrr1NiJefHmXVKW1hmBWlpev" ,
MailAddress : "sells@pena.digital" ,
} )
assert . NoError ( t , err )
}
2024-11-27 15:07:41 +00:00
func TestValidateURLs ( t * testing . T ) {
urls := [ ] string {
"http://10.8.0.6:59300" ,
"http://10.8.0.6:59303" ,
"http://10.8.0.6:3131" ,
"10.8.0.6:9001" ,
"10.8.0.6:9085" ,
"http://10.8.0.6:7036" ,
"http://10.6.0.17" ,
"https://api.smtp.bz/v1/smtp/send" ,
"10.8.0.6:59665" ,
"https://sadmin.pena" ,
"10.8.0.15:7113" ,
}
err := validateURLs ( urls )
assert . NoError ( t , err )
}
2024-11-28 09:47:29 +00:00
2024-11-28 12:31:54 +00:00
func TestValidateKafka ( t * testing . T ) {
err := validateKafka ( [ ] string { "localhost:9092" } , "test-topic" )
assert . NoError ( t , err )
}
func TestValidateEncryptKeys ( t * testing . T ) {
priveKey , pubKey , err := generateRSAKeys ( 2048 )
assert . NoError ( t , err )
2024-12-06 09:55:16 +00:00
err = validate . ValidateEncryptKeys ( & encrypt . Encrypt {
2024-11-28 12:31:54 +00:00
PubKey : pubKey ,
PrivKey : priveKey ,
} )
assert . NoError ( t , err )
}
func generateRSAKeys ( bitSize int ) ( privateKey string , publicKey string , err error ) {
privKey , err := rsa . GenerateKey ( rand . Reader , bitSize )
if err != nil {
return "" , "" , err
}
privKeyPEM := pem . EncodeToMemory ( & pem . Block {
Type : "RSA PRIVATE KEY" ,
Bytes : x509 . MarshalPKCS1PrivateKey ( privKey ) ,
} )
pubKeyBytes , err := x509 . MarshalPKIXPublicKey ( & privKey . PublicKey )
if err != nil {
return "" , "" , err
}
pubKeyPEM := pem . EncodeToMemory ( & pem . Block {
Type : "RSA PUBLIC KEY" ,
Bytes : pubKeyBytes ,
} )
return string ( privKeyPEM ) , string ( pubKeyPEM ) , nil
}
func TestLoadConfig ( t * testing . T ) {
envVars := map [ string ] string {
2024-12-06 12:40:21 +00:00
"JWT_ISSUER" : "pena-auth-service" ,
"JWT_AUDIENCE" : "pena" ,
"JWT_PUBLIC_KEY" : "-----BEGIN PUBLIC KEY-----\nMIGeMA0GCSqGSIb3DQEBAQUAA4GMADCBiAKBgHgnvr7O2tiApjJfid1orFnIGm69\n80fZp+Lpbjo+NC/0whMFga2Biw5b1G2Q/B2u0tpO1Fs/E8z7Lv1nYfr5jx2S8x6B\ndA4TS2kB9Kf0wn0+7wSlyikHoKhbtzwXHZl17GsyEi6wHnsqNBSauyIWhpha8i+Y\n+3GyaOY536H47qyXAgMBAAE=\n-----END PUBLIC KEY-----" ,
"CLIENT_HTTP_URL" : "0.0.0.0:8080" ,
"ADMIN_HTTP_URL" : "0.0.0.0:8081" ,
"GRPC_URL" : "0.0.0.0:9001" ,
"GRPC_DOMAIN" : "customer-service:9000" ,
"MONGO_URL" : "mongodb://test:test@localhost:27020/" ,
"MONGO_DB_NAME" : "admin" ,
"KAFKA_BROKERS" : "localhost:9092" ,
"KAFKA_TOPIC_TARIFF" : "test-topic" ,
"AUTH_MICROSERVICE_URL" : "http://localhost:8000/user" ,
"HUBADMIN_MICROSERVICE_URL" : "http://localhost:8001/tariff" ,
"CURRENCY_MICROSERVICE_URL" : "http://cbrfworker-service:8000/change" ,
"DISCOUNT_MICROSERVICE_GRPC_URL" : "localhost:9040" ,
"PAYMENT_MICROSERVICE_GRPC_URL" : "treasurer-service:9085" ,
"VERIFICATION_MICROSERVICE_URL" : "http://10.8.0.8:7035/verification" ,
"TEMPLATEGEN_MICROSERVICE_URL" : "10.6.0.17" ,
"CODEWORD_MICROSERVICE_GRPC_URL" : "http://localhost:8000/user" ,
"TRASH_LOG_HOST" : "localhost:7113" ,
"API_URL" : "https://api.smtp.bz/v1/smtp/send" ,
"MAIL_SENDER" : "noreply@mailing.pena.digital" ,
"MAIL_API_KEY" : "P0YsjUB137upXrr1NiJefHmXVKW1hmBWlpev" ,
"MAIL_ADDRESS" : "mail@mail.com" ,
"TELEGRAM_TOKEN" : "7127966184:AAG1steOCH4wDvHRe9QcsXJPS4dWRyRYsqg" ,
"TELEGRAM_NOTIFICATION_CHANNEL_ID" : "-1002177203276" ,
"TELEGRAM_RS_PAY_CHANNEL_ID" : "-1002177203276" ,
"ADMIN_FRONT_URL" : "https://admin-front.ru" ,
2024-11-28 12:31:54 +00:00
}
2024-12-06 12:23:44 +00:00
priveKey , pubKey , err := generateRSAKeys ( 2048 )
assert . NoError ( t , err )
envVars [ "ENCRYPT_PUBLIC_KEY" ] = pubKey
envVars [ "ENCRYPT_PRIVATE_KEY" ] = priveKey
2024-11-28 12:31:54 +00:00
for key , value := range envVars {
os . Setenv ( key , value )
}
cfg , err := loadConfig ( )
assert . Nil ( t , err )
2024-12-06 12:23:44 +00:00
err = validateNotEmpty ( cfg )
if err != nil {
assert . NoError ( t , err )
}
urls := [ ] string {
2024-12-06 12:40:21 +00:00
cfg . AuthMicroserviceURL ,
cfg . HubadminMicroserviceURL ,
cfg . CurrencyMicroserviceURL ,
cfg . DiscountMicroserviceGRPC ,
cfg . CodewordMicroserviceGRPC ,
cfg . PaymentMicroserviceGRPC ,
cfg . VerificationMicroservice ,
cfg . TemplategenMicroserviceURL ,
2024-12-06 12:23:44 +00:00
cfg . TrashLogHost ,
cfg . AdminURL ,
2024-12-06 12:40:21 +00:00
cfg . ExternalCfg . MailClientCfg . ApiURL ,
2024-12-06 12:23:44 +00:00
}
if err = validateURLs ( urls ) ; err != nil {
assert . NoError ( t , err )
}
// todo validate jwt
if err = validateKafka ( cfg . KafkaBrokers , cfg . KafkaTopicTariff ) ; err != nil {
assert . NoError ( t , err )
}
if err = validateMail ( cfg . ExternalCfg . MailClientCfg ) ; err != nil {
assert . NoError ( t , err )
}
if err = validate . ValidateEncryptKeys ( & cfg . ExternalCfg . EncryptCommon ) ; err != nil {
assert . NoError ( t , err )
}
if err = validateTG ( cfg . NotificationBotToken , cfg . NotificationRsPayChannel , cfg . NotificationChannel ) ; err != nil {
assert . NoError ( t , err )
}
if err = validate . ValidateMongo ( cfg . ExternalCfg . Database ) ; err != nil {
assert . NoError ( t , err )
}
2024-11-28 12:31:54 +00:00
}