diff --git a/act/artifactcache/handler_test.go b/act/artifactcache/handler_test.go index 7391c73c..6059cd2d 100644 --- a/act/artifactcache/handler_test.go +++ b/act/artifactcache/handler_test.go @@ -18,13 +18,31 @@ import ( "go.etcd.io/bbolt" ) +const cache_repo = "testuser/repo" +const cache_runnum = "1" +const cache_timestamp = "0" +const cache_mac = "c13854dd1ac599d1d61680cd93c26b77ba0ee10f374a3408bcaea82f38ca1865" + +type AuthHeaderTransport struct { + T http.RoundTripper +} + +func (t *AuthHeaderTransport) RoundTrip(req *http.Request) (*http.Response, error) { + req.Header.Set("Forgejo-Cache-Repo", cache_repo) + req.Header.Set("Forgejo-Cache-RunNumber", cache_runnum) + req.Header.Set("Forgejo-Cache-Timestamp", cache_timestamp) + req.Header.Set("Forgejo-Cache-MAC", cache_mac) + return t.T.RoundTrip(req) +} + +var httpClientTransport = AuthHeaderTransport{http.DefaultTransport} +var httpClient = http.Client{Transport: &httpClientTransport} + func TestHandler(t *testing.T) { dir := filepath.Join(t.TempDir(), "artifactcache") handler, err := StartHandler(dir, "", 0, "secret", nil) require.NoError(t, err) - t.Skip("TODO: handle secret") - base := fmt.Sprintf("%s%s", handler.ExternalURL(), urlBase) defer func() { @@ -43,7 +61,7 @@ func TestHandler(t *testing.T) { require.NoError(t, handler.Close()) assert.Nil(t, handler.server) assert.Nil(t, handler.listener) - _, err := http.Post(fmt.Sprintf("%s/caches/%d", base, 1), "", nil) + _, err := httpClient.Post(fmt.Sprintf("%s/caches/%d", base, 1), "", nil) assert.Error(t, err) }) }() @@ -51,7 +69,7 @@ func TestHandler(t *testing.T) { t.Run("get not exist", func(t *testing.T) { key := strings.ToLower(t.Name()) version := "c19da02a2bd7e77277f1ac29ab45c09b7d46a4ee758284e26bb3045ad11d9d20" - resp, err := http.Get(fmt.Sprintf("%s/cache?keys=%s&version=%s", base, key, version)) + resp, err := httpClient.Get(fmt.Sprintf("%s/cache?keys=%s&version=%s", base, key, version)) require.NoError(t, err) require.Equal(t, 204, resp.StatusCode) }) @@ -66,7 +84,7 @@ func TestHandler(t *testing.T) { }) t.Run("clean", func(t *testing.T) { - resp, err := http.Post(fmt.Sprintf("%s/clean", base), "", nil) + resp, err := httpClient.Post(fmt.Sprintf("%s/clean", base), "", nil) require.NoError(t, err) assert.Equal(t, 200, resp.StatusCode) }) @@ -74,7 +92,7 @@ func TestHandler(t *testing.T) { t.Run("reserve with bad request", func(t *testing.T) { body := []byte(`invalid json`) require.NoError(t, err) - resp, err := http.Post(fmt.Sprintf("%s/caches", base), "application/json", bytes.NewReader(body)) + resp, err := httpClient.Post(fmt.Sprintf("%s/caches", base), "application/json", bytes.NewReader(body)) require.NoError(t, err) assert.Equal(t, 400, resp.StatusCode) }) @@ -92,7 +110,7 @@ func TestHandler(t *testing.T) { Size: 100, }) require.NoError(t, err) - resp, err := http.Post(fmt.Sprintf("%s/caches", base), "application/json", bytes.NewReader(body)) + resp, err := httpClient.Post(fmt.Sprintf("%s/caches", base), "application/json", bytes.NewReader(body)) require.NoError(t, err) assert.Equal(t, 200, resp.StatusCode) @@ -106,7 +124,7 @@ func TestHandler(t *testing.T) { Size: 100, }) require.NoError(t, err) - resp, err := http.Post(fmt.Sprintf("%s/caches", base), "application/json", bytes.NewReader(body)) + resp, err := httpClient.Post(fmt.Sprintf("%s/caches", base), "application/json", bytes.NewReader(body)) require.NoError(t, err) assert.Equal(t, 200, resp.StatusCode) @@ -123,7 +141,7 @@ func TestHandler(t *testing.T) { require.NoError(t, err) req.Header.Set("Content-Type", "application/octet-stream") req.Header.Set("Content-Range", "bytes 0-99/*") - resp, err := http.DefaultClient.Do(req) + resp, err := httpClient.Do(req) require.NoError(t, err) assert.Equal(t, 400, resp.StatusCode) }) @@ -134,7 +152,7 @@ func TestHandler(t *testing.T) { require.NoError(t, err) req.Header.Set("Content-Type", "application/octet-stream") req.Header.Set("Content-Range", "bytes 0-99/*") - resp, err := http.DefaultClient.Do(req) + resp, err := httpClient.Do(req) require.NoError(t, err) assert.Equal(t, 400, resp.StatusCode) }) @@ -153,7 +171,7 @@ func TestHandler(t *testing.T) { Size: 100, }) require.NoError(t, err) - resp, err := http.Post(fmt.Sprintf("%s/caches", base), "application/json", bytes.NewReader(body)) + resp, err := httpClient.Post(fmt.Sprintf("%s/caches", base), "application/json", bytes.NewReader(body)) require.NoError(t, err) assert.Equal(t, 200, resp.StatusCode) @@ -169,12 +187,12 @@ func TestHandler(t *testing.T) { require.NoError(t, err) req.Header.Set("Content-Type", "application/octet-stream") req.Header.Set("Content-Range", "bytes 0-99/*") - resp, err := http.DefaultClient.Do(req) + resp, err := httpClient.Do(req) require.NoError(t, err) assert.Equal(t, 200, resp.StatusCode) } { - resp, err := http.Post(fmt.Sprintf("%s/caches/%d", base, id), "", nil) + resp, err := httpClient.Post(fmt.Sprintf("%s/caches/%d", base, id), "", nil) require.NoError(t, err) assert.Equal(t, 200, resp.StatusCode) } @@ -184,7 +202,7 @@ func TestHandler(t *testing.T) { require.NoError(t, err) req.Header.Set("Content-Type", "application/octet-stream") req.Header.Set("Content-Range", "bytes 0-99/*") - resp, err := http.DefaultClient.Do(req) + resp, err := httpClient.Do(req) require.NoError(t, err) assert.Equal(t, 400, resp.StatusCode) } @@ -204,7 +222,7 @@ func TestHandler(t *testing.T) { Size: 100, }) require.NoError(t, err) - resp, err := http.Post(fmt.Sprintf("%s/caches", base), "application/json", bytes.NewReader(body)) + resp, err := httpClient.Post(fmt.Sprintf("%s/caches", base), "application/json", bytes.NewReader(body)) require.NoError(t, err) assert.Equal(t, 200, resp.StatusCode) @@ -220,7 +238,7 @@ func TestHandler(t *testing.T) { require.NoError(t, err) req.Header.Set("Content-Type", "application/octet-stream") req.Header.Set("Content-Range", "bytes xx-99/*") - resp, err := http.DefaultClient.Do(req) + resp, err := httpClient.Do(req) require.NoError(t, err) assert.Equal(t, 400, resp.StatusCode) } @@ -228,7 +246,7 @@ func TestHandler(t *testing.T) { t.Run("commit with bad id", func(t *testing.T) { { - resp, err := http.Post(fmt.Sprintf("%s/caches/invalid_id", base), "", nil) + resp, err := httpClient.Post(fmt.Sprintf("%s/caches/invalid_id", base), "", nil) require.NoError(t, err) assert.Equal(t, 400, resp.StatusCode) } @@ -236,7 +254,7 @@ func TestHandler(t *testing.T) { t.Run("commit with not exist id", func(t *testing.T) { { - resp, err := http.Post(fmt.Sprintf("%s/caches/%d", base, 100), "", nil) + resp, err := httpClient.Post(fmt.Sprintf("%s/caches/%d", base, 100), "", nil) require.NoError(t, err) assert.Equal(t, 400, resp.StatusCode) } @@ -256,7 +274,7 @@ func TestHandler(t *testing.T) { Size: 100, }) require.NoError(t, err) - resp, err := http.Post(fmt.Sprintf("%s/caches", base), "application/json", bytes.NewReader(body)) + resp, err := httpClient.Post(fmt.Sprintf("%s/caches", base), "application/json", bytes.NewReader(body)) require.NoError(t, err) assert.Equal(t, 200, resp.StatusCode) @@ -272,17 +290,17 @@ func TestHandler(t *testing.T) { require.NoError(t, err) req.Header.Set("Content-Type", "application/octet-stream") req.Header.Set("Content-Range", "bytes 0-99/*") - resp, err := http.DefaultClient.Do(req) + resp, err := httpClient.Do(req) require.NoError(t, err) assert.Equal(t, 200, resp.StatusCode) } { - resp, err := http.Post(fmt.Sprintf("%s/caches/%d", base, id), "", nil) + resp, err := httpClient.Post(fmt.Sprintf("%s/caches/%d", base, id), "", nil) require.NoError(t, err) assert.Equal(t, 200, resp.StatusCode) } { - resp, err := http.Post(fmt.Sprintf("%s/caches/%d", base, id), "", nil) + resp, err := httpClient.Post(fmt.Sprintf("%s/caches/%d", base, id), "", nil) require.NoError(t, err) assert.Equal(t, 400, resp.StatusCode) } @@ -302,7 +320,7 @@ func TestHandler(t *testing.T) { Size: 100, }) require.NoError(t, err) - resp, err := http.Post(fmt.Sprintf("%s/caches", base), "application/json", bytes.NewReader(body)) + resp, err := httpClient.Post(fmt.Sprintf("%s/caches", base), "application/json", bytes.NewReader(body)) require.NoError(t, err) assert.Equal(t, 200, resp.StatusCode) @@ -318,31 +336,31 @@ func TestHandler(t *testing.T) { require.NoError(t, err) req.Header.Set("Content-Type", "application/octet-stream") req.Header.Set("Content-Range", "bytes 0-59/*") - resp, err := http.DefaultClient.Do(req) + resp, err := httpClient.Do(req) require.NoError(t, err) assert.Equal(t, 200, resp.StatusCode) } { - resp, err := http.Post(fmt.Sprintf("%s/caches/%d", base, id), "", nil) + resp, err := httpClient.Post(fmt.Sprintf("%s/caches/%d", base, id), "", nil) require.NoError(t, err) assert.Equal(t, 500, resp.StatusCode) } }) t.Run("get with bad id", func(t *testing.T) { - resp, err := http.Get(fmt.Sprintf("%s/artifacts/invalid_id", base)) + resp, err := httpClient.Get(fmt.Sprintf("%s/artifacts/invalid_id", base)) require.NoError(t, err) require.Equal(t, 400, resp.StatusCode) }) t.Run("get with not exist id", func(t *testing.T) { - resp, err := http.Get(fmt.Sprintf("%s/artifacts/%d", base, 100)) + resp, err := httpClient.Get(fmt.Sprintf("%s/artifacts/%d", base, 100)) require.NoError(t, err) require.Equal(t, 404, resp.StatusCode) }) t.Run("get with not exist id", func(t *testing.T) { - resp, err := http.Get(fmt.Sprintf("%s/artifacts/%d", base, 100)) + resp, err := httpClient.Get(fmt.Sprintf("%s/artifacts/%d", base, 100)) require.NoError(t, err) require.Equal(t, 404, resp.StatusCode) }) @@ -373,7 +391,7 @@ func TestHandler(t *testing.T) { key + "_a", }, ",") - resp, err := http.Get(fmt.Sprintf("%s/cache?keys=%s&version=%s", base, reqKeys, version)) + resp, err := httpClient.Get(fmt.Sprintf("%s/cache?keys=%s&version=%s", base, reqKeys, version)) require.NoError(t, err) require.Equal(t, 200, resp.StatusCode) @@ -393,7 +411,7 @@ func TestHandler(t *testing.T) { assert.Equal(t, "hit", got.Result) assert.Equal(t, keys[except], got.CacheKey) - contentResp, err := http.Get(got.ArchiveLocation) + contentResp, err := httpClient.Get(got.ArchiveLocation) require.NoError(t, err) require.Equal(t, 200, contentResp.StatusCode) content, err := io.ReadAll(contentResp.Body) @@ -411,7 +429,7 @@ func TestHandler(t *testing.T) { { reqKey := key + "_aBc" - resp, err := http.Get(fmt.Sprintf("%s/cache?keys=%s&version=%s", base, reqKey, version)) + resp, err := httpClient.Get(fmt.Sprintf("%s/cache?keys=%s&version=%s", base, reqKey, version)) require.NoError(t, err) require.Equal(t, 200, resp.StatusCode) got := struct { @@ -450,7 +468,7 @@ func TestHandler(t *testing.T) { key + "_a_b", }, ",") - resp, err := http.Get(fmt.Sprintf("%s/cache?keys=%s&version=%s", base, reqKeys, version)) + resp, err := httpClient.Get(fmt.Sprintf("%s/cache?keys=%s&version=%s", base, reqKeys, version)) require.NoError(t, err) require.Equal(t, 200, resp.StatusCode) @@ -468,7 +486,7 @@ func TestHandler(t *testing.T) { require.NoError(t, json.NewDecoder(resp.Body).Decode(&got)) assert.Equal(t, keys[expect], got.CacheKey) - contentResp, err := http.Get(got.ArchiveLocation) + contentResp, err := httpClient.Get(got.ArchiveLocation) require.NoError(t, err) require.Equal(t, 200, contentResp.StatusCode) content, err := io.ReadAll(contentResp.Body) @@ -502,7 +520,7 @@ func TestHandler(t *testing.T) { key + "_a_b", }, ",") - resp, err := http.Get(fmt.Sprintf("%s/cache?keys=%s&version=%s", base, reqKeys, version)) + resp, err := httpClient.Get(fmt.Sprintf("%s/cache?keys=%s&version=%s", base, reqKeys, version)) require.NoError(t, err) require.Equal(t, 200, resp.StatusCode) @@ -521,7 +539,7 @@ func TestHandler(t *testing.T) { require.NoError(t, json.NewDecoder(resp.Body).Decode(&got)) assert.Equal(t, keys[expect], got.CacheKey) - contentResp, err := http.Get(got.ArchiveLocation) + contentResp, err := httpClient.Get(got.ArchiveLocation) require.NoError(t, err) require.Equal(t, 200, contentResp.StatusCode) content, err := io.ReadAll(contentResp.Body) @@ -539,7 +557,7 @@ func uploadCacheNormally(t *testing.T, base, key, version string, content []byte Size: int64(len(content)), }) require.NoError(t, err) - resp, err := http.Post(fmt.Sprintf("%s/caches", base), "application/json", bytes.NewReader(body)) + resp, err := httpClient.Post(fmt.Sprintf("%s/caches", base), "application/json", bytes.NewReader(body)) require.NoError(t, err) assert.Equal(t, 200, resp.StatusCode) @@ -555,18 +573,18 @@ func uploadCacheNormally(t *testing.T, base, key, version string, content []byte require.NoError(t, err) req.Header.Set("Content-Type", "application/octet-stream") req.Header.Set("Content-Range", "bytes 0-99/*") - resp, err := http.DefaultClient.Do(req) + resp, err := httpClient.Do(req) require.NoError(t, err) assert.Equal(t, 200, resp.StatusCode) } { - resp, err := http.Post(fmt.Sprintf("%s/caches/%d", base, id), "", nil) + resp, err := httpClient.Post(fmt.Sprintf("%s/caches/%d", base, id), "", nil) require.NoError(t, err) assert.Equal(t, 200, resp.StatusCode) } var archiveLocation string { - resp, err := http.Get(fmt.Sprintf("%s/cache?keys=%s&version=%s", base, key, version)) + resp, err := httpClient.Get(fmt.Sprintf("%s/cache?keys=%s&version=%s", base, key, version)) require.NoError(t, err) require.Equal(t, 200, resp.StatusCode) got := struct { @@ -580,7 +598,7 @@ func uploadCacheNormally(t *testing.T, base, key, version string, content []byte archiveLocation = got.ArchiveLocation } { - resp, err := http.Get(archiveLocation) //nolint:gosec + resp, err := httpClient.Get(archiveLocation) require.NoError(t, err) require.Equal(t, 200, resp.StatusCode) got, err := io.ReadAll(resp.Body) diff --git a/act/artifactcache/mac_test.go b/act/artifactcache/mac_test.go index 10d6c5a8..2087ccc2 100644 --- a/act/artifactcache/mac_test.go +++ b/act/artifactcache/mac_test.go @@ -73,7 +73,7 @@ func TestMac(t *testing.T) { ts := "1337" mac := computeMac(secret, name, run, ts) - expectedMac := "09b0e9111660359d319c2d55c0664b5a6c5915c2f705b08af61aa63e7542f511" // * Precomputed, anytime the computeMac function changes this needs to be recalculated + expectedMac := "f666f06f917acb7186e152195b2a8c8d36d068ce683454be0878806e08e04f2b" // * Precomputed, anytime the computeMac function changes this needs to be recalculated require.Equal(t, mac, expectedMac) })