209 lines
5.2 KiB
Go
209 lines
5.2 KiB
Go
package config
|
|
|
|
import (
|
|
"os"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestLoadConfig(t *testing.T) {
|
|
// Создаем временные файлы для тестирования
|
|
configContent := `server_host: localhost
|
|
server_port: 1540
|
|
rac_port: 1545
|
|
rac_path: "/path/to/rac"
|
|
connection_timeout: 30s
|
|
command_timeout: 60s
|
|
retry_count: 3
|
|
retry_delay: 5s
|
|
log_level: Debug
|
|
server_name: "Test Server"`
|
|
|
|
secretContent := `cluster_admin: "admin"
|
|
cluster_admin_password: "password"
|
|
db_admin: "dbadmin"
|
|
db_admin_password: "dbpassword"`
|
|
|
|
projectContent := `service-mode:
|
|
server_host: "localhost"
|
|
server_port: 1540
|
|
rac_port: 1545
|
|
base_name: "TestDB"
|
|
log_level: "Info"`
|
|
|
|
// Создаем временные файлы
|
|
configFile, err := os.CreateTemp("", "config_*.yaml")
|
|
if err != nil {
|
|
t.Fatalf("Failed to create temp config file: %v", err)
|
|
}
|
|
defer os.Remove(configFile.Name())
|
|
|
|
secretFile, err := os.CreateTemp("", "secret_*.yaml")
|
|
if err != nil {
|
|
t.Fatalf("Failed to create temp secret file: %v", err)
|
|
}
|
|
defer os.Remove(secretFile.Name())
|
|
|
|
projectFile, err := os.CreateTemp("", "project_*.yaml")
|
|
if err != nil {
|
|
t.Fatalf("Failed to create temp project file: %v", err)
|
|
}
|
|
defer os.Remove(projectFile.Name())
|
|
|
|
// Записываем содержимое
|
|
if _, err := configFile.WriteString(configContent); err != nil {
|
|
t.Fatalf("Failed to write config file: %v", err)
|
|
}
|
|
configFile.Close()
|
|
|
|
if _, err := secretFile.WriteString(secretContent); err != nil {
|
|
t.Fatalf("Failed to write secret file: %v", err)
|
|
}
|
|
secretFile.Close()
|
|
|
|
if _, err := projectFile.WriteString(projectContent); err != nil {
|
|
t.Fatalf("Failed to write project file: %v", err)
|
|
}
|
|
projectFile.Close()
|
|
|
|
// Тестируем загрузку конфигурации
|
|
appConfig, err := LoadConfig(configFile.Name(), secretFile.Name(), projectFile.Name())
|
|
if err != nil {
|
|
t.Fatalf("LoadConfig failed: %v", err)
|
|
}
|
|
|
|
// Проверяем основную конфигурацию
|
|
if appConfig.Project.ServiceMode.ServerHost != "localhost" {
|
|
t.Errorf("Expected ServerHost 'localhost', got '%s'", appConfig.Project.ServiceMode.ServerHost)
|
|
}
|
|
|
|
if appConfig.Project.ServiceMode.ServerPort != 1540 {
|
|
t.Errorf("Expected ServerPort 1540, got %d", appConfig.Project.ServiceMode.ServerPort)
|
|
}
|
|
|
|
if appConfig.Project.ServiceMode.RACPort != 1545 {
|
|
t.Errorf("Expected RACPort 1545, got %d", appConfig.Project.ServiceMode.RACPort)
|
|
}
|
|
|
|
connectionTimeout, err := appConfig.Config.GetConnectionTimeout()
|
|
if err != nil {
|
|
t.Errorf("Failed to parse ConnectionTimeout: %v", err)
|
|
}
|
|
if connectionTimeout != 30*time.Second {
|
|
t.Errorf("Expected ConnectionTimeout 30s, got %v", connectionTimeout)
|
|
}
|
|
|
|
// Проверяем секретную конфигурацию
|
|
if appConfig.Secret.ClusterAdmin != "admin" {
|
|
t.Errorf("Expected ClusterAdmin 'admin', got '%s'", appConfig.Secret.ClusterAdmin)
|
|
}
|
|
|
|
if appConfig.Secret.DBAdminPassword != "dbpassword" {
|
|
t.Errorf("Expected DBAdminPassword 'dbpassword', got '%s'", appConfig.Secret.DBAdminPassword)
|
|
}
|
|
|
|
// Проверяем проектную конфигурацию
|
|
if appConfig.Project.ServiceMode.BaseName != "TestDB" {
|
|
t.Errorf("Expected BaseName 'TestDB', got '%s'", appConfig.Project.ServiceMode.BaseName)
|
|
}
|
|
|
|
if appConfig.Project.ServiceMode.LogLevel != "Info" {
|
|
t.Errorf("Expected LogLevel 'Info', got '%s'", appConfig.Project.ServiceMode.LogLevel)
|
|
}
|
|
}
|
|
|
|
func TestValidate(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
config *AppConfig
|
|
expectErr bool
|
|
}{
|
|
{
|
|
name: "valid config",
|
|
config: &AppConfig{
|
|
Config: &Config{
|
|
RACPath: "/path/to/rac",
|
|
},
|
|
Secret: &Secret{
|
|
ClusterAdmin: "admin",
|
|
DBAdmin: "dbadmin",
|
|
},
|
|
Project: &ProjectConfig{
|
|
ServiceMode: &ServiceModeConfig{
|
|
ServerHost: "localhost",
|
|
BaseName: "TestDB",
|
|
},
|
|
},
|
|
},
|
|
expectErr: false,
|
|
},
|
|
{
|
|
name: "missing server host",
|
|
config: &AppConfig{
|
|
Config: &Config{
|
|
RACPath: "/path/to/rac",
|
|
},
|
|
Secret: &Secret{
|
|
ClusterAdmin: "admin",
|
|
DBAdmin: "dbadmin",
|
|
},
|
|
Project: &ProjectConfig{
|
|
ServiceMode: &ServiceModeConfig{
|
|
ServerHost: "",
|
|
BaseName: "TestDB",
|
|
},
|
|
},
|
|
},
|
|
expectErr: true,
|
|
},
|
|
{
|
|
name: "missing cluster admin",
|
|
config: &AppConfig{
|
|
Config: &Config{
|
|
RACPath: "/path/to/rac",
|
|
},
|
|
Secret: &Secret{
|
|
ClusterAdmin: "",
|
|
DBAdmin: "dbadmin",
|
|
},
|
|
Project: &ProjectConfig{
|
|
ServiceMode: &ServiceModeConfig{
|
|
ServerHost: "localhost",
|
|
BaseName: "TestDB",
|
|
},
|
|
},
|
|
},
|
|
expectErr: true,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
err := tt.config.Validate()
|
|
if tt.expectErr && err == nil {
|
|
t.Error("Expected error but got none")
|
|
}
|
|
if !tt.expectErr && err != nil {
|
|
t.Errorf("Expected no error but got: %v", err)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestGetRACAddress(t *testing.T) {
|
|
config := &AppConfig{
|
|
Project: &ProjectConfig{
|
|
ServiceMode: &ServiceModeConfig{
|
|
ServerHost: "example.com",
|
|
RACPort: 1545,
|
|
},
|
|
},
|
|
}
|
|
|
|
expected := "example.com:1545"
|
|
actual := config.GetRACAddress()
|
|
|
|
if actual != expected {
|
|
t.Errorf("Expected '%s', got '%s'", expected, actual)
|
|
}
|
|
} |