MCPcopy
hub / github.com/tailscale/tailscale / TestInteropClient

Function TestInteropClient

control/controlbase/interop_test.go:19–64  ·  view source on GitHub ↗

Can a reference Noise IK client talk to our server?

(t *testing.T)

Source from the content-addressed store, hash-verified

17
18// Can a reference Noise IK client talk to our server?
19func TestInteropClient(t *testing.T) {
20 var (
21 s1, s2 = memnet.NewConn("noise", 128000)
22 controlKey = key.NewMachine()
23 machineKey = key.NewMachine()
24 serverErr = make(chan error, 2)
25 serverBytes = make(chan []byte, 1)
26 c2s = "client>server"
27 s2c = "server>client"
28 )
29
30 go func() {
31 server, err := Server(context.Background(), s2, controlKey, nil)
32 serverErr <- err
33 if err != nil {
34 return
35 }
36 var buf [1024]byte
37 _, err = io.ReadFull(server, buf[:len(c2s)])
38 serverBytes <- buf[:len(c2s)]
39 if err != nil {
40 serverErr <- err
41 return
42 }
43 _, err = server.Write([]byte(s2c))
44 serverErr <- err
45 }()
46
47 gotS2C, err := noiseExplorerClient(s1, controlKey.Public(), machineKey, []byte(c2s))
48 if err != nil {
49 t.Fatalf("failed client interop: %v", err)
50 }
51 if string(gotS2C) != s2c {
52 t.Fatalf("server sent unexpected data %q, want %q", string(gotS2C), s2c)
53 }
54
55 if err := <-serverErr; err != nil {
56 t.Fatalf("server handshake failed: %v", err)
57 }
58 if err := <-serverErr; err != nil {
59 t.Fatalf("server read/write failed: %v", err)
60 }
61 if got := string(<-serverBytes); got != c2s {
62 t.Fatalf("server received %q, want %q", got, c2s)
63 }
64}
65
66// Can our client talk to a reference Noise IK server?
67func TestInteropServer(t *testing.T) {

Callers

nothing calls this directly

Calls 7

NewConnFunction · 0.92
NewMachineFunction · 0.92
noiseExplorerClientFunction · 0.85
ServerFunction · 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…