OSDN Git Service

new repo
[bytom/vapor.git] / vendor / golang.org / x / crypto / ssh / kex_test.go
1 // Copyright 2013 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 // Key exchange tests.
8
9 import (
10         "crypto/rand"
11         "reflect"
12         "testing"
13 )
14
15 func TestKexes(t *testing.T) {
16         type kexResultErr struct {
17                 result *kexResult
18                 err    error
19         }
20
21         for name, kex := range kexAlgoMap {
22                 a, b := memPipe()
23
24                 s := make(chan kexResultErr, 1)
25                 c := make(chan kexResultErr, 1)
26                 var magics handshakeMagics
27                 go func() {
28                         r, e := kex.Client(a, rand.Reader, &magics)
29                         a.Close()
30                         c <- kexResultErr{r, e}
31                 }()
32                 go func() {
33                         r, e := kex.Server(b, rand.Reader, &magics, testSigners["ecdsa"])
34                         b.Close()
35                         s <- kexResultErr{r, e}
36                 }()
37
38                 clientRes := <-c
39                 serverRes := <-s
40                 if clientRes.err != nil {
41                         t.Errorf("client: %v", clientRes.err)
42                 }
43                 if serverRes.err != nil {
44                         t.Errorf("server: %v", serverRes.err)
45                 }
46                 if !reflect.DeepEqual(clientRes.result, serverRes.result) {
47                         t.Errorf("kex %q: mismatch %#v, %#v", name, clientRes.result, serverRes.result)
48                 }
49         }
50 }