MCPcopy Index your code
hub / github.com/coder/coder / TestTailnet

Function TestTailnet

tailnet/conn_test.go:27–248  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

25}
26
27func TestTailnet(t *testing.T) {
28 t.Parallel()
29 derpMap, _ := tailnettest.RunDERPAndSTUN(t)
30 t.Run("InstantClose", func(t *testing.T) {
31 t.Parallel()
32 logger := testutil.Logger(t)
33 conn, err := tailnet.NewConn(&tailnet.Options{
34 Addresses: []netip.Prefix{tailnet.TailscaleServicePrefix.RandomPrefix()},
35 Logger: logger.Named("w1"),
36 DERPMap: derpMap,
37 })
38 require.NoError(t, err)
39 err = conn.Close()
40 require.NoError(t, err)
41 })
42 t.Run("Connect", func(t *testing.T) {
43 t.Parallel()
44 logger := testutil.Logger(t)
45 ctx := testutil.Context(t, testutil.WaitLong)
46 w1IP := tailnet.TailscaleServicePrefix.RandomAddr()
47 w1, err := tailnet.NewConn(&tailnet.Options{
48 Addresses: []netip.Prefix{netip.PrefixFrom(w1IP, 128)},
49 Logger: logger.Named("w1"),
50 DERPMap: derpMap,
51 })
52 require.NoError(t, err)
53
54 w2, err := tailnet.NewConn(&tailnet.Options{
55 Addresses: []netip.Prefix{tailnet.TailscaleServicePrefix.RandomPrefix()},
56 Logger: logger.Named("w2"),
57 DERPMap: derpMap,
58 })
59 require.NoError(t, err)
60 t.Cleanup(func() {
61 _ = w1.Close()
62 _ = w2.Close()
63 })
64 stitch(t, w2, w1)
65 stitch(t, w1, w2)
66 require.True(t, w2.AwaitReachable(context.Background(), w1IP))
67 conn := make(chan struct{}, 1)
68 listenDone := make(chan struct{})
69 go func() {
70 listener, err := w1.Listen("tcp", ":35565")
71 if !assert.NoError(t, err) {
72 return
73 }
74 close(listenDone)
75 defer listener.Close()
76 nc, err := listener.Accept()
77 if !assert.NoError(t, err) {
78 return
79 }
80 _ = nc.Close()
81 conn <- struct{}{}
82 }()
83
84 _ = testutil.TryReceive(ctx, t, listenDone)

Callers

nothing calls this directly

Calls 15

CloseMethod · 0.95
AwaitReachableMethod · 0.95
ListenMethod · 0.95
DialContextTCPMethod · 0.95
SetNodeCallbackMethod · 0.95
PingMethod · 0.95
RunDERPAndSTUNFunction · 0.92
LoggerFunction · 0.92
NewConnFunction · 0.92
ContextFunction · 0.92
TryReceiveFunction · 0.92
RunDERPOnlyWebSocketsFunction · 0.92

Tested by

no test coverage detected