1
0
Fork 0

Clearer Dialer testing

master
Philip O'Toole 3 years ago
parent 5801240051
commit 32ec72e982

@ -2,6 +2,7 @@ package tcp
import ( import (
"crypto/tls" "crypto/tls"
"errors"
"net" "net"
"os" "os"
"testing" "testing"
@ -28,7 +29,7 @@ func Test_DialerNoConnect(t *testing.T) {
func Test_DialerHeader(t *testing.T) { func Test_DialerHeader(t *testing.T) {
s := mustNewEchoServer() s := mustNewEchoServer()
defer s.Close() defer s.Close()
go s.MustStart() go s.Start(t)
d := NewDialer(64, false, false) d := NewDialer(64, false, false)
conn, err := d.Dial(s.Addr(), 10*time.Second) conn, err := d.Dial(s.Addr(), 10*time.Second)
@ -37,6 +38,8 @@ func Test_DialerHeader(t *testing.T) {
} }
buf := make([]byte, 1) buf := make([]byte, 1)
conn.SetReadDeadline(time.Now().Add(5 * time.Second))
_, err = conn.Read(buf) _, err = conn.Read(buf)
if err != nil { if err != nil {
t.Fatalf("failed to read from echo server: %s", err.Error()) t.Fatalf("failed to read from echo server: %s", err.Error())
@ -51,15 +54,17 @@ func Test_DialerHeaderTLS(t *testing.T) {
defer s.Close() defer s.Close()
defer os.Remove(cert) defer os.Remove(cert)
defer os.Remove(key) defer os.Remove(key)
go s.MustStart() go s.Start(t)
d := NewDialer(23, true, true) d := NewDialer(23, true, true)
conn, err := d.Dial(s.Addr(), 10*time.Second) conn, err := d.Dial(s.Addr(), 5*time.Second)
if err != nil { if err != nil {
t.Fatalf("failed to dial TLS echo server: %s", err.Error()) t.Fatalf("failed to dial TLS echo server: %s", err.Error())
} }
buf := make([]byte, 1) buf := make([]byte, 1)
conn.SetReadDeadline(time.Now().Add(5 * time.Second))
_, err = conn.Read(buf) _, err = conn.Read(buf)
if err != nil { if err != nil {
t.Fatalf("failed to read from TLS echo server: %s", err.Error()) t.Fatalf("failed to read from TLS echo server: %s", err.Error())
@ -69,6 +74,30 @@ func Test_DialerHeaderTLS(t *testing.T) {
} }
} }
func Test_DialerHeaderTLSBadConnect(t *testing.T) {
s, cert, key := mustNewEchoServerTLS()
defer s.Close()
defer os.Remove(cert)
defer os.Remove(key)
go s.Start(t)
// Connect to a TLS server with a unencrypted client, to make sure
// code can handle that misconfig.
d := NewDialer(56, false, false)
conn, err := d.Dial(s.Addr(), 5*time.Second)
if err != nil {
t.Fatalf("failed to dial TLS echo server: %s", err.Error())
}
buf := make([]byte, 1)
conn.SetReadDeadline(time.Now().Add(2 * time.Second))
_, err = conn.Read(buf)
if err != nil && !errors.Is(err, os.ErrDeadlineExceeded) {
t.Fatalf("unexpected error from TLS echo server: %s", err.Error())
}
}
type echoServer struct { type echoServer struct {
ln net.Listener ln net.Listener
} }
@ -78,22 +107,26 @@ func (e *echoServer) Addr() string {
return e.ln.Addr().String() return e.ln.Addr().String()
} }
// MustStart starts the echo server. // Start starts the echo server.
func (e *echoServer) MustStart() { func (e *echoServer) Start(t *testing.T) {
for { for {
conn, err := e.ln.Accept() conn, err := e.ln.Accept()
if err != nil { if err != nil {
return if errors.Is(err, net.ErrClosed) {
// Successful testing can cause this.
return
}
t.Fatalf("failed to accept a connection: %s", err.Error())
} }
go func(c net.Conn) { go func(c net.Conn) {
buf := make([]byte, 1) buf := make([]byte, 1)
_, err := c.Read(buf) _, err := c.Read(buf)
if err != nil { if err != nil {
panic("failed to read byte") return
} }
_, err = c.Write(buf) _, err = c.Write(buf)
if err != nil { if err != nil {
panic("failed to echo received byte") t.Fatalf("failed to write byte: %s", err.Error())
} }
c.Close() c.Close()
}(conn) }(conn)

Loading…
Cancel
Save