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/main_test.go')
-rw-r--r--workhorse/main_test.go85
1 files changed, 85 insertions, 0 deletions
diff --git a/workhorse/main_test.go b/workhorse/main_test.go
index 6e61e2fc65a..349e2d78109 100644
--- a/workhorse/main_test.go
+++ b/workhorse/main_test.go
@@ -814,6 +814,8 @@ func startWorkhorseServerWithConfig(cfg *config.Config) *httptest.Server {
testhelper.ConfigureSecret()
u := upstream.NewUpstream(*cfg, logrus.StandardLogger())
+ gitaly.InitializeSidechannelRegistry(logrus.StandardLogger())
+
return httptest.NewServer(u)
}
@@ -834,6 +836,20 @@ func gitOkBody(t *testing.T) *api.Response {
}
}
+func gitOkBodyWithSidechannel(t *testing.T) *api.Response {
+ return &api.Response{
+ GL_ID: "user-123",
+ GL_USERNAME: "username",
+ Repository: gitalypb.Repository{
+ StorageName: "default",
+ RelativePath: "foo/bar.git",
+ },
+ GitalyServer: gitaly.Server{
+ Sidechannel: true,
+ },
+ }
+}
+
func httpGet(t *testing.T, url string, headers map[string]string) (*http.Response, string) {
req, err := http.NewRequest("GET", url, nil)
require.NoError(t, err)
@@ -934,3 +950,72 @@ func TestHealthChecksUnreachable(t *testing.T) {
})
}
}
+
+func TestDependencyProxyInjector(t *testing.T) {
+ token := "token"
+ bodyLength := 4096
+ expectedBody := strings.Repeat("p", bodyLength)
+
+ testCases := []struct {
+ desc string
+ finalizeStatus int
+ }{
+ {
+ desc: "user downloads the file when the request is successfully finalized",
+ finalizeStatus: 200,
+ }, {
+ desc: "user downloads the file even when the request fails to be finalized",
+ finalizeStatus: 500,
+ },
+ }
+
+ for _, tc := range testCases {
+ t.Run(tc.desc, func(t *testing.T) {
+ originResource := "/origin_resource"
+
+ originResourceServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ require.Equal(t, originResource, r.URL.String())
+
+ w.Header().Set("Content-Length", strconv.Itoa(bodyLength))
+
+ io.WriteString(w, expectedBody)
+ }))
+ defer originResourceServer.Close()
+
+ originResourceUrl := originResourceServer.URL + originResource
+
+ ts := testhelper.TestServerWithHandler(regexp.MustCompile(`.`), func(w http.ResponseWriter, r *http.Request) {
+ switch r.URL.String() {
+ case "/base":
+ params := `{"Url": "` + originResourceUrl + `", "Token": "` + token + `"}`
+ w.Header().Set("Gitlab-Workhorse-Send-Data", `send-dependency:`+base64.URLEncoding.EncodeToString([]byte(params)))
+ case "/base/upload/authorize":
+ w.Header().Set("Content-Type", api.ResponseContentType)
+ _, err := fmt.Fprintf(w, `{"TempPath":"%s"}`, scratchDir)
+ require.NoError(t, err)
+ case "/base/upload":
+ w.WriteHeader(tc.finalizeStatus)
+ default:
+ t.Fatalf("unexpected request: %s", r.URL)
+ }
+ })
+ defer ts.Close()
+
+ ws := startWorkhorseServer(ts.URL)
+ defer ws.Close()
+
+ resp, err := http.DefaultClient.Get(ws.URL + "/base")
+ require.NoError(t, err)
+ defer resp.Body.Close()
+
+ body, err := io.ReadAll(resp.Body)
+ require.NoError(t, err)
+
+ require.NoError(t, resp.Body.Close()) // Client closes connection
+ ws.Close() // Wait for server handler to return
+
+ require.Equal(t, 200, resp.StatusCode, "status code")
+ require.Equal(t, expectedBody, string(body), "response body")
+ })
+ }
+}