Skip to content

Commit 57936eb

Browse files
committed
Add test case for multiple image tags in build-docker-create
1 parent 7db3453 commit 57936eb

File tree

1 file changed

+92
-0
lines changed

1 file changed

+92
-0
lines changed

docker_test.go

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -287,6 +287,98 @@ func TestPushFatManifestImage(t *testing.T) {
287287
assert.True(t, totalResults > 1)
288288
}
289289

290+
func TestPushMultiTaggedImage(t *testing.T) {
291+
if !*tests.TestDocker {
292+
t.Skip("Skipping test. To run it, add the '-test.docker=true' option.")
293+
}
294+
295+
buildName := "push-multi-tagged" + tests.DockerBuildName
296+
buildNumber := "1"
297+
298+
// Setup workspace
299+
workspace, err := filepath.Abs(tests.Out)
300+
assert.NoError(t, err)
301+
assert.NoError(t, fileutils.CreateDirIfNotExist(workspace))
302+
testDataDir := filepath.Join(filepath.FromSlash(tests.GetTestResourcesPath()), "docker")
303+
files, err := os.ReadDir(testDataDir)
304+
assert.NoError(t, err)
305+
for _, file := range files {
306+
if !file.IsDir() {
307+
_, err := tests.ReplaceTemplateVariables(filepath.Join(testDataDir, file.Name()), tests.Out)
308+
assert.NoError(t, err)
309+
}
310+
}
311+
312+
// 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)) }()
326+
327+
// Enable builder
328+
assert.NoError(t, testContainer.Exec(ctx, "sh", "script.sh"))
329+
330+
// 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))
343+
344+
// Build & push image with multiple tags
345+
imageName1 := path.Join(tests.RtContainerHostName, tests.DockerLocalRepo, tests.DockerImageName+"-multi:v1")
346+
imageName2 := path.Join(tests.RtContainerHostName, tests.DockerLocalRepo, tests.DockerImageName+"-multi:latest")
347+
buildxOutputFile := "multi-build-metadata"
348+
349+
assert.NoError(t, testContainer.Exec(
350+
ctx,
351+
"docker", "buildx", "build",
352+
"--platform", "linux/amd64,linux/arm64",
353+
"-t", imageName1,
354+
"-t", imageName2,
355+
"-f", "Dockerfile.Fatmanifest",
356+
"--metadata-file", "/workspace/"+buildxOutputFile,
357+
"--push", ".",
358+
))
359+
360+
// Run build-docker-create & publish
361+
buildxOutput := filepath.Join(workspace, buildxOutputFile)
362+
assert.NoError(t, artifactoryCli.Exec("build-docker-create", tests.DockerLocalRepo, "--image-file="+buildxOutput, "--build-name="+buildName, "--build-number="+buildNumber))
363+
assert.NoError(t, artifactoryCli.Exec("build-publish", buildName, buildNumber))
364+
365+
// Validate build-info is published
366+
publishedBuildInfo, found, err := tests.GetBuildInfo(serverDetails, buildName, buildNumber)
367+
assert.NoError(t, err)
368+
assert.True(t, found, "build info was expected to be found")
369+
assert.True(t, len(publishedBuildInfo.BuildInfo.Modules) >= 1)
370+
371+
// Validate build-name & build-number properties in all layers
372+
searchSpec := spec.NewBuilder().Pattern(tests.DockerLocalRepo + "/*").Build(buildName).Recursive(true).BuildSpec()
373+
searchCmd := generic.NewSearchCommand()
374+
searchCmd.SetServerDetails(serverDetails).SetSpec(searchSpec)
375+
reader, err := searchCmd.Search()
376+
assert.NoError(t, err)
377+
totalResults, err := reader.Length()
378+
assert.NoError(t, err)
379+
assert.True(t, totalResults > 1)
380+
}
381+
290382
func TestContainerPushMultipleImages(t *testing.T) {
291383
containerManagers := initContainerTest(t)
292384
imageNames := []string{

0 commit comments

Comments
 (0)