fix integration tests for CLOUDFLAREAPI_SINGLE_REDIRECT

This commit is contained in:
Thomas Limoncelli 2025-11-27 00:06:34 -05:00
parent 4b68c79d4f
commit 779d2f3bef
No known key found for this signature in database
4 changed files with 25 additions and 29 deletions

View file

@ -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 {

View file

@ -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, `, `) + ` }`)
}

View file

@ -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:

View file

@ -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