Ejemplo n.º 1
0
func TestOpenRetry(t *testing.T) {
	c := 0
	rand := new(failReader)
	p := &Pool{Dial: func(net, addr string) (net.Conn, error) {
		c++
		conn := dial(t)
		return conn, nil
	}}
	config := new(ssh.ClientConfig)
	*config = *clientConfig
	config.Rand = rand
	_, err := p.Open("net", "addr", config)
	if err != nil {
		t.Fatal("unexpected error:", err)
	}
	conn := p.tab[p.key("net", "addr", config)].c
	*rand = true
	config.Rand = nil
	_, err = p.Open("net", "addr", config)
	if err != nil {
		t.Fatal("unexpected error:", err)
	}
	if c != 2 {
		t.Fatalf("calls = %d want 2", c)
	}
	const errClosing = "use of closed network connection" // from package net
	if err := conn.Close(); err == nil || err.Error() != errClosing {
		t.Fatalf("conn still open, want closed; err = %v", err)
	}
}