Skip to content

Commit 40b7c55

Browse files
committed
extract testutil/registrytest package
1 parent 361df6c commit 40b7c55

File tree

2 files changed

+30
-19
lines changed

2 files changed

+30
-19
lines changed

internal/provider/provider_test.go

+5-19
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,16 @@ package provider
66
import (
77
"bufio"
88
"context"
9-
"fmt"
109
"io"
11-
"net/http/httptest"
12-
"net/url"
1310
"os"
1411
"path/filepath"
1512
"slices"
1613
"strings"
1714
"testing"
1815

19-
"github.com/google/go-containerregistry/pkg/registry"
2016
"github.com/hashicorp/terraform-plugin-framework/providerserver"
2117
"github.com/hashicorp/terraform-plugin-go/tfprotov6"
18+
"github.com/mafredri/terraform-provider-envbuilder/testutil/registrytest"
2219

2320
"github.com/docker/docker/api/types/container"
2421
"github.com/docker/docker/api/types/image"
@@ -60,16 +57,16 @@ func setup(t testing.TB, files map[string]string) testDependencies {
6057
// TODO: envbuilder creates /.envbuilder/bin/envbuilder owned by root:root which we are unable to clean up.
6158
// This causes tests to fail.
6259
repoDir := t.TempDir()
63-
cacheRepo := runLocalRegistry(t)
60+
regDir := t.TempDir()
61+
reg := registrytest.New(t, regDir)
6462
writeFiles(t, files, repoDir)
6563
return testDependencies{
6664
BuilderImage: envbuilderImageRef,
67-
CacheRepo: cacheRepo,
65+
CacheRepo: reg + "/test",
6866
RepoDir: repoDir,
6967
}
7068
}
7169

72-
7370
func seedCache(ctx context.Context, t testing.TB, deps testDependencies) {
7471
cli, err := client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation())
7572
require.NoError(t, err, "init docker client")
@@ -92,7 +89,7 @@ func seedCache(ctx context.Context, t testing.TB, deps testDependencies) {
9289
testContainerLabel: "true",
9390
}}, &container.HostConfig{
9491
NetworkMode: container.NetworkMode("host"),
95-
Binds: []string{deps.RepoDir+ ":" + deps.RepoDir},
92+
Binds: []string{deps.RepoDir + ":" + deps.RepoDir},
9693
}, nil, nil, "")
9794
require.NoError(t, err, "failed to run envbuilder to seed cache")
9895
t.Cleanup(func() {
@@ -150,17 +147,6 @@ func writeFiles(t testing.TB, files map[string]string, destPath string) {
150147
}
151148
}
152149

153-
func runLocalRegistry(t testing.TB) string {
154-
t.Helper()
155-
tempDir := t.TempDir()
156-
regHandler := registry.New(registry.WithBlobHandler(registry.NewDiskBlobHandler(tempDir)))
157-
regSrv := httptest.NewServer(regHandler)
158-
t.Cleanup(func() { regSrv.Close() })
159-
regSrvURL, err := url.Parse(regSrv.URL)
160-
require.NoError(t, err)
161-
return fmt.Sprintf("localhost:%s/test", regSrvURL.Port())
162-
}
163-
164150
func ensureImage(ctx context.Context, t testing.TB, cli *client.Client, ref string) {
165151
t.Helper()
166152

testutil/registrytest/registrytest.go

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package registrytest
2+
3+
import (
4+
"fmt"
5+
"net/http/httptest"
6+
"net/url"
7+
"testing"
8+
9+
"github.com/google/go-containerregistry/pkg/registry"
10+
"github.com/stretchr/testify/require"
11+
)
12+
13+
// New starts a new Docker registry listening on localhost.
14+
// It will automatically shut down when the test finishes.
15+
// It will store data in dir.
16+
func New(t testing.TB, dir string) string {
17+
t.Helper()
18+
tempDir := t.TempDir()
19+
regHandler := registry.New(registry.WithBlobHandler(registry.NewDiskBlobHandler(tempDir)))
20+
regSrv := httptest.NewServer(regHandler)
21+
t.Cleanup(func() { regSrv.Close() })
22+
regSrvURL, err := url.Parse(regSrv.URL)
23+
require.NoError(t, err)
24+
return fmt.Sprintf("localhost:%s", regSrvURL.Port())
25+
}

0 commit comments

Comments
 (0)