github.com/deis/deis@v1.13.5-0.20170519182049-1d9e59fbdbfc/Godeps/_workspace/src/golang.org/x/crypto/ssh/kex_test.go (about)

     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  			c <- kexResultErr{r, e}
    30  		}()
    31  		go func() {
    32  			r, e := kex.Server(b, rand.Reader, &magics, testSigners["ecdsa"])
    33  			s <- kexResultErr{r, e}
    34  		}()
    35  
    36  		clientRes := <-c
    37  		serverRes := <-s
    38  		if clientRes.err != nil {
    39  			t.Errorf("client: %v", clientRes.err)
    40  		}
    41  		if serverRes.err != nil {
    42  			t.Errorf("server: %v", serverRes.err)
    43  		}
    44  		if !reflect.DeepEqual(clientRes.result, serverRes.result) {
    45  			t.Errorf("kex %q: mismatch %#v, %#v", name, clientRes.result, serverRes.result)
    46  		}
    47  	}
    48  }