48 lines
1.3 KiB
Go
48 lines
1.3 KiB
Go
package ws
|
|
|
|
import (
|
|
"net/http/httptest"
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/gorilla/websocket"
|
|
)
|
|
|
|
func TestControllerConnectAndBroadcast(t *testing.T) {
|
|
gin.SetMode(gin.TestMode)
|
|
hub := NewHub()
|
|
controller := NewController(hub)
|
|
router := gin.New()
|
|
router.GET("/ws", controller.Connect)
|
|
server := httptest.NewServer(router)
|
|
defer server.Close()
|
|
|
|
url := "ws" + strings.TrimPrefix(server.URL, "http") + "/ws?room=test&client_id=tester"
|
|
conn, _, err := websocket.DefaultDialer.Dial(url, nil)
|
|
if err != nil {
|
|
t.Fatalf("Dial() error = %v", err)
|
|
}
|
|
defer conn.Close()
|
|
_ = conn.SetReadDeadline(time.Now().Add(2 * time.Second))
|
|
|
|
// 连接后依次收到 welcome 和 joined presence。
|
|
for i := 0; i < 2; i++ {
|
|
var message OutgoingMessage
|
|
if err := conn.ReadJSON(&message); err != nil {
|
|
t.Fatalf("initial ReadJSON() error = %v", err)
|
|
}
|
|
}
|
|
if err := conn.WriteJSON(IncomingMessage{Type: EventMessage, Data: "hello"}); err != nil {
|
|
t.Fatalf("WriteJSON() error = %v", err)
|
|
}
|
|
var message OutgoingMessage
|
|
if err := conn.ReadJSON(&message); err != nil {
|
|
t.Fatalf("ReadJSON() error = %v", err)
|
|
}
|
|
if message.Type != EventMessage || message.Data != "hello" || message.Room != "test" {
|
|
t.Fatalf("unexpected broadcast: %+v", message)
|
|
}
|
|
}
|