-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathwebsocket_test.go
More file actions
153 lines (134 loc) · 4.25 KB
/
websocket_test.go
File metadata and controls
153 lines (134 loc) · 4.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
package websocket_test
import (
"net/http"
"net/http/httptest"
"testing"
"time"
"github.com/albeebe/websocket"
gorilla "github.com/gorilla/websocket"
"github.com/stretchr/testify/assert"
)
// TestWebSocketClientConnection tests if the WebSocket client successfully connects to a server
func TestWebSocketClientConnection(t *testing.T) {
// Create a test server
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
upgrader := gorilla.Upgrader{}
_, err := upgrader.Upgrade(w, r, nil)
if err != nil {
t.Fatal("Failed to upgrade connection", err)
}
}))
defer server.Close()
// Convert HTTP URL to WebSocket URL
wsURL := "ws" + server.URL[4:]
// Initialize WebSocket client
client := websocket.NewWebSocketClient(wsURL)
// Wait until connection state is determined
select {
case <-client.Connected:
// Connected successfully
assert.True(t, true)
case err := <-client.Disconnected:
t.Errorf("Failed to connect: %v", err)
case <-time.After(time.Second * 2):
t.Error("Connection timed out")
}
}
// TestWebSocketClientSendMessage tests if messages can be sent from the client to server
func TestWebSocketClientSendMessage(t *testing.T) {
// Create a test server
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
upgrader := gorilla.Upgrader{}
conn, err := upgrader.Upgrade(w, r, nil)
if err != nil {
t.Fatal("Failed to upgrade connection", err)
}
// Read message
messageType, message, err := conn.ReadMessage()
if err != nil {
t.Errorf("Failed to read message: %v", err)
}
assert.Equal(t, int(websocket.TextMessage), int(messageType))
assert.Equal(t, []byte("Hello"), message)
}))
defer server.Close()
// Convert HTTP URL to WebSocket URL
wsURL := "ws" + server.URL[4:]
// Initialize WebSocket client
client := websocket.NewWebSocketClient(wsURL)
select {
case <-client.Connected:
// Send message
client.SendMessage(websocket.TextMessage, []byte("Hello"))
case err := <-client.Disconnected:
t.Errorf("Failed to connect: %v", err)
case <-time.After(time.Second * 2):
t.Error("Connection timed out")
}
}
// TestWebSocketClientReceiveMessage tests if messages can be received from server to client
func TestWebSocketClientReceiveMessage(t *testing.T) {
// Create a test server
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
upgrader := gorilla.Upgrader{}
conn, err := upgrader.Upgrade(w, r, nil)
if err != nil {
t.Fatal("Failed to upgrade connection", err)
}
// Send message to client
err = conn.WriteMessage(gorilla.TextMessage, []byte("Hello from server"))
if err != nil {
t.Errorf("Failed to write message: %v", err)
}
}))
defer server.Close()
// Convert HTTP URL to WebSocket URL
wsURL := "ws" + server.URL[4:]
// Initialize WebSocket client
client := websocket.NewWebSocketClient(wsURL)
select {
case <-client.Connected:
// Wait to receive a message
select {
case msg := <-client.IncomingMessages:
assert.Equal(t, websocket.TextMessage, msg.Type)
assert.Equal(t, []byte("Hello from server"), msg.Data)
case <-time.After(time.Second * 2):
t.Error("Message receiving timed out")
}
case err := <-client.Disconnected:
t.Errorf("Failed to connect: %v", err)
case <-time.After(time.Second * 2):
t.Error("Connection timed out")
}
}
// TestWebSocketClientDisconnect tests if the WebSocket client properly handles disconnection
func TestWebSocketClientDisconnect(t *testing.T) {
// Create a test server
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
upgrader := gorilla.Upgrader{}
conn, err := upgrader.Upgrade(w, r, nil)
if err != nil {
t.Fatal("Failed to upgrade connection", err)
}
// Close connection after some time
time.Sleep(time.Millisecond * 500)
conn.Close()
}))
defer server.Close()
// Convert HTTP URL to WebSocket URL
wsURL := "ws" + server.URL[4:]
// Initialize WebSocket client
client := websocket.NewWebSocketClient(wsURL)
select {
case <-client.Connected:
// Wait for disconnection
select {
case <-client.Disconnected:
case <-time.After(time.Second * 2):
t.Error("Disconnection timed out")
}
case <-time.After(time.Second * 2):
t.Error("Connection timed out")
}
}