Add explicit address resolution alias

This commit is contained in:
Virgil 2026-04-04 02:16:14 +00:00
parent 1810959b89
commit b417373f5b
3 changed files with 39 additions and 5 deletions

View file

@ -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
}

View file

@ -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")

View file

@ -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{