From 0323e40d3cbc4fd72c1c1d2f0b11faefc27e44c7 Mon Sep 17 00:00:00 2001 From: Agniva De Sarker Date: Wed, 26 Oct 2022 13:15:16 +0530 Subject: [PATCH] MM-46874: Change to 400 for failed to upgrade ws (#21492) https://mattermost.atlassian.net/browse/MM-46874 ```release-note NONE ``` --- api4/apitestlib.go | 7 +++++++ api4/websocket.go | 2 +- api4/websocket_test.go | 14 ++++++++++++++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/api4/apitestlib.go b/api4/apitestlib.go index 9b5e53abfc..4606541277 100644 --- a/api4/apitestlib.go +++ b/api4/apitestlib.go @@ -71,6 +71,7 @@ type TestHelper struct { IncludeCacheLayer bool + LogBuffer *mlog.Buffer TestLogger *mlog.Logger } @@ -119,11 +120,16 @@ func setupTestHelper(dbStore store.Store, searchEngine *searchengine.Broker, ent options = append(options, app.StoreOverride(dbStore)) } + buffer := &mlog.Buffer{} + testLogger, _ := mlog.NewLogger() logCfg, _ := config.MloggerConfigFromLoggerConfig(&memoryConfig.LogSettings, nil, config.GetLogFileLocation) if errCfg := testLogger.ConfigureTargets(logCfg, nil); errCfg != nil { panic("failed to configure test logger: " + errCfg.Error()) } + if errW := mlog.AddWriterTarget(testLogger, buffer, true, mlog.StdAll...); errW != nil { + panic("failed to add writer target to test logger: " + errW.Error()) + } // lock logger config so server init cannot override it during testing. testLogger.LockConfiguration() options = append(options, app.SetLogger(testLogger)) @@ -140,6 +146,7 @@ func setupTestHelper(dbStore store.Store, searchEngine *searchengine.Broker, ent IncludeCacheLayer: includeCache, Context: request.EmptyContext(testLogger), TestLogger: testLogger, + LogBuffer: buffer, } th.Context.SetLogger(testLogger) diff --git a/api4/websocket.go b/api4/websocket.go index 540188be8a..5f1cb2cdd3 100644 --- a/api4/websocket.go +++ b/api4/websocket.go @@ -32,7 +32,7 @@ func connectWebSocket(c *Context, w http.ResponseWriter, r *http.Request) { ws, err := upgrader.Upgrade(w, r, nil) if err != nil { - c.Err = model.NewAppError("connect", "api.web_socket.connect.upgrade.app_error", nil, err.Error(), http.StatusInternalServerError) + c.Err = model.NewAppError("connect", "api.web_socket.connect.upgrade.app_error", nil, err.Error(), http.StatusBadRequest) return } diff --git a/api4/websocket_test.go b/api4/websocket_test.go index 28729b936a..7d35c12578 100644 --- a/api4/websocket_test.go +++ b/api4/websocket_test.go @@ -15,6 +15,8 @@ import ( "github.com/stretchr/testify/require" "github.com/mattermost/mattermost-server/v6/model" + "github.com/mattermost/mattermost-server/v6/shared/mlog" + "github.com/mattermost/mattermost-server/v6/testlib" ) func TestWebSocketTrailingSlash(t *testing.T) { @@ -417,3 +419,15 @@ func TestWebSocketStatuses(t *testing.T) { WebSocketClient.Close() } + +func TestWebSocketUpgrade(t *testing.T) { + th := Setup(t) + defer th.TearDown() + + url := fmt.Sprintf("http://localhost:%v", th.App.Srv().ListenAddr.Port) + model.APIURLSuffix + "/websocket" + resp, err := http.Get(url) + require.NoError(t, err) + require.Equal(t, resp.StatusCode, http.StatusBadRequest) + require.NoError(t, th.TestLogger.Flush()) + testlib.AssertLog(t, th.LogBuffer, mlog.LvlDebug.Name, "Failed to upgrade websocket connection.") +}