From b417373f5bf33fb3fb22023af669c879c8f28e80 Mon Sep 17 00:00:00 2001 From: Virgil Date: Sat, 4 Apr 2026 02:16:14 +0000 Subject: [PATCH] Add explicit address resolution alias --- action.go | 4 ++-- service.go | 13 ++++++++++--- service_test.go | 27 +++++++++++++++++++++++++++ 3 files changed, 39 insertions(+), 5 deletions(-) diff --git a/action.go b/action.go index 1f98091..c2431a1 100644 --- a/action.go +++ b/action.go @@ -49,7 +49,7 @@ type ActionDefinition struct { // ActionRegistrar publishes DNS actions into another Core surface. // // registrar.RegisterAction(ActionResolve, func(values map[string]any) (any, bool, error) { -// return service.ResolveAddress("gateway.charon.lthn") +// return service.ResolveAddresses("gateway.charon.lthn") // }) type ActionRegistrar interface { RegisterAction(name string, invoke func(map[string]any) (any, bool, error)) @@ -254,7 +254,7 @@ func (service *Service) handleResolveAddress(ctx context.Context, values map[str if err != nil { return nil, false, err } - result, ok := service.ResolveAddress(host) + result, ok := service.ResolveAddresses(host) if !ok { return nil, false, nil } diff --git a/service.go b/service.go index b4270bf..33851f8 100644 --- a/service.go +++ b/service.go @@ -960,10 +960,10 @@ func (service *Service) refreshDerivedStateLocked() { service.zoneApex = computeZoneApex(service.records) } -// ResolveAddress returns A and AAAA values merged into one address list. +// ResolveAddresses returns A and AAAA values merged into one address list. // -// addresses, ok := service.ResolveAddress("gateway.charon.lthn") -func (service *Service) ResolveAddress(name string) (ResolveAddressResult, bool) { +// addresses, ok := service.ResolveAddresses("gateway.charon.lthn") +func (service *Service) ResolveAddresses(name string) (ResolveAddressResult, bool) { if service == nil { return ResolveAddressResult{}, false } @@ -976,6 +976,13 @@ func (service *Service) ResolveAddress(name string) (ResolveAddressResult, bool) }, true } +// ResolveAddress is a compatibility alias for ResolveAddresses. +// +// addresses, ok := service.ResolveAddress("gateway.charon.lthn") +func (service *Service) ResolveAddress(name string) (ResolveAddressResult, bool) { + return service.ResolveAddresses(name) +} + // ResolveReverse returns the names that map back to an IP address. // // names, ok := service.ResolveReverse("10.10.10.10") diff --git a/service_test.go b/service_test.go index 752d624..b849d11 100644 --- a/service_test.go +++ b/service_test.go @@ -130,6 +130,33 @@ func TestServiceOptionsAliasBuildsService(t *testing.T) { } } +func TestServiceResolveAddressesAliasMatchesResolveAddress(t *testing.T) { + service := NewService(ServiceOptions{ + Records: map[string]NameRecords{ + "gateway.charon.lthn": { + A: []string{"10.10.10.10"}, + AAAA: []string{"2001:db8::10"}, + }, + }, + }) + + addresses, ok := service.ResolveAddresses("gateway.charon.lthn") + if !ok { + t.Fatal("expected explicit addresses alias to resolve") + } + if len(addresses.Addresses) != 2 { + t.Fatalf("expected merged A and AAAA values, got %#v", addresses.Addresses) + } + + compat, ok := service.ResolveAddress("gateway.charon.lthn") + if !ok { + t.Fatal("expected compatibility alias to resolve") + } + if len(compat.Addresses) != len(addresses.Addresses) { + t.Fatalf("expected compatibility alias to match explicit alias, got %#v and %#v", compat.Addresses, addresses.Addresses) + } +} + func TestNewDNSServiceAliasToExistingConstructor(t *testing.T) { service := NewDNSService(ServiceOptions{ Records: map[string]NameRecords{