tailscale/types/dnstype/dnstype_test.go

82 lines
1.6 KiB
Go

// 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.TypeFor[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)
}
})
}
}