config: watch a target listed twice only once (closes #207)
check / check (push) Successful in 1m29s

ClassifyTargets kept a name every time it appeared in DNSWATCHER_TARGETS,
so example.com,Example.com. put example.com in the domain list twice and
every check looked it up, checked its ports and its certificates twice,
sending two expiry warnings per TLS check. It now skips a name it has
already kept, comparing after the lower-casing and trailing-dot removal
it already did; the list keeps the order of first appearance.

Model: opus-5-5
This commit is contained in:
2026-10-02 00:26:36 +00:00
parent c9510a986c
commit 672bfd4688
4 changed files with 35 additions and 3 deletions
+24
View File
@@ -1,6 +1,7 @@
package config_test
import (
"slices"
"testing"
"sneak.berlin/go/dnswatcher/internal/config"
@@ -93,6 +94,29 @@ func TestClassifyTargets(t *testing.T) {
}
}
func TestClassifyTargetsKeepsEachNameOnce(t *testing.T) {
t.Parallel()
domains, hostnames, err := config.ClassifyTargets([]string{
"example.org",
"Example.org.",
"www.example.org",
"EXAMPLE.ORG",
"WWW.Example.org.",
})
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if !slices.Equal(domains, []string{"example.org"}) {
t.Errorf("domains = %v, want [example.org]", domains)
}
if !slices.Equal(hostnames, []string{"www.example.org"}) {
t.Errorf("hostnames = %v, want [www.example.org]", hostnames)
}
}
func TestClassifyTargetsRejectsPublicSuffix(t *testing.T) {
t.Parallel()