OSDN Git Service

versoin1.1.9 (#594)
[bytom/vapor.git] / vendor / golang.org / x / crypto / ssh / client_test.go
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.
4
5 package ssh
6
7 import (
8         "net"
9         "strings"
10         "testing"
11 )
12
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()
18         go func() {
19                 version, err := readVersion(serverConn)
20                 if err != nil {
21                         receivedVersion <- ""
22                 } else {
23                         receivedVersion <- string(version)
24                 }
25                 serverConn.Close()
26         }()
27         NewClientConn(clientConn, "", config)
28         actual := <-receivedVersion
29         if actual != expected {
30                 t.Fatalf("got %s; want %s", actual, expected)
31         }
32 }
33
34 func TestCustomClientVersion(t *testing.T) {
35         version := "Test-Client-Version-0.0"
36         testClientVersion(t, &ClientConfig{ClientVersion: version}, version)
37 }
38
39 func TestDefaultClientVersion(t *testing.T) {
40         testClientVersion(t, &ClientConfig{}, packageVersion)
41 }
42
43 func TestHostKeyCheck(t *testing.T) {
44         for _, tt := range []struct {
45                 name      string
46                 wantError string
47                 key       PublicKey
48         }{
49                 {"no callback", "must specify HostKeyCallback", nil},
50                 {"correct key", "", testSigners["rsa"].PublicKey()},
51                 {"mismatch", "mismatch", testSigners["ecdsa"].PublicKey()},
52         } {
53                 c1, c2, err := netPipe()
54                 if err != nil {
55                         t.Fatalf("netPipe: %v", err)
56                 }
57                 defer c1.Close()
58                 defer c2.Close()
59                 serverConf := &ServerConfig{
60                         NoClientAuth: true,
61                 }
62                 serverConf.AddHostKey(testSigners["rsa"])
63
64                 go NewServerConn(c1, serverConf)
65                 clientConf := ClientConfig{
66                         User: "user",
67                 }
68                 if tt.key != nil {
69                         clientConf.HostKeyCallback = FixedHostKey(tt.key)
70                 }
71
72                 _, _, _, err = NewClientConn(c2, "", &clientConf)
73                 if err != nil {
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)
76                         }
77                 } else if tt.wantError != "" {
78                         t.Errorf("%s: succeeded, but want error string %q", tt.name, tt.wantError)
79                 }
80         }
81 }