From 245ddb157b6d86a0e173f0b2584e043b0cfb1461 Mon Sep 17 00:00:00 2001 From: James Tucker Date: Wed, 15 Nov 2023 11:50:13 -0800 Subject: [PATCH] appc: fix DomainRoutes copy The non-referential copy destination doesn't extend the map contents, but also the read of a non-key is returning a zero value not bound to the map contents in any way. Updates tailscale/corp#15657 Signed-off-by: James Tucker --- appc/appconnector.go | 2 +- appc/appconnector_test.go | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/appc/appconnector.go b/appc/appconnector.go index a0c3ca65f..9b8398811 100644 --- a/appc/appconnector.go +++ b/appc/appconnector.go @@ -113,7 +113,7 @@ func (e *AppConnector) DomainRoutes() map[string][]netip.Addr { drCopy := make(map[string][]netip.Addr) for k, v := range e.domains { - copy(drCopy[k], v) + drCopy[k] = append(drCopy[k], v...) } return drCopy diff --git a/appc/appconnector_test.go b/appc/appconnector_test.go index 002f16f1c..9614e0602 100644 --- a/appc/appconnector_test.go +++ b/appc/appconnector_test.go @@ -5,6 +5,7 @@ package appc import ( "net/netip" + "reflect" "slices" "testing" @@ -35,6 +36,21 @@ func TestUpdateDomains(t *testing.T) { } } +func TestDomainRoutes(t *testing.T) { + rc := &routeCollector{} + a := NewAppConnector(t.Logf, rc) + a.UpdateDomains([]string{"example.com"}) + a.ObserveDNSResponse(dnsResponse("example.com.", "192.0.0.8")) + + want := map[string][]netip.Addr{ + "example.com": {netip.MustParseAddr("192.0.0.8")}, + } + + if got := a.DomainRoutes(); !reflect.DeepEqual(got, want) { + t.Fatalf("DomainRoutes: got %v, want %v", got, want) + } +} + func TestObserveDNSResponse(t *testing.T) { rc := &routeCollector{} a := NewAppConnector(t.Logf, rc)