added main logic for validate
Some checks failed
Lint / Lint (push) Failing after 2m18s

This commit is contained in:
Pasha 2024-12-09 16:54:52 +03:00
parent 5d9c6ffc7e
commit dcb6d697c0
6 changed files with 151 additions and 6 deletions

123
cmd/validator/main.go Normal file

@ -0,0 +1,123 @@
package main
import (
"bytes"
"context"
"fmt"
"gitea.pena/PenaSide/common/validate"
"gitea.pena/PenaSide/verification/internal/config"
"gitea.pena/PenaSide/verification/internal/repository"
"github.com/caarlos0/env/v8"
"github.com/minio/minio-go/v7"
"github.com/minio/minio-go/v7/pkg/credentials"
"github.com/pioz/faker"
"log"
)
func main() {
cfg, err := loadConfig()
if err != nil {
log.Fatalf("error loading config: %v", err)
}
err = validateNotEmpty(cfg)
if err != nil {
log.Fatalf("error validating config: %v", err)
}
err = validateS3(cfg)
if err != nil {
log.Fatalf("error validating s3: %v", err)
}
if err = validate.ValidateTgToken(cfg.TelegramToken); err != nil {
log.Fatalf("error validating telegram token: %v", err)
}
if err = validate.ValidateMongo(cfg.ExternalCfg.Database); err != nil {
log.Fatalf("error validating mongodb: %v", err)
}
}
func loadConfig() (config.Config, error) {
var cfg config.Config
if err := env.Parse(&cfg); err != nil {
return cfg, err
}
return cfg, nil
}
func validateNotEmpty(cfg config.Config) error {
if cfg.TelegramChannelID == 0 {
return fmt.Errorf("TelegramChannelID is empty")
}
if cfg.ClientHttpURL == "" {
return fmt.Errorf("ClientHttpURL is empty")
}
if cfg.AdminHttpURL == "" {
return fmt.Errorf("AdminHttpURL is empty")
}
if cfg.CustomerMicroserviceRPCURL == "" {
return fmt.Errorf("CustomerMicroserviceRPCURL is empty")
}
if cfg.TrashLogHost == "" {
return fmt.Errorf("TrashLogHost is empty")
}
if cfg.VerificationMicroserviceURL == "" {
return fmt.Errorf("VerificationMicroserviceURL is empty")
}
return nil
}
func validateS3(cfg config.Config) error {
if cfg.S3Endpoint == "" {
return fmt.Errorf("s3 endpoint is empty")
}
if cfg.S3AccessKey == "" {
return fmt.Errorf("s3 access key is empty")
}
if cfg.S3SecretKey == "" {
return fmt.Errorf("s3 secret key is empty")
}
ctx := context.TODO()
client, err := minio.New(cfg.S3Endpoint, &minio.Options{
Creds: credentials.NewStaticV4(cfg.S3AccessKey, cfg.S3SecretKey, ""),
Secure: true,
})
if err != nil {
return fmt.Errorf("error creating minio client: %v", err)
}
objectName := faker.String()
content := []byte(faker.String())
contentType := "text/plain"
exist, err := client.BucketExists(ctx, repository.VerificationBucket)
if err != nil {
return fmt.Errorf("error find s3 bucket in validate: %w", err)
}
// не создаем бакет так как бакет могут не дать создать
if !exist {
log.Println("bucket does not exist")
return nil
}
_, err = client.PutObject(ctx, repository.VerificationBucket, objectName,
bytes.NewReader(content), int64(len(content)),
minio.PutObjectOptions{ContentType: contentType})
if err != nil {
return fmt.Errorf("error create test object: %w", err)
}
err = client.RemoveObject(ctx, repository.VerificationBucket, objectName, minio.RemoveObjectOptions{})
if err != nil {
return fmt.Errorf("error remove test object: %w", err)
}
return nil
}

@ -0,0 +1,12 @@
package main
import (
"gitea.pena/PenaSide/verification/internal/config"
"github.com/stretchr/testify/assert"
"testing"
)
func TestValidateS3(t *testing.T) {
err := validateS3(config.Config{S3Endpoint: "localhost:9000", S3AccessKey: "minioadmin", S3SecretKey: "minioadmin"})
assert.NoError(t, err)
}

7
go.mod

@ -5,7 +5,7 @@ go 1.22.0
toolchain go1.22.2
require (
gitea.pena/PenaSide/common v0.0.0-20241128160655-fe730a08b5f1
gitea.pena/PenaSide/common v0.0.0-20241206095133-a4a6f7df8b45
gitea.pena/PenaSide/customer v0.0.0-20241118214409-34a88a3a7001 //dev
gitea.pena/PenaSide/trashlog v0.0.0-20241119225515-2fd267647ca4 //dev
github.com/caarlos0/env/v8 v8.0.0
@ -19,7 +19,10 @@ require (
go.uber.org/zap v1.27.0
)
require gitea.pena/PenaSide/linters-golang v0.0.0-20241207122018-933207374735
require (
gitea.pena/PenaSide/linters-golang v0.0.0-20241207122018-933207374735
github.com/pioz/faker v1.7.3
)
require (
github.com/ClickHouse/clickhouse-go v1.5.4 // indirect

5
go.sum

@ -1,5 +1,5 @@
gitea.pena/PenaSide/common v0.0.0-20241128160655-fe730a08b5f1 h1:w1AAxrlZGmxUI9NAa/0TYsc6sqWWF9yAzQaLL/KxwrM=
gitea.pena/PenaSide/common v0.0.0-20241128160655-fe730a08b5f1/go.mod h1:l71j3W1yROhOSfjWZ6wcMuzjBR37gu2ZTcXsorEJoiw=
gitea.pena/PenaSide/common v0.0.0-20241206095133-a4a6f7df8b45 h1:0YzvHSgRitVeqvniSCPr6BERHusGP5yrGozAITYbWmg=
gitea.pena/PenaSide/common v0.0.0-20241206095133-a4a6f7df8b45/go.mod h1:BDk6/EA9ekKun+UP7UBLcczhlmFRLxglYi00G9FBkUw=
gitea.pena/PenaSide/customer v0.0.0-20241118214409-34a88a3a7001 h1:bnwlhVx7LzwAYgx25G8/qezqkXvatL1de9nQZvpO0IE=
gitea.pena/PenaSide/customer v0.0.0-20241118214409-34a88a3a7001/go.mod h1:6lKbvPc2E2TcNSxG8WlC/XBuhqW6smKQtpYPLedheqU=
gitea.pena/PenaSide/linters-golang v0.0.0-20241207122018-933207374735 h1:jDVeUhGBTXBibmW5dmtJg2m2+z5z2Rf6J4G0LpjVoJ0=
@ -128,6 +128,7 @@ github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpE
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=

@ -2,6 +2,7 @@ package app
import (
"context"
"fmt"
mongo "gitea.pena/PenaSide/common/mongo"
"gitea.pena/PenaSide/customer/pkg/customer_clients"
"gitea.pena/PenaSide/trashlog/app"
@ -54,7 +55,7 @@ func Run(cfg *config.Config, build Build) {
loggerHlog.Emit(app.InfoSvcStarted{})
mongoDB, err := mongo.Connect(ctx, &mongo.ConnectDeps{
Configuration: &cfg.External.Database,
Configuration: &cfg.ExternalCfg.Database,
Timeout: 5 * time.Second,
})
@ -80,6 +81,11 @@ func Run(cfg *config.Config, build Build) {
logger.Fatal("TelegramBotApi", zap.Error(err))
}
_, err = tgBot.Send(tgbotapi.NewMessage(cfg.TelegramChannelID, fmt.Sprintf("PING MSG from %s", config.ModuleLogger)))
if err != nil {
logger.Fatal("Send TG ping", zap.Error(err))
}
telegram := client.NewTelegram(client.Deps{
Logger: logger,
Bot: tgBot,

@ -19,7 +19,7 @@ type Config struct {
CustomerMicroserviceRPCURL string `env:"CUSTOMER_MICROSERVICE_RPC_URL,required"`
TrashLogHost string `env:"TRASH_LOG_HOST,required"`
VerificationMicroserviceURL string `env:"VERIFICATION_MICROSERVICE_URL,required"`
External External
ExternalCfg External
}
type External struct {