mirror of
https://github.com/StackExchange/dnscontrol.git
synced 2025-12-31 13:16:14 +08:00
# Issue Fixes https://github.com/StackExchange/dnscontrol/issues/3912 # Resolution ``` #!/bin/sh # Reset git fetch origin main git reset --hard origin/main git checkout main git branch -D tlim_moveproviders git checkout -b tlim_moveproviders find . -name \*.bak -delete # Move the *.go files out of providers/ mkdir -p pkg/providers git mv providers/*.go pkg/providers # move the _all file out of providers/ git mv providers/_all pkg/providers/_all # Update the imports (in go.* and the affected files) sed -i.bak -e 's@"github.com/StackExchange/dnscontrol/v4/providers"@"github.com/StackExchange/dnscontrol/v4/pkg/providers"@g' go.* $(fgrep -lr --include '*.go' '"github.com/StackExchange/dnscontrol/v4/providers"' *) sed -i.bak -e 's@"../../providers"@"../../pkg/providers"@g' pkg/normalize/capabilities_test.go sed -i.bak -e 's@"github.com/StackExchange/dnscontrol/v4/providers/_all"@"github.com/StackExchange/dnscontrol/v4/pkg/providers/_all"@g' go.* $(fgrep -lr --include '*.go' '"github.com/StackExchange/dnscontrol/v4/providers/_all"' *) # Fix the docs sed -i.bak -e 's@StackExchange/dnscontrol/blob/main/providers/_all/all.go@StackExchange/dnscontrol/blob/main/pkg/providers/_all/all.go@g' documentation/advanced-features/writing-providers.md sed -i.bak -e 's@StackExchange/dnscontrol/providers@StackExchange/dnscontrol/pkg/providers@g' documentation/advanced-features/writing-providers.md sed -i.bak -e 's@StackExchange/dnscontrol/v4/providers@StackExchange/dnscontrol/v4/pkg/providers@g' documentation/advanced-features/writing-providers.md sed -i.bak -e 's@dnscontrol/providers/providers.go@dnscontrol/pkg/providers/providers.go@g' documentation/advanced-features/writing-providers.md sed -i.bak -e 's@providers/_all/all.go@pkg/providers/_all/all.go@g' documentation/advanced-features/writing-providers.md #sed -i.bak -e 's@@@g' documentation/advanced-features/writing-providers.md #sed -i.bak -e 's@@@g' documentation/advanced-features/writing-providers.md find . -name \*.bak -delete go fmt ./... git status echo git commit -a -m'CHORE: Move Non-provider files in providers to pkg/providers' ```
75 lines
2.1 KiB
Go
75 lines
2.1 KiB
Go
package normalize
|
|
|
|
import (
|
|
"go/ast"
|
|
"go/parser"
|
|
"go/token"
|
|
"sort"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
const (
|
|
providersImportDir = "../../pkg/providers"
|
|
providersPackageName = "providers"
|
|
)
|
|
|
|
func TestCapabilitiesAreFiltered(t *testing.T) {
|
|
// Any capabilities which we wish to whitelist because it's not directly
|
|
// something we can test against.
|
|
skipCheckCapabilities := make(map[string]struct{})
|
|
// skipCheckCapabilities["CanUseBlahBlahBlah"] = struct{}{}
|
|
|
|
fset := token.NewFileSet()
|
|
pkgs, err := parser.ParseDir(fset, providersImportDir, nil, 0)
|
|
if err != nil {
|
|
t.Fatalf("unable to load Go code from providers: %s", err)
|
|
}
|
|
providers, ok := pkgs[providersPackageName]
|
|
if !ok {
|
|
t.Fatalf("did not find package %q in %q", providersPackageName, providersImportDir)
|
|
}
|
|
|
|
constantNames := make([]string, 0, 50)
|
|
capabilityInts := make(map[string]int, 50)
|
|
|
|
// providers.Scope was nil in my testing
|
|
for fileName := range providers.Files {
|
|
scope := providers.Files[fileName].Scope
|
|
for itemName, obj := range scope.Objects {
|
|
if obj.Kind != ast.Con {
|
|
continue
|
|
}
|
|
// In practice, the object.Type is nil here so we can't filter for
|
|
// capabilities so easily.
|
|
if !strings.HasPrefix(itemName, "CanUse") {
|
|
continue
|
|
}
|
|
constantNames = append(constantNames, itemName)
|
|
capabilityInts[itemName] = obj.Data.(int)
|
|
}
|
|
}
|
|
sort.Strings(constantNames)
|
|
|
|
if len(providerCapabilityChecks) == 0 {
|
|
t.Fatal("missing entries in providerCapabilityChecks")
|
|
}
|
|
|
|
capIntsToNames := make(map[int]string, len(providerCapabilityChecks))
|
|
for _, pair := range providerCapabilityChecks {
|
|
for _, cap := range pair.caps {
|
|
capIntsToNames[int(cap)] = pair.rType
|
|
}
|
|
}
|
|
|
|
for _, capName := range constantNames {
|
|
capInt := capabilityInts[capName]
|
|
if _, ok := skipCheckCapabilities[capName]; ok {
|
|
t.Logf("ok: providers.%s (%d) is exempt from checkProviderCapabilities", capName, capInt)
|
|
} else if rType, ok := capIntsToNames[capInt]; ok {
|
|
t.Logf("ok: providers.%s (%d) is checked for with %q", capName, capInt, rType)
|
|
} else {
|
|
t.Errorf("MISSING: providers.%s (%d) is not checked by checkProviderCapabilities", capName, capInt)
|
|
}
|
|
}
|
|
}
|