Tailscale exit nodes provide DNS service over the peer API, however IsWireGuardOnly nodes do not have a peer API, and instead need client DNS parameters passed in their node description. For Mullvad nodes this will contain the in network 10.64.0.1 address. Updates #9377 Signed-off-by: James Tucker <james@tailscale.com>main
parent
335a5aaf9a
commit
e7727db553
@ -0,0 +1,81 @@ |
||||
// Copyright (c) Tailscale Inc & AUTHORS
|
||||
// SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
package dnstype |
||||
|
||||
import ( |
||||
"net/netip" |
||||
"reflect" |
||||
"slices" |
||||
"sort" |
||||
"testing" |
||||
) |
||||
|
||||
func TestResolverEqual(t *testing.T) { |
||||
var fieldNames []string |
||||
for _, field := range reflect.VisibleFields(reflect.TypeOf(Resolver{})) { |
||||
fieldNames = append(fieldNames, field.Name) |
||||
} |
||||
sort.Strings(fieldNames) |
||||
if !slices.Equal(fieldNames, []string{"Addr", "BootstrapResolution"}) { |
||||
t.Errorf("Resolver fields changed; update test") |
||||
} |
||||
|
||||
tests := []struct { |
||||
name string |
||||
a, b *Resolver |
||||
want bool |
||||
}{ |
||||
{ |
||||
name: "nil", |
||||
a: nil, |
||||
b: nil, |
||||
want: true, |
||||
}, |
||||
{ |
||||
name: "nil vs non-nil", |
||||
a: nil, |
||||
b: &Resolver{}, |
||||
want: false, |
||||
}, |
||||
{ |
||||
name: "non-nil vs nil", |
||||
a: &Resolver{}, |
||||
b: nil, |
||||
want: false, |
||||
}, |
||||
{ |
||||
name: "equal", |
||||
a: &Resolver{Addr: "dns.example.com"}, |
||||
b: &Resolver{Addr: "dns.example.com"}, |
||||
want: true, |
||||
}, |
||||
{ |
||||
name: "not equal addrs", |
||||
a: &Resolver{Addr: "dns.example.com"}, |
||||
b: &Resolver{Addr: "dns2.example.com"}, |
||||
want: false, |
||||
}, |
||||
{ |
||||
name: "not equal bootstrap", |
||||
a: &Resolver{ |
||||
Addr: "dns.example.com", |
||||
BootstrapResolution: []netip.Addr{netip.MustParseAddr("8.8.8.8")}, |
||||
}, |
||||
b: &Resolver{ |
||||
Addr: "dns.example.com", |
||||
BootstrapResolution: []netip.Addr{netip.MustParseAddr("8.8.4.4")}, |
||||
}, |
||||
want: false, |
||||
}, |
||||
} |
||||
|
||||
for _, tt := range tests { |
||||
t.Run(tt.name, func(t *testing.T) { |
||||
got := tt.a.Equal(tt.b) |
||||
if got != tt.want { |
||||
t.Errorf("got %v; want %v", got, tt.want) |
||||
} |
||||
}) |
||||
} |
||||
} |
||||
Loading…
Reference in new issue