package nginxgateway import ( "errors" "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}, } { 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 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) } }) } }