MCPcopy
hub / github.com/tailscale/tailscale / TestInteropServer

Function TestInteropServer

control/controlbase/interop_test.go:67–112  ·  view source on GitHub ↗

Can our client talk to a reference Noise IK server?

(t *testing.T)

Source from the content-addressed store, hash-verified

65
66// Can our client talk to a reference Noise IK server?
67func TestInteropServer(t *testing.T) {
68 var (
69 s1, s2 = memnet.NewConn("noise", 128000)
70 controlKey = key.NewMachine()
71 machineKey = key.NewMachine()
72 clientErr = make(chan error, 2)
73 clientBytes = make(chan []byte, 1)
74 c2s = "client>server"
75 s2c = "server>client"
76 )
77
78 go func() {
79 client, err := Client(context.Background(), s1, machineKey, controlKey.Public(), testProtocolVersion)
80 clientErr <- err
81 if err != nil {
82 return
83 }
84 _, err = client.Write([]byte(c2s))
85 if err != nil {
86 clientErr <- err
87 return
88 }
89 var buf [1024]byte
90 _, err = io.ReadFull(client, buf[:len(s2c)])
91 clientBytes <- buf[:len(s2c)]
92 clientErr <- err
93 }()
94
95 gotC2S, err := noiseExplorerServer(s2, controlKey, machineKey.Public(), []byte(s2c))
96 if err != nil {
97 t.Fatalf("failed server interop: %v", err)
98 }
99 if string(gotC2S) != c2s {
100 t.Fatalf("server sent unexpected data %q, want %q", string(gotC2S), c2s)
101 }
102
103 if err := <-clientErr; err != nil {
104 t.Fatalf("client handshake failed: %v", err)
105 }
106 if err := <-clientErr; err != nil {
107 t.Fatalf("client read/write failed: %v", err)
108 }
109 if got := string(<-clientBytes); got != s2c {
110 t.Fatalf("client received %q, want %q", got, s2c)
111 }
112}
113
114// noiseExplorerClient uses the Noise Explorer implementation of Noise
115// IK to handshake as a Noise client on conn, transmit payload, and

Callers

nothing calls this directly

Calls 7

NewConnFunction · 0.92
NewMachineFunction · 0.92
noiseExplorerServerFunction · 0.85
ClientFunction · 0.70
WriteMethod · 0.65
FatalfMethod · 0.65
PublicMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…