Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'workhorse/cable_test.go')
-rw-r--r--workhorse/cable_test.go93
1 files changed, 93 insertions, 0 deletions
diff --git a/workhorse/cable_test.go b/workhorse/cable_test.go
new file mode 100644
index 00000000000..7320837541a
--- /dev/null
+++ b/workhorse/cable_test.go
@@ -0,0 +1,93 @@
+package main
+
+import (
+ "net/http"
+ "net/http/httptest"
+ "net/url"
+ "regexp"
+ "testing"
+
+ "github.com/gorilla/websocket"
+ "github.com/stretchr/testify/require"
+
+ "gitlab.com/gitlab-org/gitlab-workhorse/internal/config"
+ "gitlab.com/gitlab-org/gitlab-workhorse/internal/helper"
+ "gitlab.com/gitlab-org/gitlab-workhorse/internal/testhelper"
+)
+
+const cablePath = "/-/cable"
+
+func TestSingleBackend(t *testing.T) {
+ cableServerConns, cableBackendServer := startCableServer()
+ defer cableBackendServer.Close()
+
+ config := newUpstreamWithCableConfig(cableBackendServer.URL, "")
+ workhorse := startWorkhorseServerWithConfig(config)
+ defer workhorse.Close()
+
+ cableURL := websocketURL(workhorse.URL, cablePath)
+
+ client, _, err := dialWebsocket(cableURL, nil)
+ require.NoError(t, err)
+ defer client.Close()
+
+ server := (<-cableServerConns).conn
+ defer server.Close()
+
+ require.NoError(t, say(client, "hello"))
+ requireReadMessage(t, server, websocket.TextMessage, "hello")
+
+ require.NoError(t, say(server, "world"))
+ requireReadMessage(t, client, websocket.TextMessage, "world")
+}
+
+func TestSeparateCableBackend(t *testing.T) {
+ authBackendServer := testhelper.TestServerWithHandler(regexp.MustCompile(`.`), http.HandlerFunc(http.NotFound))
+ defer authBackendServer.Close()
+
+ cableServerConns, cableBackendServer := startCableServer()
+ defer cableBackendServer.Close()
+
+ config := newUpstreamWithCableConfig(authBackendServer.URL, cableBackendServer.URL)
+ workhorse := startWorkhorseServerWithConfig(config)
+ defer workhorse.Close()
+
+ cableURL := websocketURL(workhorse.URL, cablePath)
+
+ client, _, err := dialWebsocket(cableURL, nil)
+ require.NoError(t, err)
+ defer client.Close()
+
+ server := (<-cableServerConns).conn
+ defer server.Close()
+
+ require.NoError(t, say(client, "hello"))
+ requireReadMessage(t, server, websocket.TextMessage, "hello")
+
+ require.NoError(t, say(server, "world"))
+ requireReadMessage(t, client, websocket.TextMessage, "world")
+}
+
+func startCableServer() (chan connWithReq, *httptest.Server) {
+ upgrader := &websocket.Upgrader{}
+
+ connCh := make(chan connWithReq, 1)
+ server := testhelper.TestServerWithHandler(regexp.MustCompile(cablePath), webSocketHandler(upgrader, connCh))
+
+ return connCh, server
+}
+
+func newUpstreamWithCableConfig(authBackend string, cableBackend string) *config.Config {
+ var cableBackendURL *url.URL
+
+ if cableBackend != "" {
+ cableBackendURL = helper.URLMustParse(cableBackend)
+ }
+
+ return &config.Config{
+ Version: "123",
+ DocumentRoot: testDocumentRoot,
+ Backend: helper.URLMustParse(authBackend),
+ CableBackend: cableBackendURL,
+ }
+}