Something went wrong. Try again.
forked from tailscale/tailscale
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109// Copyright (c) Tailscale Inc & contributors// SPDX-License-Identifier: BSD-3-Clause
package wgengine_test
import ( "testing"
"github.com/tailscale/wireguard-go/tun" "tailscale.com/net/tstun" "tailscale.com/tsd" "tailscale.com/tstest" "tailscale.com/types/logger" "tailscale.com/wgengine" "tailscale.com/wgengine/router")
func TestIsNetstack(t *testing.T) { sys := tsd.NewSystem() e, err := wgengine.NewUserspaceEngine( tstest.WhileTestRunningLogger(t), wgengine.Config{ SetSubsystem: sys.Set, HealthTracker: sys.HealthTracker.Get(), Metrics: sys.UserMetricsRegistry(), EventBus: sys.Bus.Get(), }, ) if err != nil { t.Fatal(err) } defer e.Close() if !sys.IsNetstack() { t.Errorf("IsNetstack = false; want true") }}
func TestIsNetstackRouter(t *testing.T) { tests := []struct { name string conf wgengine.Config setNetstackRouter bool want bool }{ { name: "no_netstack", conf: wgengine.Config{ Tun: newFakeOSTUN(), Router: newFakeOSRouter(), }, want: false, }, { name: "netstack", conf: wgengine.Config{}, want: true, }, { name: "hybrid_netstack", conf: wgengine.Config{ Tun: newFakeOSTUN(), Router: newFakeOSRouter(), }, setNetstackRouter: true, want: true, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { sys := tsd.NewSystem() if tt.setNetstackRouter { sys.NetstackRouter.Set(true) } conf := tt.conf conf.SetSubsystem = sys.Set conf.HealthTracker = sys.HealthTracker.Get() conf.Metrics = sys.UserMetricsRegistry() conf.EventBus = sys.Bus.Get() e, err := wgengine.NewUserspaceEngine(logger.Discard, conf) if err != nil { t.Fatal(err) } defer e.Close() if got := sys.IsNetstackRouter(); got != tt.want { t.Errorf("IsNetstackRouter = %v; want %v", got, tt.want) } }) }}
func newFakeOSRouter() router.Router { return someRandoOSRouter{router.NewFake(logger.Discard)}}
type someRandoOSRouter struct { router.Router}
func newFakeOSTUN() tun.Device { return someRandoOSTUN{tstun.NewFake()}}
type someRandoOSTUN struct { tun.Device}
// Name returns something that is not FakeTUN.func (t someRandoOSTUN) Name() (string, error) { return "some_os_tun0", nil }