Skip to content

Commit 260ebf9

Browse files
committed
gittest: expose git server and allow committing from it
1 parent e14b952 commit 260ebf9

File tree

3 files changed

+41
-16
lines changed

3 files changed

+41
-16
lines changed

git/git_test.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ func TestCloneRepo(t *testing.T) {
8383
// We do not overwrite a repo if one is already present.
8484
t.Run("AlreadyCloned", func(t *testing.T) {
8585
srvFS := memfs.New()
86-
_ = gittest.NewRepo(t, srvFS, gittest.Commit(t, "README.md", "Hello, world!", "Wow!"))
86+
_ = gittest.NewRepo(t, srvFS).Commit(gittest.Commit(t, "README.md", "Hello, world!", "Wow!"))
8787
authMW := mwtest.BasicAuthMW(tc.srvUsername, tc.srvPassword)
8888
srv := httptest.NewServer(authMW(gittest.NewServer(srvFS)))
8989
clientFS := memfs.New()
@@ -102,7 +102,7 @@ func TestCloneRepo(t *testing.T) {
102102
t.Run("BasicAuth", func(t *testing.T) {
103103
t.Parallel()
104104
srvFS := memfs.New()
105-
_ = gittest.NewRepo(t, srvFS, gittest.Commit(t, "README.md", "Hello, world!", "Wow!"))
105+
_ = gittest.NewRepo(t, srvFS).Commit(gittest.Commit(t, "README.md", "Hello, world!", "Wow!"))
106106
authMW := mwtest.BasicAuthMW(tc.srvUsername, tc.srvPassword)
107107
srv := httptest.NewServer(authMW(gittest.NewServer(srvFS)))
108108
clientFS := memfs.New()
@@ -135,7 +135,7 @@ func TestCloneRepo(t *testing.T) {
135135
t.Run("InURL", func(t *testing.T) {
136136
t.Parallel()
137137
srvFS := memfs.New()
138-
_ = gittest.NewRepo(t, srvFS, gittest.Commit(t, "README.md", "Hello, world!", "Wow!"))
138+
_ = gittest.NewRepo(t, srvFS).Commit(gittest.Commit(t, "README.md", "Hello, world!", "Wow!"))
139139
authMW := mwtest.BasicAuthMW(tc.srvUsername, tc.srvPassword)
140140
srv := httptest.NewServer(authMW(gittest.NewServer(srvFS)))
141141

@@ -173,7 +173,7 @@ func TestShallowCloneRepo(t *testing.T) {
173173
t.Run("NotEmpty", func(t *testing.T) {
174174
t.Parallel()
175175
srvFS := memfs.New()
176-
_ = gittest.NewRepo(t, srvFS,
176+
_ = gittest.NewRepo(t, srvFS).Commit(
177177
gittest.Commit(t, "README.md", "Hello, world!", "Many wow!"),
178178
gittest.Commit(t, "foo", "bar!", "Such commit!"),
179179
gittest.Commit(t, "baz", "qux", "V nice!"),
@@ -207,7 +207,7 @@ func TestShallowCloneRepo(t *testing.T) {
207207

208208
t.Parallel()
209209
srvFS := memfs.New()
210-
_ = gittest.NewRepo(t, srvFS,
210+
_ = gittest.NewRepo(t, srvFS).Commit(
211211
gittest.Commit(t, "README.md", "Hello, world!", "Many wow!"),
212212
gittest.Commit(t, "foo", "bar!", "Such commit!"),
213213
gittest.Commit(t, "baz", "qux", "V nice!"),
@@ -244,7 +244,7 @@ func TestCloneRepoSSH(t *testing.T) {
244244
tmpDir := t.TempDir()
245245
srvFS := osfs.New(tmpDir, osfs.WithChrootOS())
246246

247-
_ = gittest.NewRepo(t, srvFS, gittest.Commit(t, "README.md", "Hello, world!", "Wow!"))
247+
_ = gittest.NewRepo(t, srvFS).Commit(gittest.Commit(t, "README.md", "Hello, world!", "Wow!"))
248248
key := randKeygen(t)
249249
tr := gittest.NewServerSSH(t, srvFS, key.PublicKey())
250250
gitURL := tr.String()
@@ -275,7 +275,7 @@ func TestCloneRepoSSH(t *testing.T) {
275275
tmpDir := t.TempDir()
276276
srvFS := osfs.New(tmpDir, osfs.WithChrootOS())
277277

278-
_ = gittest.NewRepo(t, srvFS, gittest.Commit(t, "README.md", "Hello, world!", "Wow!"))
278+
_ = gittest.NewRepo(t, srvFS).Commit(gittest.Commit(t, "README.md", "Hello, world!", "Wow!"))
279279
key := randKeygen(t)
280280
tr := gittest.NewServerSSH(t, srvFS, key.PublicKey())
281281
gitURL := tr.String()
@@ -306,7 +306,7 @@ func TestCloneRepoSSH(t *testing.T) {
306306
tmpDir := t.TempDir()
307307
srvFS := osfs.New(tmpDir, osfs.WithChrootOS())
308308

309-
_ = gittest.NewRepo(t, srvFS, gittest.Commit(t, "README.md", "Hello, world!", "Wow!"))
309+
_ = gittest.NewRepo(t, srvFS).Commit(gittest.Commit(t, "README.md", "Hello, world!", "Wow!"))
310310
key := randKeygen(t)
311311
tr := gittest.NewServerSSH(t, srvFS, key.PublicKey())
312312
gitURL := tr.String()

integration/integration_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1682,7 +1682,7 @@ RUN echo $FOO > /root/foo.txt
16821682
RUN date --utc > /root/date.txt
16831683
`, testImageAlpine)
16841684

1685-
newServer := func(dockerfile string) *httptest.Server {
1685+
newServer := func(dockerfile string) *gittest.GitServer {
16861686
return gittest.CreateGitServer(t, gittest.Options{
16871687
Files: map[string]string{"Dockerfile": dockerfile},
16881688
})

testutil/gittest/gittest.go

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,14 @@ type Options struct {
3939
TLS bool
4040
}
4141

42+
type GitServer struct {
43+
*httptest.Server
44+
Repo *GitRepo
45+
}
46+
4247
// CreateGitServer creates a git repository with an in-memory filesystem
4348
// and serves it over HTTP using a httptest.Server.
44-
func CreateGitServer(t *testing.T, opts Options) *httptest.Server {
49+
func CreateGitServer(t *testing.T, opts Options) *GitServer {
4550
t.Helper()
4651
if opts.AuthMW == nil {
4752
opts.AuthMW = mwtest.BasicAuthMW(opts.Username, opts.Password)
@@ -51,11 +56,19 @@ func CreateGitServer(t *testing.T, opts Options) *httptest.Server {
5156
commits = append(commits, Commit(t, path, content, "my test commit"))
5257
}
5358
fs := memfs.New()
54-
_ = NewRepo(t, fs, commits...)
59+
repo := NewRepo(t, fs).Commit(commits...)
60+
var srv *httptest.Server
5561
if opts.TLS {
56-
return httptest.NewTLSServer(opts.AuthMW(NewServer(fs)))
62+
srv = httptest.NewTLSServer(opts.AuthMW(NewServer(fs)))
63+
// return httptest.NewTLSServer(opts.AuthMW(NewServer(fs)))
64+
} else {
65+
srv = httptest.NewServer(opts.AuthMW(NewServer(fs)))
66+
}
67+
// return httptest.NewServer(opts.AuthMW(NewServer(fs)))
68+
return &GitServer{
69+
Server: srv,
70+
Repo: repo,
5771
}
58-
return httptest.NewServer(opts.AuthMW(NewServer(fs)))
5972
}
6073

6174
// NewServer returns a http.Handler that serves a git repository.
@@ -251,8 +264,13 @@ func Commit(t *testing.T, path, content, msg string) CommitFunc {
251264
}
252265
}
253266

267+
type GitRepo struct {
268+
repo *git.Repository
269+
fs billy.Filesystem
270+
}
271+
254272
// NewRepo returns a new Git repository.
255-
func NewRepo(t *testing.T, fs billy.Filesystem, commits ...CommitFunc) *git.Repository {
273+
func NewRepo(t *testing.T, fs billy.Filesystem) *GitRepo {
256274
t.Helper()
257275
storage := filesystem.NewStorage(fs, cache.NewObjectLRU(cache.DefaultMaxSize))
258276
repo, err := git.Init(storage, fs)
@@ -263,10 +281,17 @@ func NewRepo(t *testing.T, fs billy.Filesystem, commits ...CommitFunc) *git.Repo
263281
err = storage.SetReference(h)
264282
require.NoError(t, err)
265283

284+
return &GitRepo{
285+
repo: repo,
286+
fs: fs,
287+
}
288+
}
289+
290+
func (g *GitRepo) Commit(commits ...CommitFunc) *GitRepo {
266291
for _, commit := range commits {
267-
commit(fs, repo)
292+
commit(g.fs, g.repo)
268293
}
269-
return repo
294+
return g
270295
}
271296

272297
// WriteFile writes a file to the filesystem.

0 commit comments

Comments
 (0)