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 <james@tailscale.com>
This commit is contained in:
James Tucker 2023-11-15 11:50:13 -08:00 committed by James Tucker
parent b8ac3c5191
commit 245ddb157b
2 changed files with 17 additions and 1 deletions

View File

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

View File

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