github.com/status-im/status-go@v1.1.0/cmd/statusd/server/signals_server_test.go (about) 1 package server 2 3 import ( 4 "context" 5 "encoding/json" 6 "fmt" 7 "net/url" 8 "testing" 9 "time" 10 11 "github.com/stretchr/testify/require" 12 13 "github.com/gorilla/websocket" 14 15 "github.com/status-im/status-go/protocol/common" 16 "github.com/status-im/status-go/signal" 17 ) 18 19 func TestSignalsServer(t *testing.T) { 20 server := NewServer() 21 server.Setup() 22 err := server.Listen("localhost:0") 23 require.NoError(t, err) 24 defer func() { 25 ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) 26 defer cancel() 27 server.Stop(ctx) 28 }() 29 30 addr := server.Address() 31 serverURLString := fmt.Sprintf("ws://%s", addr) 32 serverURL, err := url.Parse(serverURLString) 33 require.NoError(t, err) 34 require.NotZero(t, serverURL.Port()) 35 36 connection, _, err := websocket.DefaultDialer.Dial(serverURLString+"/signals", nil) 37 require.NoError(t, err) 38 require.NotNil(t, connection) 39 defer func() { 40 err := connection.Close() 41 require.NoError(t, err) 42 }() 43 44 sentEvent := signal.MessageDeliveredSignal{ 45 ChatID: randomAlphabeticalString(t, 10), 46 MessageID: randomAlphabeticalString(t, 10), 47 } 48 49 signal.SendMessageDelivered(sentEvent.ChatID, sentEvent.MessageID) 50 51 messageType, data, err := connection.ReadMessage() 52 require.NoError(t, err) 53 require.Equal(t, websocket.TextMessage, messageType) 54 55 receivedSignal := signal.Envelope{} 56 err = json.Unmarshal(data, &receivedSignal) 57 require.NoError(t, err) 58 require.Equal(t, signal.EventMesssageDelivered, receivedSignal.Type) 59 require.NotNil(t, receivedSignal.Event) 60 61 // Convert `interface{}` to json and then back to the original struct 62 tempJson, err := json.Marshal(receivedSignal.Event) 63 require.NoError(t, err) 64 65 receivedEvent := signal.MessageDeliveredSignal{} 66 err = json.Unmarshal(tempJson, &receivedEvent) 67 require.NoError(t, err) 68 require.Equal(t, sentEvent, receivedEvent) 69 } 70 71 func randomAlphabeticalString(t *testing.T, n int) string { 72 s, err := common.RandomAlphabeticalString(n) 73 require.NoError(t, err) 74 return s 75 }