chore: stabilize websocket event tests

Synchronize websocket writes before asserting so test failures stay
on the test goroutine. Also use the context-aware SOCKS dialer in
the origin connection test.
This commit is contained in:
Devin Carr
2026-09-28 10:34:00 -07:00
parent 725c46361b
commit ad3c6d1c2d
2 changed files with 42 additions and 41 deletions
+3 -1
View File
@@ -163,9 +163,11 @@ func TestSocksStreamWSOverTCPConnection(t *testing.T) {
eyeballDialer, err := proxy.SOCKS5("tcp", wsForwarderListener.Addr().String(), nil, proxy.Direct)
require.NoError(t, err)
eyeballContextDialer, ok := eyeballDialer.(proxy.ContextDialer)
require.True(t, ok)
transport := &http.Transport{
Dial: eyeballDialer.Dial,
DialContext: eyeballContextDialer.DialContext,
}
// Request URL doesn't matter because the transport is using eyeballDialer to connectq
+39 -40
View File
@@ -11,23 +11,16 @@ import (
"github.com/cloudflare/cloudflared/internal/test"
)
var (
debugLevel *LogLevel
infoLevel *LogLevel
warnLevel *LogLevel
errorLevel *LogLevel
)
var infoLevel = func() *LogLevel {
level := Info
return &level
}()
func init() {
// created here because we can't do a reference to a const enum, i.e. &Info
debugLevel := new(LogLevel)
*debugLevel = Debug
infoLevel := new(LogLevel)
*infoLevel = Info
warnLevel := new(LogLevel)
*warnLevel = Warn
errorLevel := new(LogLevel)
*errorLevel = Error
func closeWebSocket(t *testing.T, conn *websocket.Conn) {
t.Helper()
if err := conn.Close(websocket.StatusInternalError, ""); err != nil {
t.Logf("failed to close test WebSocket: %v", err)
}
}
func TestIntoClientEvent_StartStreaming(t *testing.T) {
@@ -153,31 +146,33 @@ func TestReadServerEvent(t *testing.T) {
client, server := test.WSPipe(nil, nil)
server.CloseRead(context.Background())
defer func() {
server.Close(websocket.StatusInternalError, "")
closeWebSocket(t, server)
}()
writeDone := make(chan error, 1)
go func() {
err := WriteEvent(server, context.Background(), &sentEvent)
require.NoError(t, err)
writeDone <- WriteEvent(server, context.Background(), &sentEvent)
}()
event, err := ReadServerEvent(client, context.Background())
require.NoError(t, err)
require.Equal(t, sentEvent.Type, event.Type)
client.Close(websocket.StatusInternalError, "")
require.NoError(t, <-writeDone)
closeWebSocket(t, client)
}
func TestReadServerEvent_InvalidWebSocketMessageType(t *testing.T) {
client, server := test.WSPipe(nil, nil)
server.CloseRead(context.Background())
defer func() {
server.Close(websocket.StatusInternalError, "")
closeWebSocket(t, server)
}()
writeDone := make(chan error, 1)
go func() {
err := server.Write(context.Background(), websocket.MessageBinary, []byte("test1234"))
require.NoError(t, err)
writeDone <- server.Write(t.Context(), websocket.MessageBinary, nil)
}()
_, err := ReadServerEvent(client, context.Background())
require.Error(t, err)
client.Close(websocket.StatusInternalError, "")
require.NoError(t, <-writeDone)
closeWebSocket(t, client)
}
func TestReadServerEvent_InvalidMessageType(t *testing.T) {
@@ -185,15 +180,16 @@ func TestReadServerEvent_InvalidMessageType(t *testing.T) {
client, server := test.WSPipe(nil, nil)
server.CloseRead(context.Background())
defer func() {
server.Close(websocket.StatusInternalError, "")
closeWebSocket(t, server)
}()
writeDone := make(chan error, 1)
go func() {
err := WriteEvent(server, context.Background(), &sentEvent)
require.NoError(t, err)
writeDone <- WriteEvent(server, context.Background(), &sentEvent)
}()
_, err := ReadServerEvent(client, context.Background())
require.ErrorIs(t, err, errInvalidMessageType)
client.Close(websocket.StatusInternalError, "")
require.NoError(t, <-writeDone)
closeWebSocket(t, client)
}
func TestReadClientEvent(t *testing.T) {
@@ -203,31 +199,33 @@ func TestReadClientEvent(t *testing.T) {
client, server := test.WSPipe(nil, nil)
client.CloseRead(context.Background())
defer func() {
client.Close(websocket.StatusInternalError, "")
closeWebSocket(t, client)
}()
writeDone := make(chan error, 1)
go func() {
err := WriteEvent(client, context.Background(), &sentEvent)
require.NoError(t, err)
writeDone <- WriteEvent(client, context.Background(), &sentEvent)
}()
event, err := ReadClientEvent(server, context.Background())
require.NoError(t, err)
require.Equal(t, sentEvent.Type, event.Type)
server.Close(websocket.StatusInternalError, "")
require.NoError(t, <-writeDone)
closeWebSocket(t, server)
}
func TestReadClientEvent_InvalidWebSocketMessageType(t *testing.T) {
client, server := test.WSPipe(nil, nil)
client.CloseRead(context.Background())
defer func() {
client.Close(websocket.StatusInternalError, "")
closeWebSocket(t, client)
}()
writeDone := make(chan error, 1)
go func() {
err := client.Write(context.Background(), websocket.MessageBinary, []byte("test1234"))
require.NoError(t, err)
writeDone <- client.Write(t.Context(), websocket.MessageBinary, nil)
}()
_, err := ReadClientEvent(server, context.Background())
require.Error(t, err)
server.Close(websocket.StatusInternalError, "")
require.NoError(t, <-writeDone)
closeWebSocket(t, server)
}
func TestReadClientEvent_InvalidMessageType(t *testing.T) {
@@ -235,13 +233,14 @@ func TestReadClientEvent_InvalidMessageType(t *testing.T) {
client, server := test.WSPipe(nil, nil)
client.CloseRead(context.Background())
defer func() {
client.Close(websocket.StatusInternalError, "")
closeWebSocket(t, client)
}()
writeDone := make(chan error, 1)
go func() {
err := WriteEvent(client, context.Background(), &sentEvent)
require.NoError(t, err)
writeDone <- WriteEvent(client, context.Background(), &sentEvent)
}()
_, err := ReadClientEvent(server, context.Background())
require.ErrorIs(t, err, errInvalidMessageType)
server.Close(websocket.StatusInternalError, "")
require.NoError(t, <-writeDone)
closeWebSocket(t, server)
}