// Copyright (c) Tailscale Inc & contributors
// SPDX-License-Identifier: BSD-3-Clause

package wgcfg

import (
	"reflect"
	"testing"
)

// Tests that [Config.Equal] tests all fields of [Config], even ones
// that might get added in the future.
func TestConfigEqual(t *testing.T) {
	rt := reflect.TypeFor[Config]()
	for i := range rt.NumField() {
		sf := rt.Field(i)
		switch sf.Name {
		case "Name", "NodeID", "PrivateKey", "MTU", "Addresses", "DNS", "Peers",
			"NetworkLogging":
			// These are compared in [Config.Equal].
		default:
			t.Errorf("Have you added field %q to Config.Equal? Do so if not, and then update TestConfigEqual", sf.Name)
		}
	}
}

// Tests that [Peer.Equal] tests all fields of [Peer], even ones
// that might get added in the future.
func TestPeerEqual(t *testing.T) {
	rt := reflect.TypeFor[Peer]()
	for i := range rt.NumField() {
		sf := rt.Field(i)
		switch sf.Name {
		case "PublicKey", "DiscoKey", "AllowedIPs", "IsJailed",
			"PersistentKeepalive", "V4MasqAddr", "V6MasqAddr", "WGEndpoint":
			// These are compared in [Peer.Equal].
		default:
			t.Errorf("Have you added field %q to Peer.Equal? Do so if not, and then update TestPeerEqual", sf.Name)
		}
	}
}
