diff --git a/pkg/storegateway/bucket_e2e_test.go b/pkg/storegateway/bucket_e2e_test.go index 72d72f73a91..ce9f9f142f8 100644 --- a/pkg/storegateway/bucket_e2e_test.go +++ b/pkg/storegateway/bucket_e2e_test.go @@ -27,6 +27,7 @@ import ( mimir_tsdb "github.com/grafana/mimir/pkg/storage/tsdb" "github.com/grafana/mimir/pkg/storegateway/indexcache" + "github.com/grafana/mimir/pkg/storegateway/testhelper" "github.com/thanos-io/thanos/pkg/block" "github.com/thanos-io/thanos/pkg/block/metadata" @@ -90,9 +91,9 @@ func prepareTestBlocks(t testing.TB, now time.Time, count int, dir string, bkt o // Create two blocks per time slot. Only add 10 samples each so only one chunk // gets created each. This way we can easily verify we got 10 chunks per series below. - id1, err := CreateBlock(ctx, dir, series[:4], 10, mint, maxt, extLset, 0, metadata.NoneFunc) + id1, err := testhelper.CreateBlock(ctx, dir, series[:4], 10, mint, maxt, extLset, 0, metadata.NoneFunc) assert.NoError(t, err) - id2, err := CreateBlock(ctx, dir, series[4:], 10, mint, maxt, extLset, 0, metadata.NoneFunc) + id2, err := testhelper.CreateBlock(ctx, dir, series[4:], 10, mint, maxt, extLset, 0, metadata.NoneFunc) assert.NoError(t, err) dir1, dir2 := filepath.Join(dir, id1.String()), filepath.Join(dir, id2.String()) diff --git a/pkg/storegateway/helpers_test.go b/pkg/storegateway/testhelper/testhelper.go similarity index 99% rename from pkg/storegateway/helpers_test.go rename to pkg/storegateway/testhelper/testhelper.go index 9ee16eca066..4ec186f742f 100644 --- a/pkg/storegateway/helpers_test.go +++ b/pkg/storegateway/testhelper/testhelper.go @@ -2,7 +2,7 @@ // Provenance-includes-location: https://github.com/thanos-io/thanos/blob/main/pkg/testutil/e2eutil/prometheus.go // Provenance-includes-license: Apache-2.0 // Provenance-includes-copyright: The Thanos Authors. -package storegateway +package testhelper import ( "context" diff --git a/pkg/util/test/copy.go b/pkg/util/test/copy.go new file mode 100644 index 00000000000..ea5c7c05e5c --- /dev/null +++ b/pkg/util/test/copy.go @@ -0,0 +1,57 @@ +// SPDX-License-Identifier: AGPL-3.0-only +// Provenance-includes-location: https://github.com/thanos-io/thanos/blob/main/pkg/testutil/e2eutil/copy.go +// Provenance-includes-license: Apache-2.0 +// Provenance-includes-copyright: The Thanos Authors. + +package test + +import ( + "io" + "os" + "path/filepath" + "testing" + + "github.com/grafana/dskit/runutil" + "github.com/pkg/errors" + "github.com/stretchr/testify/require" +) + +func Copy(t testing.TB, src, dst string) { + require.NoError(t, copyRecursive(src, dst)) +} + +func copyRecursive(src, dst string) error { + return filepath.Walk(src, func(path string, info os.FileInfo, err error) error { + if err != nil { + return err + } + + relPath, err := filepath.Rel(src, path) + if err != nil { + return err + } + + if info.IsDir() { + return os.MkdirAll(filepath.Join(dst, relPath), os.ModePerm) + } + + if !info.Mode().IsRegular() { + return errors.Errorf("%s is not a regular file", path) + } + + source, err := os.Open(filepath.Clean(path)) + if err != nil { + return err + } + defer runutil.CloseWithErrCapture(&err, source, "close file") + + destination, err := os.Create(filepath.Join(dst, relPath)) + if err != nil { + return err + } + defer runutil.CloseWithErrCapture(&err, destination, "close file") + + _, err = io.Copy(destination, source) + return err + }) +}