Files
fn_registry/functions/infra/generate_traefik_dynamic_test.go
T
egutierrez 750b7abcd5 chore: auto-commit (97 archivos)
- .claude/CLAUDE.md
- .claude/agents/fn-recopilador/SKILL.md
- .claude/rules/INDEX.md
- .claude/rules/cpp_apps.md
- bash/functions/infra/build_cpp_windows.sh
- cpp/CMakeLists.txt
- cpp/PATTERNS.md
- cpp/framework/app_base.cpp
- cpp/framework/app_base.h
- dev/issues/README.md
- ...

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-09 18:11:24 +02:00

184 lines
5.0 KiB
Go

package infra
import (
"strings"
"testing"
)
func TestGenerateTraefikDynamic(t *testing.T) {
t.Run("render con auth y gzip", func(t *testing.T) {
cfg := TraefikDynamicConfig{
Name: "registry-api",
Domain: "registry.organic-machine.com",
UpstreamURL: "http://registry-api:8420",
BasicAuthLine: "lucas:$2a$10$hashedpassword",
EnableGzip: true,
CertResolver: "letsencrypt",
}
got := GenerateTraefikDynamic(cfg)
checks := []string{
"http:",
" routers:",
" registry-api-http:",
` rule: "Host(` + "`registry.organic-machine.com`" + `)"`,
` - "http"`,
` - "registry-api-redirect"`,
` service: "registry-api-service"`,
" registry-api-https:",
` - "https"`,
` - "registry-api-auth"`,
` - "registry-api-gzip"`,
" certResolver: letsencrypt",
" services:",
" registry-api-service:",
` - url: "http://registry-api:8420"`,
" middlewares:",
" registry-api-redirect:",
` scheme: "https"`,
" registry-api-auth:",
" basicAuth:",
" users:",
` - "lucas:$2a$10$hashedpassword"`,
" registry-api-gzip:",
" compress: true",
}
for _, want := range checks {
if !strings.Contains(got, want) {
t.Errorf("missing %q in output:\n%s", want, got)
}
}
})
t.Run("render sin auth", func(t *testing.T) {
cfg := TraefikDynamicConfig{
Name: "myapp",
Domain: "myapp.example.com",
UpstreamURL: "http://myapp:9000",
BasicAuthLine: "",
EnableGzip: true,
CertResolver: "letsencrypt",
}
got := GenerateTraefikDynamic(cfg)
if strings.Contains(got, "basicAuth") {
t.Errorf("expected no basicAuth when BasicAuthLine is empty, got:\n%s", got)
}
if strings.Contains(got, "myapp-auth") {
t.Errorf("expected no myapp-auth middleware when BasicAuthLine is empty, got:\n%s", got)
}
if !strings.Contains(got, "myapp-gzip") {
t.Errorf("expected myapp-gzip middleware, got:\n%s", got)
}
// redirect should always be present
if !strings.Contains(got, "myapp-redirect") {
t.Errorf("expected myapp-redirect middleware, got:\n%s", got)
}
})
t.Run("render sin gzip", func(t *testing.T) {
cfg := TraefikDynamicConfig{
Name: "api",
Domain: "api.example.com",
UpstreamURL: "http://api:8080",
BasicAuthLine: "admin:$2a$10$hash",
EnableGzip: false,
CertResolver: "letsencrypt",
}
got := GenerateTraefikDynamic(cfg)
if strings.Contains(got, "api-gzip") {
t.Errorf("expected no api-gzip middleware when EnableGzip is false, got:\n%s", got)
}
if strings.Contains(got, "compress:") {
t.Errorf("expected no compress section when EnableGzip is false, got:\n%s", got)
}
if !strings.Contains(got, "api-auth") {
t.Errorf("expected api-auth middleware when BasicAuthLine is set, got:\n%s", got)
}
})
t.Run("certResolver custom", func(t *testing.T) {
cfg := TraefikDynamicConfig{
Name: "svc",
Domain: "svc.example.com",
UpstreamURL: "http://svc:7000",
EnableGzip: false,
CertResolver: "myresolver",
}
got := GenerateTraefikDynamic(cfg)
if !strings.Contains(got, "certResolver: myresolver") {
t.Errorf("expected certResolver: myresolver, got:\n%s", got)
}
})
t.Run("certResolver vacio usa letsencrypt por defecto", func(t *testing.T) {
cfg := TraefikDynamicConfig{
Name: "svc",
Domain: "svc.example.com",
UpstreamURL: "http://svc:7000",
CertResolver: "",
}
got := GenerateTraefikDynamic(cfg)
if !strings.Contains(got, "certResolver: letsencrypt") {
t.Errorf("expected certResolver: letsencrypt as default, got:\n%s", got)
}
})
t.Run("snapshot YAML completo replica patron registry_api", func(t *testing.T) {
cfg := TraefikDynamicConfig{
Name: "registry-api",
Domain: "registry.organic-machine.com",
UpstreamURL: "http://registry-api:8420",
BasicAuthLine: "PLACEHOLDER_BASICAUTH_LINE",
EnableGzip: true,
CertResolver: "letsencrypt",
}
got := GenerateTraefikDynamic(cfg)
expected := `http:
routers:
registry-api-http:
rule: "Host(` + "`registry.organic-machine.com`" + `)"
entryPoints:
- "http"
middlewares:
- "registry-api-redirect"
service: "registry-api-service"
registry-api-https:
rule: "Host(` + "`registry.organic-machine.com`" + `)"
entryPoints:
- "https"
middlewares:
- "registry-api-auth"
- "registry-api-gzip"
service: "registry-api-service"
tls:
certResolver: letsencrypt
services:
registry-api-service:
loadBalancer:
servers:
- url: "http://registry-api:8420"
middlewares:
registry-api-redirect:
redirectScheme:
scheme: "https"
registry-api-auth:
basicAuth:
users:
- "PLACEHOLDER_BASICAUTH_LINE"
registry-api-gzip:
compress: true
`
if got != expected {
t.Errorf("snapshot mismatch.\nGOT:\n%s\nWANT:\n%s", got, expected)
}
})
}