Skip to content

Commit dbe4135

Browse files
authored
chore: refactor: add testutil package, add extra git helpers (#142)
1 parent 95ae2f0 commit dbe4135

File tree

6 files changed

+117
-120
lines changed

6 files changed

+117
-120
lines changed

devcontainer/devcontainer_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import (
1212

1313
"github.com/coder/envbuilder/devcontainer"
1414
"github.com/coder/envbuilder/devcontainer/features"
15-
"github.com/coder/envbuilder/registrytest"
15+
"github.com/coder/envbuilder/testutil/registrytest"
1616
"github.com/go-git/go-billy/v5/memfs"
1717
"github.com/google/go-containerregistry/pkg/name"
1818
v1 "github.com/google/go-containerregistry/pkg/v1"

devcontainer/features/features_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import (
55
"testing"
66

77
"github.com/coder/envbuilder/devcontainer/features"
8-
"github.com/coder/envbuilder/registrytest"
8+
"github.com/coder/envbuilder/testutil/registrytest"
99
"github.com/go-git/go-billy/v5/memfs"
1010
"github.com/stretchr/testify/require"
1111
)

git_test.go

+18-36
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,11 @@ import (
99
"os"
1010
"regexp"
1111
"testing"
12-
"time"
1312

1413
"github.com/coder/envbuilder"
15-
"github.com/coder/envbuilder/gittest"
14+
"github.com/coder/envbuilder/testutil/gittest"
1615
"github.com/go-git/go-billy/v5"
1716
"github.com/go-git/go-billy/v5/memfs"
18-
"github.com/go-git/go-git/v5"
19-
"github.com/go-git/go-git/v5/plumbing/object"
2017
githttp "github.com/go-git/go-git/v5/plumbing/transport/http"
2118
"github.com/stretchr/testify/require"
2219
)
@@ -77,13 +74,16 @@ func TestCloneRepo(t *testing.T) {
7774

7875
// We do not overwrite a repo if one is already present.
7976
t.Run("AlreadyCloned", func(t *testing.T) {
80-
srvURL := setupGit(t, tc.srvUsername, tc.srvPassword)
77+
srvFS := memfs.New()
78+
_ = gittest.NewRepo(t, srvFS, gittest.Commit(t, "README.md", "Hello, world!", "Wow!"))
79+
authMW := gittest.BasicAuthMW(tc.srvUsername, tc.srvPassword)
80+
srv := httptest.NewServer(authMW(gittest.NewServer(srvFS)))
8181
clientFS := memfs.New()
8282
// A repo already exists!
8383
_ = gittest.NewRepo(t, clientFS)
8484
cloned, err := envbuilder.CloneRepo(context.Background(), envbuilder.CloneRepoOptions{
8585
Path: "/",
86-
RepoURL: srvURL,
86+
RepoURL: srv.URL,
8787
Storage: clientFS,
8888
})
8989
require.NoError(t, err)
@@ -93,12 +93,15 @@ func TestCloneRepo(t *testing.T) {
9393
// Basic Auth
9494
t.Run("BasicAuth", func(t *testing.T) {
9595
t.Parallel()
96-
srvURL := setupGit(t, tc.srvUsername, tc.srvPassword)
96+
srvFS := memfs.New()
97+
_ = gittest.NewRepo(t, srvFS, gittest.Commit(t, "README.md", "Hello, world!", "Wow!"))
98+
authMW := gittest.BasicAuthMW(tc.srvUsername, tc.srvPassword)
99+
srv := httptest.NewServer(authMW(gittest.NewServer(srvFS)))
97100
clientFS := memfs.New()
98101

99102
cloned, err := envbuilder.CloneRepo(context.Background(), envbuilder.CloneRepoOptions{
100103
Path: "/workspace",
101-
RepoURL: srvURL,
104+
RepoURL: srv.URL,
102105
Storage: clientFS,
103106
RepoAuth: &githttp.BasicAuth{
104107
Username: tc.username,
@@ -117,14 +120,18 @@ func TestCloneRepo(t *testing.T) {
117120
require.Equal(t, "Hello, world!", readme)
118121
gitConfig := mustRead(t, clientFS, "/workspace/.git/config")
119122
// Ensure we do not modify the git URL that folks pass in.
120-
require.Regexp(t, fmt.Sprintf(`(?m)^\s+url\s+=\s+%s\s*$`, regexp.QuoteMeta(srvURL)), gitConfig)
123+
require.Regexp(t, fmt.Sprintf(`(?m)^\s+url\s+=\s+%s\s*$`, regexp.QuoteMeta(srv.URL)), gitConfig)
121124
})
122125

123126
// In-URL-style auth e.g. http://user:password@host:port
124127
t.Run("InURL", func(t *testing.T) {
125128
t.Parallel()
126-
srvURL := setupGit(t, tc.srvUsername, tc.srvPassword)
127-
authURL, err := url.Parse(srvURL)
129+
srvFS := memfs.New()
130+
_ = gittest.NewRepo(t, srvFS, gittest.Commit(t, "README.md", "Hello, world!", "Wow!"))
131+
authMW := gittest.BasicAuthMW(tc.srvUsername, tc.srvPassword)
132+
srv := httptest.NewServer(authMW(gittest.NewServer(srvFS)))
133+
134+
authURL, err := url.Parse(srv.URL)
128135
require.NoError(t, err)
129136
authURL.User = url.UserPassword(tc.username, tc.password)
130137
clientFS := memfs.New()
@@ -160,28 +167,3 @@ func mustRead(t *testing.T, fs billy.Filesystem, path string) string {
160167
require.NoError(t, err)
161168
return string(content)
162169
}
163-
164-
func setupGit(t *testing.T, user, pass string) (url string) {
165-
serverFS := memfs.New()
166-
repo := gittest.NewRepo(t, serverFS)
167-
tree, err := repo.Worktree()
168-
require.NoError(t, err)
169-
170-
gittest.WriteFile(t, serverFS, "README.md", "Hello, world!")
171-
_, err = tree.Add("README.md")
172-
require.NoError(t, err)
173-
commit, err := tree.Commit("Wow!", &git.CommitOptions{
174-
Author: &object.Signature{
175-
Name: "Example",
176-
177-
When: time.Now(),
178-
},
179-
})
180-
require.NoError(t, err)
181-
_, err = repo.CommitObject(commit)
182-
require.NoError(t, err)
183-
184-
authMW := gittest.BasicAuthMW(user, pass)
185-
srv := httptest.NewServer(authMW(gittest.NewServer(serverFS)))
186-
return srv.URL
187-
}

0 commit comments

Comments
 (0)