Introduce testVariants in prep for TLS

non-blocking
Jack Christensen 2022-06-04 09:48:19 -05:00
parent ecebd7b103
commit 5b64432afb
1 changed files with 197 additions and 231 deletions

View File

@ -9,7 +9,7 @@ import (
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
) )
func TestWriteIsBuffered(t *testing.T) { func testVariants(t *testing.T, f func(t *testing.T, local *nbconn.Conn, remote net.Conn)) {
local, remote := net.Pipe() local, remote := net.Pipe()
defer func() { defer func() {
local.Close() local.Close()
@ -17,7 +17,11 @@ func TestWriteIsBuffered(t *testing.T) {
}() }()
conn := nbconn.New(local) conn := nbconn.New(local)
f(t, conn, remote)
}
func TestWriteIsBuffered(t *testing.T) {
testVariants(t, func(t *testing.T, conn *nbconn.Conn, remote net.Conn) {
// net.Pipe is synchronous so the Write would block if not buffered. // net.Pipe is synchronous so the Write would block if not buffered.
writeBuf := []byte("test") writeBuf := []byte("test")
n, err := conn.Write(writeBuf) n, err := conn.Write(writeBuf)
@ -35,17 +39,11 @@ func TestWriteIsBuffered(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
require.NoError(t, <-errChan) require.NoError(t, <-errChan)
})
} }
func TestReadFlushesWriteBuffer(t *testing.T) { func TestReadFlushesWriteBuffer(t *testing.T) {
local, remote := net.Pipe() testVariants(t, func(t *testing.T, conn *nbconn.Conn, remote net.Conn) {
defer func() {
local.Close()
remote.Close()
}()
conn := nbconn.New(local)
writeBuf := []byte("test") writeBuf := []byte("test")
n, err := conn.Write(writeBuf) n, err := conn.Write(writeBuf)
require.NoError(t, err) require.NoError(t, err)
@ -68,17 +66,11 @@ func TestReadFlushesWriteBuffer(t *testing.T) {
require.NoError(t, <-errChan) require.NoError(t, <-errChan)
require.NoError(t, <-errChan) require.NoError(t, <-errChan)
})
} }
func TestCloseFlushesWriteBuffer(t *testing.T) { func TestCloseFlushesWriteBuffer(t *testing.T) {
local, remote := net.Pipe() testVariants(t, func(t *testing.T, conn *nbconn.Conn, remote net.Conn) {
defer func() {
local.Close()
remote.Close()
}()
conn := nbconn.New(local)
writeBuf := []byte("test") writeBuf := []byte("test")
n, err := conn.Write(writeBuf) n, err := conn.Write(writeBuf)
require.NoError(t, err) require.NoError(t, err)
@ -95,17 +87,11 @@ func TestCloseFlushesWriteBuffer(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
require.NoError(t, <-errChan) require.NoError(t, <-errChan)
})
} }
func TestNonBlockingRead(t *testing.T) { func TestNonBlockingRead(t *testing.T) {
local, remote := net.Pipe() testVariants(t, func(t *testing.T, conn *nbconn.Conn, remote net.Conn) {
defer func() {
local.Close()
remote.Close()
}()
conn := nbconn.New(local)
err := conn.SetReadDeadline(nbconn.NonBlockingDeadline) err := conn.SetReadDeadline(nbconn.NonBlockingDeadline)
require.NoError(t, err) require.NoError(t, err)
@ -126,14 +112,11 @@ func TestNonBlockingRead(t *testing.T) {
n, err = conn.Read(buf) n, err = conn.Read(buf)
require.NoError(t, err) require.NoError(t, err)
require.EqualValues(t, 4, n) require.EqualValues(t, 4, n)
})
} }
func TestReadPreviouslyBuffered(t *testing.T) { func TestReadPreviouslyBuffered(t *testing.T) {
local, remote := net.Pipe() testVariants(t, func(t *testing.T, conn *nbconn.Conn, remote net.Conn) {
defer func() {
local.Close()
remote.Close()
}()
errChan := make(chan error, 1) errChan := make(chan error, 1)
go func() { go func() {
@ -154,8 +137,6 @@ func TestReadPreviouslyBuffered(t *testing.T) {
errChan <- err errChan <- err
}() }()
conn := nbconn.New(local)
_, err := conn.Write([]byte("test")) _, err := conn.Write([]byte("test"))
require.NoError(t, err) require.NoError(t, err)
@ -168,14 +149,11 @@ func TestReadPreviouslyBuffered(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
require.EqualValues(t, 5, n) require.EqualValues(t, 5, n)
require.Equal(t, []byte("alpha"), readBuf) require.Equal(t, []byte("alpha"), readBuf)
})
} }
func TestReadPreviouslyBufferedPartialRead(t *testing.T) { func TestReadPreviouslyBufferedPartialRead(t *testing.T) {
local, remote := net.Pipe() testVariants(t, func(t *testing.T, conn *nbconn.Conn, remote net.Conn) {
defer func() {
local.Close()
remote.Close()
}()
errChan := make(chan error, 1) errChan := make(chan error, 1)
go func() { go func() {
@ -196,8 +174,6 @@ func TestReadPreviouslyBufferedPartialRead(t *testing.T) {
errChan <- err errChan <- err
}() }()
conn := nbconn.New(local)
_, err := conn.Write([]byte("test")) _, err := conn.Write([]byte("test"))
require.NoError(t, err) require.NoError(t, err)
@ -216,15 +192,11 @@ func TestReadPreviouslyBufferedPartialRead(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
require.EqualValues(t, 3, n) require.EqualValues(t, 3, n)
require.Equal(t, []byte("pha"), readBuf) require.Equal(t, []byte("pha"), readBuf)
})
} }
func TestReadMultiplePreviouslyBuffered(t *testing.T) { func TestReadMultiplePreviouslyBuffered(t *testing.T) {
local, remote := net.Pipe() testVariants(t, func(t *testing.T, conn *nbconn.Conn, remote net.Conn) {
defer func() {
local.Close()
remote.Close()
}()
errChan := make(chan error, 1) errChan := make(chan error, 1)
go func() { go func() {
err := func() error { err := func() error {
@ -249,8 +221,6 @@ func TestReadMultiplePreviouslyBuffered(t *testing.T) {
errChan <- err errChan <- err
}() }()
conn := nbconn.New(local)
_, err := conn.Write([]byte("test")) _, err := conn.Write([]byte("test"))
require.NoError(t, err) require.NoError(t, err)
@ -263,14 +233,11 @@ func TestReadMultiplePreviouslyBuffered(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
require.EqualValues(t, 9, n) require.EqualValues(t, 9, n)
require.Equal(t, []byte("alphabeta"), readBuf) require.Equal(t, []byte("alphabeta"), readBuf)
})
} }
func TestReadPreviouslyBufferedAndReadMore(t *testing.T) { func TestReadPreviouslyBufferedAndReadMore(t *testing.T) {
local, remote := net.Pipe() testVariants(t, func(t *testing.T, conn *nbconn.Conn, remote net.Conn) {
defer func() {
local.Close()
remote.Close()
}()
flushCompleteChan := make(chan struct{}) flushCompleteChan := make(chan struct{})
errChan := make(chan error, 1) errChan := make(chan error, 1)
@ -299,8 +266,6 @@ func TestReadPreviouslyBufferedAndReadMore(t *testing.T) {
errChan <- err errChan <- err
}() }()
conn := nbconn.New(local)
_, err := conn.Write([]byte("test")) _, err := conn.Write([]byte("test"))
require.NoError(t, err) require.NoError(t, err)
@ -315,4 +280,5 @@ func TestReadPreviouslyBufferedAndReadMore(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
require.EqualValues(t, 9, n) require.EqualValues(t, 9, n)
require.Equal(t, []byte("alphabeta"), readBuf) require.Equal(t, []byte("alphabeta"), readBuf)
})
} }