forked from tailscale/tailscale
-
Notifications
You must be signed in to change notification settings - Fork 0
/
userspace_ext_test.go
92 lines (81 loc) · 1.99 KB
/
userspace_ext_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
// Copyright (c) 2021 Tailscale Inc & AUTHORS All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package wgengine_test
import (
"testing"
"golang.zx2c4.com/wireguard/tun"
"tailscale.com/net/tstun"
"tailscale.com/types/logger"
"tailscale.com/wgengine"
"tailscale.com/wgengine/netstack"
"tailscale.com/wgengine/router"
)
func TestIsNetstack(t *testing.T) {
e, err := wgengine.NewUserspaceEngine(t.Logf, wgengine.Config{})
if err != nil {
t.Fatal(err)
}
defer e.Close()
if !wgengine.IsNetstack(e) {
t.Errorf("IsNetstack = false; want true")
}
}
func TestIsNetstackRouter(t *testing.T) {
tests := []struct {
name string
conf wgengine.Config
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: netstack.NewSubnetRouterWrapper(newFakeOSRouter()),
},
want: true,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
e, err := wgengine.NewUserspaceEngine(logger.Discard, tt.conf)
if err != nil {
t.Fatal(err)
}
defer e.Close()
if got := wgengine.IsNetstackRouter(e); got != tt.want {
t.Errorf("IsNetstackRouter = %v; want %v", got, tt.want)
}
if got := wgengine.IsNetstackRouter(wgengine.NewWatchdog(e)); got != tt.want {
t.Errorf("IsNetstackRouter(watchdog-wrapped) = %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 }