@@ -9,14 +9,11 @@ import (
9
9
"os"
10
10
"regexp"
11
11
"testing"
12
- "time"
13
12
14
13
"github.com/coder/envbuilder"
15
- "github.com/coder/envbuilder/gittest"
14
+ "github.com/coder/envbuilder/testutil/ gittest"
16
15
"github.com/go-git/go-billy/v5"
17
16
"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"
20
17
githttp "github.com/go-git/go-git/v5/plumbing/transport/http"
21
18
"github.com/stretchr/testify/require"
22
19
)
@@ -77,13 +74,16 @@ func TestCloneRepo(t *testing.T) {
77
74
78
75
// We do not overwrite a repo if one is already present.
79
76
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 )))
81
81
clientFS := memfs .New ()
82
82
// A repo already exists!
83
83
_ = gittest .NewRepo (t , clientFS )
84
84
cloned , err := envbuilder .CloneRepo (context .Background (), envbuilder.CloneRepoOptions {
85
85
Path : "/" ,
86
- RepoURL : srvURL ,
86
+ RepoURL : srv . URL ,
87
87
Storage : clientFS ,
88
88
})
89
89
require .NoError (t , err )
@@ -93,12 +93,15 @@ func TestCloneRepo(t *testing.T) {
93
93
// Basic Auth
94
94
t .Run ("BasicAuth" , func (t * testing.T ) {
95
95
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 )))
97
100
clientFS := memfs .New ()
98
101
99
102
cloned , err := envbuilder .CloneRepo (context .Background (), envbuilder.CloneRepoOptions {
100
103
Path : "/workspace" ,
101
- RepoURL : srvURL ,
104
+ RepoURL : srv . URL ,
102
105
Storage : clientFS ,
103
106
RepoAuth : & githttp.BasicAuth {
104
107
Username : tc .username ,
@@ -117,14 +120,18 @@ func TestCloneRepo(t *testing.T) {
117
120
require .Equal (t , "Hello, world!" , readme )
118
121
gitConfig := mustRead (t , clientFS , "/workspace/.git/config" )
119
122
// 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 )
121
124
})
122
125
123
126
// In-URL-style auth e.g. http://user:password@host:port
124
127
t .Run ("InURL" , func (t * testing.T ) {
125
128
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 )
128
135
require .NoError (t , err )
129
136
authURL .User = url .UserPassword (tc .username , tc .password )
130
137
clientFS := memfs .New ()
@@ -160,28 +167,3 @@ func mustRead(t *testing.T, fs billy.Filesystem, path string) string {
160
167
require .NoError (t , err )
161
168
return string (content )
162
169
}
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