package config import ( "os" "path/filepath" "strings" "testing" "time" ) func TestLoadLocalConfig(t *testing.T) { t.Parallel() cfg, err := Load(filepath.Join("..", "..", "config", "local.yaml")) if err != nil { t.Fatalf("Load returned error: %v", err) } if cfg.App.Name != "chatappgateway" { t.Fatalf("unexpected app name: %s", cfg.App.Name) } if cfg.App.HTTPAddr != ":8080" { t.Fatalf("unexpected http addr: %s", cfg.App.HTTPAddr) } if len(cfg.GRPC.User.Targets) != 1 || cfg.GRPC.User.Targets[0] != "127.0.0.1:9001" { t.Fatalf("unexpected user targets: %#v", cfg.GRPC.User.Targets) } if cfg.GRPC.Pay.Timeout != 3*time.Second { t.Fatalf("unexpected pay timeout: %s", cfg.GRPC.Pay.Timeout) } if cfg.GRPC.User.Retry.MaxAttempts != 2 { t.Fatalf("unexpected retry attempts: %d", cfg.GRPC.User.Retry.MaxAttempts) } } func TestLoadCompatibilityTargetConfig(t *testing.T) { t.Parallel() path := filepath.Join(t.TempDir(), "compat.yaml") content := strings.TrimSpace(` app: name: chatappgateway http_addr: ":8080" grpc: user: target: "127.0.0.1:9001" timeout: 3s pay: target: "127.0.0.1:9002" timeout: 3s `) if err := os.WriteFile(path, []byte(content), 0o600); err != nil { t.Fatalf("WriteFile returned error: %v", err) } cfg, err := Load(path) if err != nil { t.Fatalf("Load returned error: %v", err) } if len(cfg.GRPC.User.Targets) != 1 || cfg.GRPC.User.Targets[0] != "127.0.0.1:9001" { t.Fatalf("unexpected user targets: %#v", cfg.GRPC.User.Targets) } } func TestLoadInvalidConfig(t *testing.T) { t.Parallel() path := filepath.Join(t.TempDir(), "invalid.yaml") content := strings.TrimSpace(` app: name: chatappgateway http_addr: "bad-address" grpc: user: targets: ["127.0.0.1:9001"] timeout: 3s pay: targets: ["127.0.0.1:9002"] timeout: 3s `) if err := os.WriteFile(path, []byte(content), 0o600); err != nil { t.Fatalf("WriteFile returned error: %v", err) } _, err := Load(path) if err == nil { t.Fatal("Load returned nil error") } if !strings.Contains(err.Error(), "app.http_addr is invalid") { t.Fatalf("unexpected error: %v", err) } } func TestLoadInvalidUpstream(t *testing.T) { t.Parallel() path := filepath.Join(t.TempDir(), "invalid-upstream.yaml") content := strings.TrimSpace(` app: name: chatappgateway http_addr: ":8080" grpc: user: targets: ["127.0.0.1:9001"] timeout: 3s pay: targets: ["invalid"] timeout: 3s `) if err := os.WriteFile(path, []byte(content), 0o600); err != nil { t.Fatalf("WriteFile returned error: %v", err) } _, err := Load(path) if err == nil { t.Fatal("Load returned nil error") } if !strings.Contains(err.Error(), `grpc.pay.targets contains invalid target "invalid"`) { t.Fatalf("unexpected error: %v", err) } }