Can our client talk to a reference Noise IK server?
(t *testing.T)
| 65 | |
| 66 | // Can our client talk to a reference Noise IK server? |
| 67 | func 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 |
nothing calls this directly
no test coverage detected
searching dependent graphs…