feat: 完善后端脚手架基础能力

This commit is contained in:
2026-08-09 01:06:21 +08:00
parent e311f416f2
commit f95311a107
61 changed files with 5630 additions and 521 deletions
+47
View File
@@ -0,0 +1,47 @@
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)
}
}