|
@@ -20,6 +20,7 @@ import (
|
|
|
"crypto/tls"
|
|
"crypto/tls"
|
|
|
"errors"
|
|
"errors"
|
|
|
"io/ioutil"
|
|
"io/ioutil"
|
|
|
|
|
+ "net/http"
|
|
|
"os"
|
|
"os"
|
|
|
"testing"
|
|
"testing"
|
|
|
)
|
|
)
|
|
@@ -44,6 +45,46 @@ func fakeCertificateParserFunc(cert tls.Certificate, err error) func(certPEMBloc
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+// TestNewListenerTLSInfo tests that NewListener with valid TLSInfo returns
|
|
|
|
|
+// a TLS listerner that accepts TLS connections.
|
|
|
|
|
+func TestNewListenerTLSInfo(t *testing.T) {
|
|
|
|
|
+ tmp, err := createTempFile([]byte("XXX"))
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ t.Fatalf("unable to create tmpfile: %v", err)
|
|
|
|
|
+ }
|
|
|
|
|
+ defer os.Remove(tmp)
|
|
|
|
|
+ tlsInfo := TLSInfo{CertFile: tmp, KeyFile: tmp}
|
|
|
|
|
+ tlsInfo.parseFunc = fakeCertificateParserFunc(tls.Certificate{}, nil)
|
|
|
|
|
+ ln, err := NewListener(":0", "https", tlsInfo)
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ t.Fatalf("unexpected NewListener error: %v", err)
|
|
|
|
|
+ }
|
|
|
|
|
+ defer ln.Close()
|
|
|
|
|
+
|
|
|
|
|
+ go http.Get("https://" + ln.Addr().String())
|
|
|
|
|
+ conn, err := ln.Accept()
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ t.Fatalf("unexpected Accept error: %v", err)
|
|
|
|
|
+ }
|
|
|
|
|
+ defer conn.Close()
|
|
|
|
|
+ if _, ok := conn.(*tls.Conn); !ok {
|
|
|
|
|
+ t.Errorf("failed to accept *tls.Conn")
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+func TestNewListenerTLSInfoNonexist(t *testing.T) {
|
|
|
|
|
+ tlsInfo := TLSInfo{CertFile: "@badname", KeyFile: "@badname"}
|
|
|
|
|
+ _, err := NewListener(":0", "https", tlsInfo)
|
|
|
|
|
+ werr := &os.PathError{
|
|
|
|
|
+ Op: "open",
|
|
|
|
|
+ Path: "@badname",
|
|
|
|
|
+ Err: errors.New("no such file or directory"),
|
|
|
|
|
+ }
|
|
|
|
|
+ if err.Error() != werr.Error() {
|
|
|
|
|
+ t.Errorf("err = %v, want %v", err, werr)
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
func TestNewTransportTLSInfo(t *testing.T) {
|
|
func TestNewTransportTLSInfo(t *testing.T) {
|
|
|
tmp, err := createTempFile([]byte("XXX"))
|
|
tmp, err := createTempFile([]byte("XXX"))
|
|
|
if err != nil {
|
|
if err != nil {
|