feat(dns): parse typed chain alias discovery results

Co-Authored-By: Virgil <virgil@lethean.io>
This commit is contained in:
Virgil 2026-04-03 23:53:18 +00:00
parent edb852ce23
commit 3af5018f35
2 changed files with 70 additions and 0 deletions

View file

@ -414,6 +414,34 @@ func parseActionAliasList(value any) ([]string, error) {
return normalizeAliasList([]string{aliases}), nil
case []string:
return normalizeAliasList(aliases), nil
case []map[string]any:
parsed := make([]string, 0, len(aliases))
for _, alias := range aliases {
name, err := parseActionAliasRecord(alias)
if err != nil {
return nil, err
}
if name != "" {
parsed = append(parsed, name)
}
}
return normalizeAliasList(parsed), nil
case []map[string]string:
parsed := make([]string, 0, len(aliases))
for _, alias := range aliases {
normalized := map[string]any{}
for key, value := range alias {
normalized[key] = value
}
name, err := parseActionAliasRecord(normalized)
if err != nil {
return nil, err
}
if name != "" {
parsed = append(parsed, name)
}
}
return normalizeAliasList(parsed), nil
case []any:
parsed := make([]string, 0, len(aliases))
for _, item := range aliases {

View file

@ -3182,6 +3182,48 @@ func TestStringActionValueRejectsWhitespaceOnlyArgument(t *testing.T) {
}
}
func TestParseActionAliasListAcceptsMapSliceTypedAny(t *testing.T) {
aliases, err := parseActionAliasList([]map[string]any{
{
"hns": "gateway.charon.lthn",
},
{
"name": "node",
"comment": "node alias hns=node.charon.lthn",
},
})
if err != nil {
t.Fatalf("unexpected typed map slice parse error: %v", err)
}
if len(aliases) != 2 {
t.Fatalf("expected two aliases, got %#v", aliases)
}
if aliases[0] != "gateway.charon.lthn" || aliases[1] != "node.charon.lthn" {
t.Fatalf("unexpected alias parsing result: %#v", aliases)
}
}
func TestParseActionAliasListAcceptsStringMapSlice(t *testing.T) {
aliases, err := parseActionAliasList([]map[string]string{
{
"hns": "gateway.charon.lthn",
},
{
"name": "node",
"comment": "node alias hns=node.charon.lthn",
},
})
if err != nil {
t.Fatalf("unexpected typed string map slice parse error: %v", err)
}
if len(aliases) != 2 {
t.Fatalf("expected two aliases, got %#v", aliases)
}
if aliases[0] != "gateway.charon.lthn" || aliases[1] != "node.charon.lthn" {
t.Fatalf("unexpected alias parsing result: %#v", aliases)
}
}
func TestNormalizeNameAndNormalizeIPArePublicWrappers(t *testing.T) {
normalizedName := NormalizeName(" Gateway.Charon.lthn. ")
if normalizedName != "gateway.charon.lthn" {