From 0016b6b630b6618dba1b0faa430134bfc0068a81 Mon Sep 17 00:00:00 2001 From: Ekaterina Pavlova Date: Wed, 13 Mar 2024 11:41:43 +0300 Subject: [PATCH] rpc: add synchronisation for httptest.Server in tests Add waiting for startSending to ensure that the client is ready before the server starts sending messages. Close #3005 Close #3312 Signed-off-by: Ekaterina Pavlova --- pkg/rpcclient/wsclient_test.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pkg/rpcclient/wsclient_test.go b/pkg/rpcclient/wsclient_test.go index 1c2eabebb0..02681fc409 100644 --- a/pkg/rpcclient/wsclient_test.go +++ b/pkg/rpcclient/wsclient_test.go @@ -155,11 +155,13 @@ func TestWSClientEvents(t *testing.T) { fmt.Sprintf(`{"jsonrpc":"2.0","method":"block_added","params":[%s]}`, b1Verbose), `{"jsonrpc":"2.0","method":"event_missed","params":[]}`, // the last one, will trigger receiver channels closing. } + startSending := make(chan struct{}) srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { if req.URL.Path == "/ws" && req.Method == "GET" { var upgrader = websocket.Upgrader{} ws, err := upgrader.Upgrade(w, req, nil) require.NoError(t, err) + <-startSending for _, event := range events { err = ws.SetWriteDeadline(time.Now().Add(2 * time.Second)) require.NoError(t, err) @@ -209,6 +211,7 @@ func TestWSClientEvents(t *testing.T) { // MissedEvent must close the channels above. wsc.subscriptionsLock.Unlock() + close(startSending) var ( b1Cnt, b2Cnt int @@ -297,11 +300,13 @@ func TestWSClientNonBlockingEvents(t *testing.T) { require.True(t, chCap < len(events)) var blocksSent atomic.Bool + startSending := make(chan struct{}) srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { if req.URL.Path == "/ws" && req.Method == "GET" { var upgrader = websocket.Upgrader{} ws, err := upgrader.Upgrade(w, req, nil) require.NoError(t, err) + <-startSending for _, event := range events { err = ws.SetWriteDeadline(time.Now().Add(2 * time.Second)) require.NoError(t, err) @@ -331,6 +336,7 @@ func TestWSClientNonBlockingEvents(t *testing.T) { wsc.receivers[chan<- *block.Block(bCh)] = []string{"0", "1"} wsc.subscriptionsLock.Unlock() + close(startSending) // Check that events are sent to WSClient. require.Eventually(t, func() bool { return blocksSent.Load()