83 lines
2.6 KiB
Go
83 lines
2.6 KiB
Go
package nginxgateway
|
|
|
|
import (
|
|
"errors"
|
|
"strings"
|
|
"testing"
|
|
|
|
"vpn-platform/backend/internal/nginxconfig"
|
|
)
|
|
|
|
func TestParseManagedEntry(t *testing.T) {
|
|
for _, want := range []nginxconfig.RenderOptions{
|
|
{Domain: "vpn.example.com", Scheme: "https", Port: 443},
|
|
{Domain: "vpn.example.com", Scheme: "https", Port: 8443},
|
|
{Domain: "vpn.example.com", Scheme: "http", Port: 28080},
|
|
{Domain: "121.4.111.208", Scheme: "http", Port: 28080},
|
|
{Domain: "121.4.111.208", Scheme: "https", Port: 28080},
|
|
} {
|
|
httpSite, httpsSite, err := nginxconfig.RenderWithOptions(want, nil, 0)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
got, err := parseManagedEntry(httpSite + httpsSite)
|
|
if err != nil || got != want {
|
|
t.Fatalf("parse managed entry = %+v, %v; want %+v", got, err, want)
|
|
}
|
|
}
|
|
if _, err := parseManagedEntry("server { listen 443 ssl; }"); err == nil {
|
|
t.Fatal("unmanaged site must be rejected")
|
|
}
|
|
}
|
|
|
|
func TestIPCertificateRequiresWebrootCapableCertbot(t *testing.T) {
|
|
for _, version := range []string{"certbot 2.9.0", "certbot 5.3.1", "unknown"} {
|
|
if _, err := ipCertificateArgsForVersion("121.4.111.208", version); err == nil {
|
|
t.Fatalf("accepted unsupported version %q", version)
|
|
}
|
|
}
|
|
args, err := ipCertificateArgsForVersion("121.4.111.208", "certbot 5.4.0")
|
|
if err != nil || strings.Join(args, " ") != "--preferred-profile shortlived --ip-address 121.4.111.208" {
|
|
t.Fatalf("unexpected IP ACME flags %q: %v", args, err)
|
|
}
|
|
if !strings.Contains(renewalHook(), "RENEWED_LINEAGE") || !strings.Contains(renewalHook(), "cert-renewals.log") {
|
|
t.Fatal("deploy hook must record a successful renewal")
|
|
}
|
|
}
|
|
|
|
func TestSwapManagedSiteRestoresPreviousOnFailure(t *testing.T) {
|
|
for _, failAt := range []string{"validate", "reload", "persist"} {
|
|
t.Run(failAt, func(t *testing.T) {
|
|
site := "old"
|
|
validations, reloads := 0, 0
|
|
write := func(content string) error { site = content; return nil }
|
|
validate := func() error {
|
|
validations++
|
|
if failAt == "validate" && site == "new" {
|
|
return errors.New("invalid nginx config")
|
|
}
|
|
return nil
|
|
}
|
|
reload := func() error {
|
|
reloads++
|
|
if failAt == "reload" && site == "new" {
|
|
return errors.New("reload failed")
|
|
}
|
|
return nil
|
|
}
|
|
persist := func() error {
|
|
if failAt == "persist" {
|
|
return errors.New("save failed")
|
|
}
|
|
return nil
|
|
}
|
|
if err := swapManagedSite("old", "new", persist, write, validate, reload); err == nil {
|
|
t.Fatal("expected failure")
|
|
}
|
|
if site != "old" || validations < 2 || reloads < 1 {
|
|
t.Fatalf("old site not restored: site=%s validations=%d reloads=%d", site, validations, reloads)
|
|
}
|
|
})
|
|
}
|
|
}
|