github.com/levb/mattermost-server@v5.3.1+incompatible/app/web_hub_test.go (about)

     1  package app
     2  
     3  import (
     4  	"net"
     5  	"net/http"
     6  	"net/http/httptest"
     7  	"testing"
     8  
     9  	"github.com/gorilla/websocket"
    10  	goi18n "github.com/nicksnyder/go-i18n/i18n"
    11  	"github.com/stretchr/testify/require"
    12  
    13  	"github.com/mattermost/mattermost-server/model"
    14  )
    15  
    16  func dummyWebsocketHandler(t *testing.T) http.HandlerFunc {
    17  	return func(w http.ResponseWriter, req *http.Request) {
    18  		upgrader := &websocket.Upgrader{
    19  			ReadBufferSize:  1024,
    20  			WriteBufferSize: 1024,
    21  		}
    22  		conn, err := upgrader.Upgrade(w, req, nil)
    23  		for err == nil {
    24  			_, _, err = conn.ReadMessage()
    25  		}
    26  		if _, ok := err.(*websocket.CloseError); !ok {
    27  			require.NoError(t, err)
    28  		}
    29  	}
    30  }
    31  
    32  func registerDummyWebConn(t *testing.T, a *App, addr net.Addr, userId string) *WebConn {
    33  	session, appErr := a.CreateSession(&model.Session{
    34  		UserId: userId,
    35  	})
    36  	require.Nil(t, appErr)
    37  
    38  	d := websocket.Dialer{}
    39  	c, _, err := d.Dial("ws://"+addr.String()+"/ws", nil)
    40  	require.NoError(t, err)
    41  
    42  	wc := a.NewWebConn(c, *session, goi18n.IdentityTfunc(), "en")
    43  	a.HubRegister(wc)
    44  	go wc.Pump()
    45  	return wc
    46  }
    47  
    48  func TestHubStopWithMultipleConnections(t *testing.T) {
    49  	th := Setup().InitBasic()
    50  	defer th.TearDown()
    51  
    52  	s := httptest.NewServer(http.HandlerFunc(dummyWebsocketHandler(t)))
    53  	defer s.Close()
    54  
    55  	th.App.HubStart()
    56  	wc1 := registerDummyWebConn(t, th.App, s.Listener.Addr(), th.BasicUser.Id)
    57  	wc2 := registerDummyWebConn(t, th.App, s.Listener.Addr(), th.BasicUser.Id)
    58  	wc3 := registerDummyWebConn(t, th.App, s.Listener.Addr(), th.BasicUser.Id)
    59  	defer wc1.Close()
    60  	defer wc2.Close()
    61  	defer wc3.Close()
    62  }