From 779d2f3befa5f57448ab034ff44d1388f179f852 Mon Sep 17 00:00:00 2001 From: Thomas Limoncelli Date: Thu, 27 Nov 2025 00:06:34 -0500 Subject: [PATCH] fix integration tests for CLOUDFLAREAPI_SINGLE_REDIRECT --- integrationTest/helpers_integration_test.go | 27 ++++++++++++--------- integrationTest/helpers_test.go | 13 +++------- integrationTest/integration_test.go | 10 ++++---- providers/cloudflare/cloudflareProvider.go | 4 +-- 4 files changed, 25 insertions(+), 29 deletions(-) diff --git a/integrationTest/helpers_integration_test.go b/integrationTest/helpers_integration_test.go index a289513f2..29af4e085 100644 --- a/integrationTest/helpers_integration_test.go +++ b/integrationTest/helpers_integration_test.go @@ -13,9 +13,9 @@ import ( "github.com/StackExchange/dnscontrol/v4/models" "github.com/StackExchange/dnscontrol/v4/pkg/nameservers" + "github.com/StackExchange/dnscontrol/v4/pkg/rtypecontrol" "github.com/StackExchange/dnscontrol/v4/pkg/zonerecs" "github.com/StackExchange/dnscontrol/v4/providers" - "github.com/StackExchange/dnscontrol/v4/providers/cloudflare/rtypes/cfsingleredirect" "github.com/miekg/dns/dnsutil" ) @@ -26,6 +26,9 @@ var ( printElapsed = flag.Bool("elapsed", false, "Print elapsed time for each testgroup") ) +// Global variable to hold the current DomainConfig for use in FromRaw calls. +var globalDC *models.DomainConfig + // Helper constants/funcs for the CLOUDFLARE proxy testing: func CfProxyOff() *TestCase { return tc("proxyoff", cfProxyA("prxy", "174.136.107.111", "off")) } @@ -200,6 +203,8 @@ func makeChanges(t *testing.T, prv providers.DNSServiceProvider, dc *models.Doma func runTests(t *testing.T, prv providers.DNSServiceProvider, domainName string, origConfig map[string]string) { dc := getDomainConfigWithNameservers(t, prv, domainName) + globalDC = dc + testGroups := makeTests() firstGroup := *startIdx @@ -334,13 +339,13 @@ func cfProxyCNAME(name, target, status string) *models.RecordConfig { } func cfSingleRedirectEnabled() bool { - return ((*enableCFRedirectMode) != "") + return ((*enableCFRedirectMode) != true) } func cfSingleRedirect(name string, code any, when, then string) *models.RecordConfig { - r := makeRec("@", name, cfsingleredirect.SINGLEREDIRECT) - panicOnErr(cfsingleredirect.FromRaw(r, []any{name, code, when, then})) // Should not happen - return r + rec, err := rtypecontrol.NewRecordConfigFromRaw("CLOUDFLAREAPI_SINGLE_REDIRECT", []any{name, code, when, then}, globalDC) + panicOnErr(err) + return rec } func cfWorkerRoute(pattern, target string) *models.RecordConfig { @@ -350,15 +355,15 @@ func cfWorkerRoute(pattern, target string) *models.RecordConfig { } func cfRedir(pattern, target string) *models.RecordConfig { - t := fmt.Sprintf("%s,%s", pattern, target) - r := makeRec("@", t, "CF_REDIRECT") - return r + rec, err := rtypecontrol.NewRecordConfigFromRaw("CF_REDIRECT", []any{pattern, target}, globalDC) + panicOnErr(err) + return rec } func cfRedirTemp(pattern, target string) *models.RecordConfig { - t := fmt.Sprintf("%s,%s", pattern, target) - r := makeRec("@", t, "CF_TEMP_REDIRECT") - return r + rec, err := rtypecontrol.NewRecordConfigFromRaw("CF_TEMP_REDIRECT", []any{pattern, target}, globalDC) + panicOnErr(err) + return rec } func aghAPassthrough(pattern, target string) *models.RecordConfig { diff --git a/integrationTest/helpers_test.go b/integrationTest/helpers_test.go index 3c174b716..e3d95415b 100644 --- a/integrationTest/helpers_test.go +++ b/integrationTest/helpers_test.go @@ -17,8 +17,8 @@ import ( var ( providerFlag = flag.String("provider", "", "Provider to run (if empty, deduced from -profile)") profileFlag = flag.String("profile", "", "Entry in profiles.json to use (if empty, copied from -provider)") - enableCFWorkers = flag.Bool("cfworkers", true, "Set false to disable CF worker tests") - enableCFRedirectMode = flag.String("cfredirect", "", "cloudflare pagerule tests: default=page_rules, c=convert old to enw, n=new-style, o=none") + enableCFWorkers = flag.Bool("cfworkers", true, "enable CF worker tests (default true)") + enableCFRedirectMode = flag.Bool("cfredirect", false, "enable CF SingleRedirect tests (default false)") ) func init() { @@ -104,15 +104,8 @@ func getProvider(t *testing.T) (providers.DNSServiceProvider, string, map[string if *enableCFWorkers { items = append(items, `"manage_workers": true`) } - switch *enableCFRedirectMode { - case "": - items = append(items, `"manage_redirects": true`) - case "c": - items = append(items, `"manage_redirects": true`) + if *enableCFRedirectMode { items = append(items, `"manage_single_redirects": true`) - case "n": - items = append(items, `"manage_single_redirects": true`) - case "o": } metadata = []byte(`{ ` + strings.Join(items, `, `) + ` }`) } diff --git a/integrationTest/integration_test.go b/integrationTest/integration_test.go index ea2ec93e2..703153326 100644 --- a/integrationTest/integration_test.go +++ b/integrationTest/integration_test.go @@ -2016,11 +2016,6 @@ func makeTests() []*TestGroup { ), ), - // This MUST be the last test. - testgroup("final", - tc("final", txt("final", `TestDNSProviders was successful!`)), - ), - testgroup("SMIMEA", requires(providers.CanUseSMIMEA), tc("SMIMEA record", smimea("_443._tcp", 3, 1, 1, sha256hash)), @@ -2030,6 +2025,11 @@ func makeTests() []*TestGroup { tc("SMIMEA change certificate", smimea("_443._tcp", 2, 0, 2, reversedSha512)), ), + // This MUST be the last test. + testgroup("final", + tc("final", txt("final", `TestDNSProviders was successful!`)), + ), + // Narrative: Congrats! You're done! If you've made it this far // you're very close to being able to submit your PR. Here's // some tips: diff --git a/providers/cloudflare/cloudflareProvider.go b/providers/cloudflare/cloudflareProvider.go index 9c7b4e901..5837544a3 100644 --- a/providers/cloudflare/cloudflareProvider.go +++ b/providers/cloudflare/cloudflareProvider.go @@ -364,8 +364,6 @@ func (c *cloudflareProvider) mkDeleteCorrection(recType string, origRec *models. case "CLOUDFLAREAPI_SINGLE_REDIRECT": idTxt = origRec.Original.(cloudflare.RulesetRule).ID default: - //fmt.Printf("DEBUG: %q rec=%+v origRec.Original type is %T\n", recType, *origRec, origRec.Original) - fmt.Printf("SHOULD NOT HAPPEN: %q origRec.Original type is %T\n", recType, origRec.Original) idTxt = origRec.Original.(cloudflare.DNSRecord).ID } msg = msg + color.RedString(" id=%v", idTxt) @@ -567,7 +565,7 @@ func (c *cloudflareProvider) preprocessConfig(dc *models.DomainConfig) error { if rec.Type == "CLOUDFLAREAPI_SINGLE_REDIRECT" { // SINGLEREDIRECT record types. Verify they are enabled. if !c.manageSingleRedirects { - return errors.New("you must add 'manage_single_redirects: true' metadata to cloudflare provider to use CF_SINGLE__REDIRECT records") + return errors.New("you must add 'manage_single_redirects: true' metadata to cloudflare provider to use CLOUDFLAREAPI_SINGLE_REDIRECT records") } } else if rec.Type == "CF_WORKER_ROUTE" { // CF_WORKER_ROUTE record types. Encode target as $PATTERN,$SCRIPT