Files

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)
}
}