package cloudflare import "testing" func TestStoredTunnelStartsWithoutPublicIngress(t *testing.T) { stored := StoredTunnel{Credentials: Credentials{AccountTag: "account", TunnelSecret: "secret", TunnelID: "tunnel"}, Config: NewConfig("tunnel")} values, err := stored.Values() if err != nil { t.Fatal(err) } parsed, present, err := ParseStoredTunnel(values) if err != nil || !present || len(parsed.Config.Ingress) != 1 || parsed.Config.Ingress[0].Service != "http_status:404" { t.Fatal("new tunnel state must contain only the terminal ingress rule") } } func TestStoredTunnelRejectsLegacyOrPartialState(t *testing.T) { for _, values := range []map[string]string{ {"token": "legacy-run-token"}, {"credentials.json": "{}"}, } { if _, _, err := ParseStoredTunnel(values); err == nil { t.Fatal("ambiguous tunnel state was accepted") } } } func TestRouteConfigAddAndRemoveAreIdempotent(t *testing.T) { config := NewConfig("tunnel") route, err := NewRoute("app.example.test", "http://service.default.svc:8080") if err != nil { t.Fatal(err) } changed, err := config.AddRoute(route) if err != nil || !changed || len(config.Ingress) != 2 { t.Fatal("route was not added before the terminal ingress") } changed, err = config.AddRoute(route) if err != nil || changed { t.Fatal("matching route add was not idempotent") } changed, err = config.RemoveRoute(route) if err != nil || !changed || len(config.Ingress) != 1 || config.Ingress[0].Service != "http_status:404" { t.Fatal("route removal did not preserve the terminal ingress") } changed, err = config.RemoveRoute(route) if err != nil || changed { t.Fatal("matching route remove was not idempotent") } }