proto-socket/go/test/ws_test.go
toki e48722d811 Refactor project structure and add Close() method
- Add Close() method to Communicator for proper resource cleanup
- Move examples from go/example/ to go/examples/
- Move test files to go/test/ directory
- Add cross-test files for Dart-Go interop testing
- Add comprehensive test suite (tcp, ws, tls, heartbeat tests)
- Add crosstest directory for multi-language testing
- Add SKILL documentation for adding crosstest languages
2026-04-11 09:54:03 +09:00

52 lines
1.3 KiB
Go

package toki_socket_test
import (
"context"
"testing"
"time"
"nhooyr.io/websocket"
toki "toki-labs.com/toki_socket/go"
"toki-labs.com/toki_socket/go/packets"
)
func TestWsRequestResponse(t *testing.T) {
port := freePort(t)
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
server := toki.NewWsServer("127.0.0.1", port, "/", func(conn *websocket.Conn) *toki.WsClient {
return toki.NewWsClient(conn, 0, 0, testParserMap())
})
server.OnClientConnected = func(client *toki.WsClient) {
toki.AddRequestListenerTyped[*packets.TestData, *packets.TestData](&client.Communicator, func(req *packets.TestData) (*packets.TestData, error) {
return &packets.TestData{
Index: req.GetIndex() * 2,
Message: "echo: " + req.GetMessage(),
}, nil
})
}
if err := server.Start(ctx); err != nil {
t.Fatal(err)
}
defer server.Stop()
client, err := toki.DialWsWithHeartbeat(ctx, "127.0.0.1", port, "/", 0, 0, testParserMap())
if err != nil {
t.Fatal(err)
}
defer client.Close()
res, err := toki.SendRequestTyped[*packets.TestData, *packets.TestData](
&client.Communicator,
&packets.TestData{Index: 21, Message: "hello ws"},
2*time.Second,
)
if err != nil {
t.Fatal(err)
}
if res.GetIndex() != 42 || res.GetMessage() != "echo: hello ws" {
t.Fatalf("unexpected response: %v", res)
}
}