Skip to content

Commit

Permalink
add test for tls connCheck #3025 (#3047)
Browse files Browse the repository at this point in the history
* add a check for TLS connections.
  • Loading branch information
naiqianz authored Jul 12, 2024
1 parent 8a0c59b commit 0858ed2
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 0 deletions.
5 changes: 5 additions & 0 deletions internal/pool/conn_check.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
package pool

import (
"crypto/tls"
"errors"
"io"
"net"
Expand All @@ -16,6 +17,10 @@ func connCheck(conn net.Conn) error {
// Reset previous timeout.
_ = conn.SetDeadline(time.Time{})

// Check if tls.Conn.
if c, ok := conn.(*tls.Conn); ok {
conn = c.NetConn()
}
sysConn, ok := conn.(syscall.Conn)
if !ok {
return nil
Expand Down
18 changes: 18 additions & 0 deletions internal/pool/conn_check_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
package pool

import (
"crypto/tls"
"net"
"net/http/httptest"
"time"
Expand All @@ -14,12 +15,17 @@ import (
var _ = Describe("tests conn_check with real conns", func() {
var ts *httptest.Server
var conn net.Conn
var tlsConn *tls.Conn
var err error

BeforeEach(func() {
ts = httptest.NewServer(nil)
conn, err = net.DialTimeout(ts.Listener.Addr().Network(), ts.Listener.Addr().String(), time.Second)
Expect(err).NotTo(HaveOccurred())
tlsTestServer := httptest.NewUnstartedServer(nil)
tlsTestServer.StartTLS()
tlsConn, err = tls.DialWithDialer(&net.Dialer{Timeout: time.Second}, tlsTestServer.Listener.Addr().Network(), tlsTestServer.Listener.Addr().String(), &tls.Config{InsecureSkipVerify: true})
Expect(err).NotTo(HaveOccurred())
})

AfterEach(func() {
Expand All @@ -33,11 +39,23 @@ var _ = Describe("tests conn_check with real conns", func() {
Expect(connCheck(conn)).To(HaveOccurred())
})

It("good tls conn check", func() {
Expect(connCheck(tlsConn)).NotTo(HaveOccurred())

Expect(tlsConn.Close()).NotTo(HaveOccurred())
Expect(connCheck(tlsConn)).To(HaveOccurred())
})

It("bad conn check", func() {
Expect(conn.Close()).NotTo(HaveOccurred())
Expect(connCheck(conn)).To(HaveOccurred())
})

It("bad tls conn check", func() {
Expect(tlsConn.Close()).NotTo(HaveOccurred())
Expect(connCheck(tlsConn)).To(HaveOccurred())
})

It("check conn deadline", func() {
Expect(conn.SetDeadline(time.Now())).NotTo(HaveOccurred())
time.Sleep(time.Millisecond * 10)
Expand Down

0 comments on commit 0858ed2

Please sign in to comment.