@@ -2,11 +2,18 @@ package task_test
2
2
3
3
import (
4
4
"encoding/json"
5
+ "fmt"
5
6
"io/ioutil"
7
+ "net/http/httptest"
8
+ "net/url"
6
9
"os"
7
10
"path/filepath"
8
11
"testing"
9
12
13
+ "github.com/google/go-containerregistry/pkg/name"
14
+ "github.com/google/go-containerregistry/pkg/registry"
15
+ "github.com/google/go-containerregistry/pkg/v1/random"
16
+ "github.com/google/go-containerregistry/pkg/v1/remote"
10
17
"github.com/google/go-containerregistry/pkg/v1/tarball"
11
18
"github.com/stretchr/testify/require"
12
19
"github.com/stretchr/testify/suite"
@@ -24,7 +31,7 @@ type TaskSuite struct {
24
31
25
32
func (s * TaskSuite ) SetupSuite () {
26
33
var err error
27
- s .buildkitd , err = task .SpawnBuildkitd (s . req , nil )
34
+ s .buildkitd , err = task .SpawnBuildkitd (task. Request {} , nil )
28
35
s .NoError (err )
29
36
}
30
37
@@ -164,6 +171,61 @@ func (s *TaskSuite) TestUnpackRootfs() {
164
171
s .Equal (meta .Env , []string {"PATH=/darkness" , "BA=nana" })
165
172
}
166
173
174
+ func (s * TaskSuite ) TestRegistryMirrors () {
175
+ mirror := httptest .NewServer (registry .New ())
176
+ defer mirror .Close ()
177
+
178
+ image , err := random .Image (1024 , 2 )
179
+ s .NoError (err )
180
+
181
+ mirrorURL , err := url .Parse (mirror .URL )
182
+ s .NoError (err )
183
+
184
+ mirrorRef , err := name .NewTag (fmt .Sprintf ("%s/library/mirrored-image:some-tag" , mirrorURL .Host ))
185
+ s .NoError (err )
186
+
187
+ err = remote .Write (mirrorRef , image )
188
+ s .NoError (err )
189
+
190
+ s .req .Config .ContextDir = "testdata/mirror"
191
+ s .req .Config .RegistryMirrors = []string {mirrorURL .Host }
192
+
193
+ rootDir , err := ioutil .TempDir ("" , "mirrored-buildkitd" )
194
+ s .NoError (err )
195
+
196
+ defer os .RemoveAll (rootDir )
197
+
198
+ mirroredBuildkitd , err := task .SpawnBuildkitd (s .req , & task.BuildkitdOpts {
199
+ RootDir : rootDir ,
200
+ })
201
+ s .NoError (err )
202
+
203
+ defer mirroredBuildkitd .Cleanup ()
204
+
205
+ _ , err = task .Build (mirroredBuildkitd , s .outputsDir , s .req )
206
+ s .NoError (err )
207
+
208
+ builtImage , err := tarball .ImageFromPath (s .imagePath ("image.tar" ), nil )
209
+ s .NoError (err )
210
+
211
+ layers , err := image .Layers ()
212
+ s .NoError (err )
213
+
214
+ builtLayers , err := builtImage .Layers ()
215
+ s .NoError (err )
216
+ s .Len (layers , len (layers ))
217
+
218
+ for i := 0 ; i < len (layers ); i ++ {
219
+ digest , err := layers [i ].Digest ()
220
+ s .NoError (err )
221
+
222
+ builtDigest , err := builtLayers [i ].Digest ()
223
+ s .NoError (err )
224
+
225
+ s .Equal (digest , builtDigest )
226
+ }
227
+ }
228
+
167
229
func (s * TaskSuite ) build () (task.Response , error ) {
168
230
return task .Build (s .buildkitd , s .outputsDir , s .req )
169
231
}
0 commit comments