github.com/cloud-foundations/dominator@v0.0.0-20221004181915-6e4fee580046/lib/net/tls/dial_test.go (about) 1 package tls 2 3 import ( 4 "crypto/tls" 5 "crypto/x509" 6 "net" 7 "strings" 8 "testing" 9 10 mynet "github.com/Cloud-Foundations/Dominator/lib/net" 11 ) 12 13 var ( 14 serverAddress string 15 tlsCertificate tls.Certificate 16 x509Certificate *x509.Certificate 17 ) 18 19 func init() { 20 var err error 21 tlsCertificate, x509Certificate, err = NewTestCertificate() 22 if err != nil { 23 panic(err) 24 } 25 config := &tls.Config{Certificates: []tls.Certificate{tlsCertificate}} 26 listener, err := tls.Listen("tcp", "localhost:", config) 27 if err != nil { 28 panic(err) 29 } 30 serverAddress = listener.Addr().String() 31 go func() { 32 for { 33 accept(listener) 34 } 35 }() 36 } 37 38 func accept(listener net.Listener) { 39 conn, err := listener.Accept() 40 if err != nil { 41 return 42 } 43 defer conn.Close() 44 conn.(*tls.Conn).Handshake() 45 } 46 47 func TestDialSkipVerify(t *testing.T) { 48 dialer := NewDialer(nil, &tls.Config{InsecureSkipVerify: true}) 49 if conn, err := dialer.Dial("tcp", serverAddress); err != nil { 50 t.Fatal(err) 51 } else { 52 conn.Close() 53 } 54 } 55 56 func TestDialNoConfig(t *testing.T) { 57 dialer := NewDialer(nil, nil) 58 if conn, err := dialer.Dial("tcp", serverAddress); err != nil { 59 if strings.Contains(err.Error(), 60 "certificate signed by unknown authority") { 61 return 62 } 63 t.Fatal(err) 64 } else { 65 conn.Close() 66 t.Fatal("Dial with nil config did not fail") 67 } 68 } 69 70 func TestDialConfig(t *testing.T) { 71 caCertPool := x509.NewCertPool() 72 caCertPool.AddCert(x509Certificate) 73 dialer := NewDialer(nil, &tls.Config{RootCAs: caCertPool}) 74 if conn, err := dialer.Dial("tcp", serverAddress); err != nil { 75 t.Fatal(err) 76 } else { 77 conn.Close() 78 } 79 } 80 81 func TestDialSkipVerifyMeasuringDialer(t *testing.T) { 82 dialer := NewDialer(mynet.NewMeasuringDialer(&net.Dialer{}), 83 &tls.Config{InsecureSkipVerify: true}) 84 if conn, err := dialer.Dial("tcp", serverAddress); err != nil { 85 t.Fatal(err) 86 } else { 87 conn.Close() 88 } 89 }