mirror of
https://github.com/safing/portmaster
synced 2025-09-01 18:19:12 +00:00
67 lines
1.8 KiB
Go
67 lines
1.8 KiB
Go
package patrol
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"sort"
|
|
"testing"
|
|
)
|
|
|
|
var enableDomainTools = "no" // change to "yes" to enable
|
|
|
|
// TestCleanDomains checks, cleans and prints an improved domain list.
|
|
// Run with:
|
|
// go test -run ^TestCleanDomains$ github.com/safing/portmaster/spn/patrol -ldflags "-X github.com/safing/portmaster/spn/patrol.enableDomainTools=yes" -timeout 3h -v
|
|
// This is provided as a test for easier maintenance and ops.
|
|
func TestCleanDomains(t *testing.T) { //nolint:paralleltest
|
|
if enableDomainTools != "yes" {
|
|
t.Skip()
|
|
return
|
|
}
|
|
|
|
// Setup context.
|
|
ctx := context.Background()
|
|
|
|
// Go through all domains and check if they are reachable.
|
|
goodDomains := make([]string, 0, len(testDomains))
|
|
for _, domain := range testDomains {
|
|
// Check if domain is reachable.
|
|
code, err := domainIsUsable(ctx, domain)
|
|
if err != nil {
|
|
fmt.Printf("FAIL: %s: %s\n", domain, err)
|
|
} else {
|
|
fmt.Printf("OK: %s [%d]\n", domain, code)
|
|
goodDomains = append(goodDomains, domain)
|
|
continue
|
|
}
|
|
|
|
// If failed, try again with a www. prefix
|
|
wwwDomain := "www." + domain
|
|
code, err = domainIsUsable(ctx, wwwDomain)
|
|
if err != nil {
|
|
fmt.Printf("FAIL: %s: %s\n", wwwDomain, err)
|
|
} else {
|
|
fmt.Printf("OK: %s [%d]\n", wwwDomain, code)
|
|
goodDomains = append(goodDomains, wwwDomain)
|
|
}
|
|
|
|
}
|
|
|
|
sort.Strings(goodDomains)
|
|
fmt.Println("printing good domains:")
|
|
for _, domain := range goodDomains {
|
|
fmt.Printf("%q,\n", domain)
|
|
}
|
|
|
|
fmt.Println("IMPORTANT: do not forget to go through list and check if everything looks good")
|
|
}
|
|
|
|
func domainIsUsable(ctx context.Context, domain string) (statusCode int, err error) {
|
|
// Try IPv6 first as it is way more likely to fail.
|
|
statusCode, err = CheckHTTPSConnection(ctx, "tcp6", domain)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
return CheckHTTPSConnection(ctx, "tcp4", domain)
|
|
}
|