From 9b077efe4e8544402dd50f40870ac9f520c140f2 Mon Sep 17 00:00:00 2001 From: Virgil Date: Fri, 3 Apr 2026 23:32:52 +0000 Subject: [PATCH] feat(dns): default serve ports from configured values when unset Co-Authored-By: Virgil --- serve.go | 7 +++++-- service_test.go | 28 ++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/serve.go b/serve.go index cb75643..10e448b 100644 --- a/serve.go +++ b/serve.go @@ -171,6 +171,9 @@ func (service *Service) Serve(bind string, port int) (*DNSServer, error) { if bind == "" { bind = "127.0.0.1" } + if port <= 0 { + port = service.ResolveDNSPort() + } addr := net.JoinHostPort(bind, strconv.Itoa(port)) udpListener, err := net.ListenPacket("udp", addr) @@ -213,8 +216,8 @@ func (service *Service) Serve(bind string, port int) (*DNSServer, error) { // defer func() { _ = runtime.Close() }() // fmt.Println("dns:", runtime.DNSAddress(), "health:", runtime.HealthAddress()) func (service *Service) ServeAll(bind string, dnsPort int, httpPort int) (*ServiceRuntime, error) { - if dnsPort == 0 { - dnsPort = service.dnsPort + if dnsPort <= 0 { + dnsPort = service.resolveServePort() } if httpPort <= 0 { httpPort = service.resolveHTTPPort() diff --git a/service_test.go b/service_test.go index 06f113e..68bba2a 100644 --- a/service_test.go +++ b/service_test.go @@ -638,6 +638,34 @@ func TestServiceServeConfiguredUsesPortsFromServiceOptions(t *testing.T) { } } +func TestServiceServeDefaultsPortWhenZero(t *testing.T) { + const configuredDNSPort = 5353 + service := NewService(ServiceOptions{ + DNSPort: configuredDNSPort, + Records: map[string]NameRecords{ + "gateway.charon.lthn": { + A: []string{"10.10.10.10"}, + }, + }, + }) + + server, err := service.Serve("127.0.0.1", 0) + if err != nil { + t.Fatalf("expected Serve to default DNS port: %v", err) + } + defer func() { + _ = server.Close() + }() + + _, port, err := net.SplitHostPort(server.DNSAddress()) + if err != nil { + t.Fatalf("expected DNS address to parse: %v", err) + } + if port != strconv.Itoa(configuredDNSPort) { + t.Fatalf("expected zero port to default to configured service DNS port %d, got %s", configuredDNSPort, port) + } +} + func TestServiceDiscoverReplacesRecordsFromDiscoverer(t *testing.T) { records := []map[string]NameRecords{ {