mirror of
https://github.com/cloudflare/cloudflared.git
synced 2025-07-27 19:09:58 +00:00
TUN-7125: Add management streaming logs WebSocket protocol
This commit is contained in:
168
management/events_test.go
Normal file
168
management/events_test.go
Normal file
@@ -0,0 +1,168 @@
|
||||
package management
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
"nhooyr.io/websocket"
|
||||
|
||||
"github.com/cloudflare/cloudflared/internal/test"
|
||||
)
|
||||
|
||||
func TestIntoClientEvent_StartStreaming(t *testing.T) {
|
||||
event := ClientEvent{
|
||||
Type: StartStreaming,
|
||||
event: []byte(`{"type": "start_streaming"}`),
|
||||
}
|
||||
ce, ok := IntoClientEvent[EventStartStreaming](&event, StartStreaming)
|
||||
require.True(t, ok)
|
||||
require.Equal(t, EventStartStreaming{ClientEvent: ClientEvent{Type: StartStreaming}}, *ce)
|
||||
}
|
||||
|
||||
func TestIntoClientEvent_StopStreaming(t *testing.T) {
|
||||
event := ClientEvent{
|
||||
Type: StopStreaming,
|
||||
event: []byte(`{"type": "stop_streaming"}`),
|
||||
}
|
||||
ce, ok := IntoClientEvent[EventStopStreaming](&event, StopStreaming)
|
||||
require.True(t, ok)
|
||||
require.Equal(t, EventStopStreaming{ClientEvent: ClientEvent{Type: StopStreaming}}, *ce)
|
||||
}
|
||||
|
||||
func TestIntoClientEvent_Invalid(t *testing.T) {
|
||||
event := ClientEvent{
|
||||
Type: UnknownClientEventType,
|
||||
event: []byte(`{"type": "invalid"}`),
|
||||
}
|
||||
_, ok := IntoClientEvent[EventStartStreaming](&event, StartStreaming)
|
||||
require.False(t, ok)
|
||||
}
|
||||
|
||||
func TestIntoServerEvent_Logs(t *testing.T) {
|
||||
event := ServerEvent{
|
||||
Type: Logs,
|
||||
event: []byte(`{"type": "logs"}`),
|
||||
}
|
||||
ce, ok := IntoServerEvent(&event, Logs)
|
||||
require.True(t, ok)
|
||||
require.Equal(t, EventLog{ServerEvent: ServerEvent{Type: Logs}}, *ce)
|
||||
}
|
||||
|
||||
func TestIntoServerEvent_Invalid(t *testing.T) {
|
||||
event := ServerEvent{
|
||||
Type: UnknownServerEventType,
|
||||
event: []byte(`{"type": "invalid"}`),
|
||||
}
|
||||
_, ok := IntoServerEvent(&event, Logs)
|
||||
require.False(t, ok)
|
||||
}
|
||||
|
||||
func TestReadServerEvent(t *testing.T) {
|
||||
sentEvent := EventLog{
|
||||
ServerEvent: ServerEvent{Type: Logs},
|
||||
Logs: []Log{
|
||||
{
|
||||
Timestamp: time.Now().UTC().Format(time.RFC3339),
|
||||
Event: HTTP,
|
||||
Level: Info,
|
||||
Message: "test",
|
||||
},
|
||||
},
|
||||
}
|
||||
client, server := test.WSPipe(nil, nil)
|
||||
server.CloseRead(context.Background())
|
||||
defer func() {
|
||||
server.Close(websocket.StatusInternalError, "")
|
||||
}()
|
||||
go func() {
|
||||
err := WriteEvent(server, context.Background(), &sentEvent)
|
||||
require.NoError(t, err)
|
||||
}()
|
||||
event, err := ReadServerEvent(client, context.Background())
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, sentEvent.Type, event.Type)
|
||||
client.Close(websocket.StatusInternalError, "")
|
||||
}
|
||||
|
||||
func TestReadServerEvent_InvalidWebSocketMessageType(t *testing.T) {
|
||||
client, server := test.WSPipe(nil, nil)
|
||||
server.CloseRead(context.Background())
|
||||
defer func() {
|
||||
server.Close(websocket.StatusInternalError, "")
|
||||
}()
|
||||
go func() {
|
||||
err := server.Write(context.Background(), websocket.MessageBinary, []byte("test1234"))
|
||||
require.NoError(t, err)
|
||||
}()
|
||||
_, err := ReadServerEvent(client, context.Background())
|
||||
require.Error(t, err)
|
||||
client.Close(websocket.StatusInternalError, "")
|
||||
}
|
||||
|
||||
func TestReadServerEvent_InvalidMessageType(t *testing.T) {
|
||||
sentEvent := ClientEvent{Type: ClientEventType(UnknownServerEventType)}
|
||||
client, server := test.WSPipe(nil, nil)
|
||||
server.CloseRead(context.Background())
|
||||
defer func() {
|
||||
server.Close(websocket.StatusInternalError, "")
|
||||
}()
|
||||
go func() {
|
||||
err := WriteEvent(server, context.Background(), &sentEvent)
|
||||
require.NoError(t, err)
|
||||
}()
|
||||
_, err := ReadServerEvent(client, context.Background())
|
||||
require.ErrorIs(t, err, errInvalidMessageType)
|
||||
client.Close(websocket.StatusInternalError, "")
|
||||
}
|
||||
|
||||
func TestReadClientEvent(t *testing.T) {
|
||||
sentEvent := EventStartStreaming{
|
||||
ClientEvent: ClientEvent{Type: StartStreaming},
|
||||
}
|
||||
client, server := test.WSPipe(nil, nil)
|
||||
client.CloseRead(context.Background())
|
||||
defer func() {
|
||||
client.Close(websocket.StatusInternalError, "")
|
||||
}()
|
||||
go func() {
|
||||
err := WriteEvent(client, context.Background(), &sentEvent)
|
||||
require.NoError(t, err)
|
||||
}()
|
||||
event, err := ReadClientEvent(server, context.Background())
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, sentEvent.Type, event.Type)
|
||||
server.Close(websocket.StatusInternalError, "")
|
||||
}
|
||||
|
||||
func TestReadClientEvent_InvalidWebSocketMessageType(t *testing.T) {
|
||||
client, server := test.WSPipe(nil, nil)
|
||||
client.CloseRead(context.Background())
|
||||
defer func() {
|
||||
client.Close(websocket.StatusInternalError, "")
|
||||
}()
|
||||
go func() {
|
||||
err := client.Write(context.Background(), websocket.MessageBinary, []byte("test1234"))
|
||||
require.NoError(t, err)
|
||||
}()
|
||||
_, err := ReadClientEvent(server, context.Background())
|
||||
require.Error(t, err)
|
||||
server.Close(websocket.StatusInternalError, "")
|
||||
}
|
||||
|
||||
func TestReadClientEvent_InvalidMessageType(t *testing.T) {
|
||||
sentEvent := ClientEvent{Type: UnknownClientEventType}
|
||||
client, server := test.WSPipe(nil, nil)
|
||||
client.CloseRead(context.Background())
|
||||
defer func() {
|
||||
client.Close(websocket.StatusInternalError, "")
|
||||
}()
|
||||
go func() {
|
||||
err := WriteEvent(client, context.Background(), &sentEvent)
|
||||
require.NoError(t, err)
|
||||
}()
|
||||
_, err := ReadClientEvent(server, context.Background())
|
||||
require.ErrorIs(t, err, errInvalidMessageType)
|
||||
server.Close(websocket.StatusInternalError, "")
|
||||
}
|
Reference in New Issue
Block a user