Skip to content

Commit

Permalink
Merge pull request #66 from KianYang-Lee/improvements/int-test-for-ex…
Browse files Browse the repository at this point in the history
…ample

Add integration test for library
  • Loading branch information
ksysoev committed Jun 4, 2024
2 parents 6d3569f + 0a5d788 commit 3d53cc5
Showing 1 changed file with 68 additions and 0 deletions.
68 changes: 68 additions & 0 deletions tests/echo_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
// Package tests contains integration tests for wasabi library.
package tests

import (
"context"
"testing"
"time"

"github.com/ksysoev/wasabi"
"github.com/ksysoev/wasabi/channel"
"github.com/ksysoev/wasabi/dispatch"
"github.com/ksysoev/wasabi/server"
"nhooyr.io/websocket"
"nhooyr.io/websocket/wsjson"
)

func TestEcho(t *testing.T) {
// Message to be sent to server and expected to be received
expected := "a message for server"

backend := dispatch.RequestHandlerFunc(func(conn wasabi.Connection, req wasabi.Request) error {
return conn.Send(wasabi.MsgTypeText, req.Data())
})

dispatcher := dispatch.NewRouterDispatcher(backend, func(conn wasabi.Connection, msgType wasabi.MessageType, data []byte) wasabi.Request {
return dispatch.NewRawRequest(conn.Context(), msgType, data)
})
ch := channel.NewChannel("/", dispatcher, channel.NewConnectionRegistry(), channel.WithOriginPatterns("*"))

ready := make(chan struct{})
s := server.NewServer(":0", server.WithBaseContext(context.Background()), server.WithReadinessChan(ready))
s.AddChannel(ch)

go func() {
if err := s.Run(); err != nil {
t.Error("Fail to start app server", "error", err)
}
}()

select {
case <-ready:
case <-time.After(1 * time.Second):
t.Error("Server is expected to start")
}

url := "ws://" + s.Addr().String()
ws, _, err := websocket.Dial(context.Background(), url, nil)
if err != nil {
t.Errorf("Unexpected error dialing websocket: %s", err)
}

defer ws.Close(websocket.CloseStatus(nil), "exiting")

err = wsjson.Write(context.Background(), ws, expected)
if err != nil {
t.Errorf("Unexpected error writing to websocket: %s", err)
}

var actual interface{}
err = wsjson.Read(context.Background(), ws, &actual)
if err != nil {
t.Errorf("Unexpected error reading from websocket: %s", err)
}

if expected != actual {
t.Errorf("Expected: %s, actual: %s", expected, actual)
}
}

0 comments on commit 3d53cc5

Please sign in to comment.