tailscale/net/packet/geneve_test.go
Jordan Whited 16bc0a5558
net/{batching,packet},wgengine/magicsock: export batchingConn (#16848)
For eventual use by net/udprelay.Server.

Updates tailscale/corp#31164

Signed-off-by: Jordan Whited <jordan@tailscale.com>
2025-08-13 13:13:11 -07:00

85 lines
1.4 KiB
Go

// Copyright (c) Tailscale Inc & AUTHORS
// SPDX-License-Identifier: BSD-3-Clause
package packet
import (
"math"
"testing"
"github.com/google/go-cmp/cmp"
"github.com/google/go-cmp/cmp/cmpopts"
"tailscale.com/types/ptr"
)
func TestGeneveHeader(t *testing.T) {
in := GeneveHeader{
Version: 3,
Protocol: GeneveProtocolDisco,
Control: true,
}
in.VNI.Set(1<<24 - 1)
b := make([]byte, GeneveFixedHeaderLength)
err := in.Encode(b)
if err != nil {
t.Fatal(err)
}
out := GeneveHeader{}
err = out.Decode(b)
if err != nil {
t.Fatal(err)
}
if diff := cmp.Diff(out, in, cmpopts.EquateComparable(VirtualNetworkID{})); diff != "" {
t.Fatalf("wrong results (-got +want)\n%s", diff)
}
}
func TestVirtualNetworkID(t *testing.T) {
tests := []struct {
name string
set *uint32
want uint32
}{
{
"don't Set",
nil,
0,
},
{
"Set 0",
ptr.To(uint32(0)),
0,
},
{
"Set 1",
ptr.To(uint32(1)),
1,
},
{
"Set math.MaxUint32",
ptr.To(uint32(math.MaxUint32)),
1<<24 - 1,
},
{
"Set max 3-byte value",
ptr.To(uint32(1<<24 - 1)),
1<<24 - 1,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
v := VirtualNetworkID{}
if tt.set != nil {
v.Set(*tt.set)
}
if v.IsSet() != (tt.set != nil) {
t.Fatalf("IsSet: %v != wantIsSet: %v", v.IsSet(), tt.set != nil)
}
if v.Get() != tt.want {
t.Fatalf("Get(): %v != want: %v", v.Get(), tt.want)
}
})
}
}