1 // Copyright 2014 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
13 func testClientVersion(t *testing.T, config *ClientConfig, expected string) {
14 clientConn, serverConn := net.Pipe()
15 defer clientConn.Close()
16 receivedVersion := make(chan string, 1)
17 config.HostKeyCallback = InsecureIgnoreHostKey()
19 version, err := readVersion(serverConn)
23 receivedVersion <- string(version)
27 NewClientConn(clientConn, "", config)
28 actual := <-receivedVersion
29 if actual != expected {
30 t.Fatalf("got %s; want %s", actual, expected)
34 func TestCustomClientVersion(t *testing.T) {
35 version := "Test-Client-Version-0.0"
36 testClientVersion(t, &ClientConfig{ClientVersion: version}, version)
39 func TestDefaultClientVersion(t *testing.T) {
40 testClientVersion(t, &ClientConfig{}, packageVersion)
43 func TestHostKeyCheck(t *testing.T) {
44 for _, tt := range []struct {
49 {"no callback", "must specify HostKeyCallback", nil},
50 {"correct key", "", testSigners["rsa"].PublicKey()},
51 {"mismatch", "mismatch", testSigners["ecdsa"].PublicKey()},
53 c1, c2, err := netPipe()
55 t.Fatalf("netPipe: %v", err)
59 serverConf := &ServerConfig{
62 serverConf.AddHostKey(testSigners["rsa"])
64 go NewServerConn(c1, serverConf)
65 clientConf := ClientConfig{
69 clientConf.HostKeyCallback = FixedHostKey(tt.key)
72 _, _, _, err = NewClientConn(c2, "", &clientConf)
74 if tt.wantError == "" || !strings.Contains(err.Error(), tt.wantError) {
75 t.Errorf("%s: got error %q, missing %q", tt.name, err.Error(), tt.wantError)
77 } else if tt.wantError != "" {
78 t.Errorf("%s: succeeded, but want error string %q", tt.name, tt.wantError)