generated from PenaSide/GolangTemplate
177 lines
5.4 KiB
Go
177 lines
5.4 KiB
Go
package main
|
|
|
|
import (
|
|
"crypto/rand"
|
|
"crypto/rsa"
|
|
"crypto/x509"
|
|
"encoding/pem"
|
|
"gitea.pena/PenaSide/common/encrypt"
|
|
"gitea.pena/PenaSide/common/validate"
|
|
"gitea.pena/PenaSide/customer/internal/models"
|
|
"github.com/stretchr/testify/assert"
|
|
"os"
|
|
"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{
|
|
ApiURL: "https://api.smtp.bz/v1/smtp/send",
|
|
Sender: "noreply@mailing.pena.digital",
|
|
ApiKey: "P0YsjUB137upXrr1NiJefHmXVKW1hmBWlpev",
|
|
MailAddress: "sells@pena.digital",
|
|
})
|
|
assert.NoError(t, err)
|
|
}
|
|
|
|
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)
|
|
}
|
|
|
|
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)
|
|
err = validate.ValidateEncryptKeys(&encrypt.Encrypt{
|
|
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{
|
|
"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",
|
|
}
|
|
|
|
priveKey, pubKey, err := generateRSAKeys(2048)
|
|
assert.NoError(t, err)
|
|
|
|
envVars["ENCRYPT_PUBLIC_KEY"] = pubKey
|
|
envVars["ENCRYPT_PRIVATE_KEY"] = priveKey
|
|
|
|
for key, value := range envVars {
|
|
os.Setenv(key, value)
|
|
}
|
|
|
|
cfg, err := loadConfig()
|
|
assert.Nil(t, err)
|
|
|
|
err = validateNotEmpty(cfg)
|
|
if err != nil {
|
|
assert.NoError(t, err)
|
|
}
|
|
|
|
urls := []string{
|
|
cfg.AuthMicroserviceURL,
|
|
cfg.HubadminMicroserviceURL,
|
|
cfg.CurrencyMicroserviceURL,
|
|
cfg.DiscountMicroserviceGRPC,
|
|
cfg.CodewordMicroserviceGRPC,
|
|
cfg.PaymentMicroserviceGRPC,
|
|
cfg.VerificationMicroservice,
|
|
cfg.TemplategenMicroserviceURL,
|
|
cfg.TrashLogHost,
|
|
cfg.AdminURL,
|
|
cfg.ExternalCfg.MailClientCfg.ApiURL,
|
|
}
|
|
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)
|
|
}
|
|
|
|
}
|