@@ -179,6 +179,39 @@ func runPushTest(containerManager container.ContainerManagerType, imageName, mod
179179 validateContainerBuild (tests .DockerBuildName , buildNumber , imagePath , module , 7 , 5 , 7 , t )
180180}
181181
182+ func loginToArtifactory (t * testing.T , container * tests.TestContainer ) {
183+ password := * tests .JfrogPassword
184+ user := * tests .JfrogUser
185+ if * tests .JfrogAccessToken != "" {
186+ user = auth .ExtractUsernameFromAccessToken (* tests .JfrogAccessToken )
187+ password = * tests .JfrogAccessToken
188+ }
189+ assert .NoError (t , container .Exec (
190+ context .Background (),
191+ "docker" ,
192+ "login" ,
193+ tests .RtContainerHostName ,
194+ "--username=" + user ,
195+ "--password=" + password ,
196+ ))
197+ }
198+
199+ func buildBuilderImage (t * testing.T , workspace , dockerfile , containerName string ) * tests.TestContainer {
200+ ctx := context .Background ()
201+ testContainer , err := tests .NewContainerRequest ().
202+ SetDockerfile (workspace , dockerfile , nil ).
203+ Privileged ().
204+ Networks (rtNetwork ).
205+ Name (containerName ).
206+ Mount (mount.Mount {Type : mount .TypeBind , Source : workspace , Target : "/workspace" , ReadOnly : false }).
207+ Cmd ("--insecure-registry" , tests .RtContainerHostName ).
208+ WaitFor (wait .ForLog ("API listen on /var/run/docker.sock" ).WithStartupTimeout (5 * time .Minute )).
209+ Remove ().
210+ Build (ctx , true )
211+ assert .NoError (t , err , "Couldn't create builder image." )
212+ return testContainer
213+ }
214+
182215// This test validate the collect build-info flow for fat-manifest images.
183216// The way we build the fat manifest and push it to Artifactory is not important.
184217// Therefore, this test runs only with docker.
@@ -194,53 +227,30 @@ func TestPushFatManifestImage(t *testing.T) {
194227 assert .NoError (t , fileutils .CreateDirIfNotExist (workspace ))
195228 testDataDir := filepath .Join (filepath .FromSlash (tests .GetTestResourcesPath ()), "docker" )
196229 files , err := os .ReadDir (testDataDir )
197-
198230 assert .NoError (t , err )
199231 for _ , file := range files {
200232 if ! file .IsDir () {
201233 _ , err := tests .ReplaceTemplateVariables (filepath .Join (testDataDir , file .Name ()), tests .Out )
202234 assert .NoError (t , err )
203235 }
204236 }
237+
205238 // Build the builder image locally.
206- ctx := context .Background ()
207- testContainer , err := tests .NewContainerRequest ().
208- SetDockerfile (workspace , "Dockerfile.Buildx.Fatmanifest" , nil ).
209- Privileged ().
210- Networks (rtNetwork ).
211- Name ("buildx_container" ).
212- Mount (mount.Mount {Type : mount .TypeBind , Source : workspace , Target : "/workspace" , ReadOnly : false }).
213- Cmd ("--insecure-registry" , tests .RtContainerHostName ).
214- // Docker daemon take times to load. In order to check if it's available we wait for a log message to indications that the Docker daemon has finished initializing.
215- WaitFor (wait .ForLog ("API listen on /var/run/docker.sock" ).WithStartupTimeout (5 * time .Minute )).
216- Remove ().
217- Build (ctx , true )
218- assert .NoError (t , err , "Couldn't run create buildx image." )
219- defer func () { assert .NoError (t , testContainer .Terminate (ctx )) }()
239+ testContainer := buildBuilderImage (t , workspace , "Dockerfile.Buildx.Fatmanifest" , "buildx_container" )
240+ defer func () { assert .NoError (t , testContainer .Terminate (context .Background ())) }()
220241
221242 // Enable the builder util in the container.
222- err = testContainer .Exec (ctx , "sh" , "script.sh" )
243+ err = testContainer .Exec (context . Background () , "sh" , "script.sh" )
223244 assert .NoError (t , err )
224245
225- // login from the builder container toward the Artifactory.
226- password := * tests .JfrogPassword
227- user := * tests .JfrogUser
228- if * tests .JfrogAccessToken != "" {
229- user = auth .ExtractUsernameFromAccessToken (* tests .JfrogAccessToken )
230- password = * tests .JfrogAccessToken
231- }
232- assert .NoError (t , testContainer .Exec (
233- ctx ,
234- "docker" ,
235- "login" ,
236- tests .RtContainerHostName ,
237- "--username=" + user ,
238- "--password=" + password ))
246+ // Login to Artifactory
247+ loginToArtifactory (t , testContainer )
248+
239249 buildxOutputFile := "buildmetadata"
240250
241- // Run the builder in the container and push the fat-manifest image to artifactory
251+ // Run the builder in the container and push the fat-manifest image to Artifactory
242252 assert .NoError (t , testContainer .Exec (
243- ctx ,
253+ context . Background () ,
244254 "docker" ,
245255 "buildx" ,
246256 "build" ,
@@ -263,17 +273,10 @@ func TestPushFatManifestImage(t *testing.T) {
263273 assert .NoError (t , artifactoryCli .Exec ("build-docker-create" , tests .DockerLocalRepo , "--image-file=" + buildxOutput , "--build-name=" + buildName , "--build-number=" + buildNumber ))
264274 assert .NoError (t , artifactoryCli .Exec ("build-publish" , buildName , buildNumber ))
265275
266- // Validate the published build-info exits
276+ // Validate the published build-info exists
267277 publishedBuildInfo , found , err := tests .GetBuildInfo (serverDetails , buildName , buildNumber )
268- if err != nil {
269- assert .NoError (t , err )
270- return
271- }
272- if ! found {
273- assert .True (t , found , "build info was expected to be found" )
274- return
275- }
276-
278+ assert .NoError (t , err )
279+ assert .True (t , found , "build info was expected to be found" )
277280 assert .True (t , len (publishedBuildInfo .BuildInfo .Modules ) > 1 )
278281
279282 // Validate build-name & build-number properties in all image layers
@@ -310,44 +313,22 @@ func TestPushMultiTaggedImage(t *testing.T) {
310313 }
311314
312315 // Build the builder image locally
313- ctx := context .Background ()
314- testContainer , err := tests .NewContainerRequest ().
315- SetDockerfile (workspace , "Dockerfile.Buildx.Fatmanifest" , nil ).
316- Privileged ().
317- Networks (rtNetwork ).
318- Name ("buildx_multi_tag_container" ).
319- Mount (mount.Mount {Type : mount .TypeBind , Source : workspace , Target : "/workspace" , ReadOnly : false }).
320- Cmd ("--insecure-registry" , tests .RtContainerHostName ).
321- WaitFor (wait .ForLog ("API listen on /var/run/docker.sock" ).WithStartupTimeout (5 * time .Minute )).
322- Remove ().
323- Build (ctx , true )
324- assert .NoError (t , err , "Couldn't create buildx container." )
325- defer func () { assert .NoError (t , testContainer .Terminate (ctx )) }()
316+ testContainer := buildBuilderImage (t , workspace , "Dockerfile.Buildx.Fatmanifest" , "buildx_multi_tag_container" )
317+ defer func () { assert .NoError (t , testContainer .Terminate (context .Background ())) }()
326318
327319 // Enable builder
328- assert .NoError (t , testContainer .Exec (ctx , "sh" , "script.sh" ))
320+ assert .NoError (t , testContainer .Exec (context . Background () , "sh" , "script.sh" ))
329321
330322 // Login to Artifactory
331- password := * tests .JfrogPassword
332- user := * tests .JfrogUser
333- if * tests .JfrogAccessToken != "" {
334- user = auth .ExtractUsernameFromAccessToken (* tests .JfrogAccessToken )
335- password = * tests .JfrogAccessToken
336- }
337- assert .NoError (t , testContainer .Exec (
338- ctx ,
339- "docker" , "login" ,
340- tests .RtContainerHostName ,
341- "--username=" + user ,
342- "--password=" + password ))
323+ loginToArtifactory (t , testContainer )
343324
344325 // Build & push image with multiple tags
345326 imageName1 := path .Join (tests .RtContainerHostName , tests .DockerLocalRepo , tests .DockerImageName + "-multi:v1" )
346327 imageName2 := path .Join (tests .RtContainerHostName , tests .DockerLocalRepo , tests .DockerImageName + "-multi:latest" )
347328 buildxOutputFile := "multi-build-metadata"
348329
349330 assert .NoError (t , testContainer .Exec (
350- ctx ,
331+ context . Background () ,
351332 "docker" , "buildx" , "build" ,
352333 "--platform" , "linux/amd64,linux/arm64" ,
353334 "-t" , imageName1 ,
@@ -379,27 +360,6 @@ func TestPushMultiTaggedImage(t *testing.T) {
379360 assert .True (t , totalResults > 1 )
380361}
381362
382- func TestContainerPushMultipleImages (t * testing.T ) {
383- containerManagers := initContainerTest (t )
384- imageNames := []string {
385- tests .DockerImageName + "-multi1" ,
386- tests .DockerImageName + "-multi2" ,
387- tests .DockerImageName + "-multi3" ,
388- }
389- modules := []string {
390- ModuleNameJFrogTest + "-multi1" ,
391- ModuleNameJFrogTest + "-multi2" ,
392- ModuleNameJFrogTest + "-multi3" ,
393- }
394- for _ , repo := range []string {tests .DockerLocalRepo , tests .DockerVirtualRepo } {
395- for _ , containerManager := range containerManagers {
396- for i := range imageNames {
397- runPushTest (containerManager , imageNames [i ], modules [i ], true , t , repo )
398- }
399- }
400- }
401- }
402-
403363func TestContainerPushBuildNameNumberFromEnv (t * testing.T ) {
404364 containerManagers := initContainerTest (t )
405365 for _ , containerManager := range containerManagers {
0 commit comments