Skip to content

Commit 4432a05

Browse files
committed
Add test case for multiple image tags in build-docker-create
1 parent 6bd77d7 commit 4432a05

File tree

3 files changed

+79
-3
lines changed

3 files changed

+79
-3
lines changed

docker_test.go

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@ import (
55
"fmt"
66
"github.com/docker/docker/api/types/mount"
77
"os"
8+
"os/exec"
89
"path"
910
"path/filepath"
11+
"strings"
1012
"testing"
1113
"time"
1214

@@ -287,6 +289,80 @@ func TestPushFatManifestImage(t *testing.T) {
287289
assert.True(t, totalResults > 1)
288290
}
289291

292+
func TestBuildDockerCreateWithMultipleTags(t *testing.T) {
293+
initContainerTest(t) // Initialize container test environments
294+
295+
var (
296+
repoName = tests.DockerLocalRepo
297+
buildName = "multiple-tags-build"
298+
buildNumber = "1"
299+
imageNameBase = tests.DockerImageName + "-multiple-tags"
300+
tag1 = "tag1"
301+
tag2 = "tag2"
302+
metadataFile = "build-metadata"
303+
)
304+
305+
// Create test image with multiple tags
306+
imageName1 := imageNameBase + ":" + tag1
307+
imageName2 := imageNameBase + ":" + tag2
308+
imageNames := []string{imageName1, imageName2}
309+
for _, imageName := range imageNames {
310+
imageTag, err := inttestutils.BuildTestImage(imageName, "", repoName, container.DockerClient)
311+
assert.NoError(t, err)
312+
defer commonTests.DeleteTestImage(t, imageTag, container.DockerClient)
313+
}
314+
315+
// Push images and generate build-metadata file
316+
err := PushTestImageWithMetadata(imageNames, repoName, metadataFile)
317+
assert.NoError(t, err, "Failed to push test image with metadata")
318+
319+
// Ensure metadata file exists
320+
_, err = os.Stat(metadataFile)
321+
assert.NoError(t, err, "Metadata file not found")
322+
323+
// Run 'build-docker-create' & publish the results to Artifactory
324+
err = artifactoryCli.Exec("build-docker-create", repoName, "--image-file="+metadataFile, "--build-name="+buildName, "--build-number="+buildNumber)
325+
assert.NoError(t, err, "Failed to execute build-docker-create")
326+
err = artifactoryCli.Exec("build-publish", buildName, buildNumber)
327+
assert.NoError(t, err, "Failed to publish build info")
328+
329+
// Validate the published build-info contains multiple tags
330+
publishedBuildInfo, found, err := tests.GetBuildInfo(serverDetails, buildName, buildNumber)
331+
assert.NoError(t, err, "Error fetching published build-info")
332+
assert.True(t, found, "Build info was expected to be found")
333+
assert.GreaterOrEqual(t, len(publishedBuildInfo.BuildInfo.Modules), 1, "Expected at least one module in build-info")
334+
335+
// Verify that both tags are recorded in the build-info
336+
moduleFound := false
337+
for _, module := range publishedBuildInfo.BuildInfo.Modules {
338+
if len(module.Artifacts) > 0 && strings.Contains(module.Artifacts[0].Name, imageNameBase) {
339+
tags := []string{tag1, tag2}
340+
for _, tag := range tags {
341+
imageTag := path.Join(repoName, imageNameBase+":"+tag) + "/"
342+
validateContainerBuild(buildName, buildNumber, imageTag, imageNameBase+":"+tag, 7, 5, 7, t)
343+
}
344+
moduleFound = true
345+
break
346+
}
347+
}
348+
assert.True(t, moduleFound, "Expected module not found in build-info")
349+
}
350+
351+
func PushTestImageWithMetadata(imageNames []string, repo, metadataFile string) error {
352+
args := []string{"buildx", "build", "--platform", "linux/amd64,linux/arm64", "--push", "--metadata-file", metadataFile}
353+
for _, imageName := range imageNames {
354+
args = append(args, "-t", imageName)
355+
}
356+
args = append(args, ".")
357+
358+
cmd := exec.Command("docker", args...)
359+
stdoutStderr, err := cmd.CombinedOutput()
360+
if err != nil {
361+
return fmt.Errorf("failed to run buildx command: %s; output: %s", err, stdoutStderr)
362+
}
363+
return nil
364+
}
365+
290366
func TestContainerPushBuildNameNumberFromEnv(t *testing.T) {
291367
containerManagers := initContainerTest(t)
292368
for _, containerManager := range containerManagers {

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ require (
189189
sigs.k8s.io/yaml v1.4.0 // indirect
190190
)
191191

192-
replace github.com/jfrog/jfrog-cli-artifactory => github.com/jfrog/jfrog-cli-artifactory v0.2.2-0.20250407070644-685ca4be29b6
192+
replace github.com/jfrog/jfrog-cli-artifactory => github.com/agrasth/jfrog-cli-artifactory v0.0.0-20250414071755-dbd58851a867
193193

194194
replace github.com/jfrog/jfrog-cli-core/v2 => github.com/jfrog/jfrog-cli-core/v2 v2.31.1-0.20250407070140-5f4344d30fe4
195195

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d h1:licZJFw2RwpH
2121
github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d/go.mod h1:asat636LX7Bqt5lYEZ27JNDcqxfjdBQuJ/MM4CN/Lzo=
2222
github.com/agnivade/levenshtein v1.2.1 h1:EHBY3UOn1gwdy/VbFwgo4cxecRznFk7fKWN1KOX7eoM=
2323
github.com/agnivade/levenshtein v1.2.1/go.mod h1:QVVI16kDrtSuwcpd0p1+xMC6Z/VfhtCyDIjcwga4/DU=
24+
github.com/agrasth/jfrog-cli-artifactory v0.0.0-20250414071755-dbd58851a867 h1:p9DZFBcdAG0tn08UJJimRAGQuwr4bhvSVEXWj9+5W8w=
25+
github.com/agrasth/jfrog-cli-artifactory v0.0.0-20250414071755-dbd58851a867/go.mod h1:nBbyq+mzQ5OxPnAubHy46xofI+Oqe+hAERN8vHbTiWE=
2426
github.com/andybalholm/brotli v1.1.1 h1:PR2pgnyFznKEugtsUo0xLdDop5SKXd5Qf5ysW+7XdTA=
2527
github.com/andybalholm/brotli v1.1.1/go.mod h1:05ib4cKhjx3OQYUY22hTVd34Bc8upXjOLL2rKwwZBoA=
2628
github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8=
@@ -186,8 +188,6 @@ github.com/jfrog/gofrog v1.7.6 h1:QmfAiRzVyaI7JYGsB7cxfAJePAZTzFz0gRWZSE27c6s=
186188
github.com/jfrog/gofrog v1.7.6/go.mod h1:ntr1txqNOZtHplmaNd7rS4f8jpA5Apx8em70oYEe7+4=
187189
github.com/jfrog/jfrog-apps-config v1.0.1 h1:mtv6k7g8A8BVhlHGlSveapqf4mJfonwvXYLipdsOFMY=
188190
github.com/jfrog/jfrog-apps-config v1.0.1/go.mod h1:8AIIr1oY9JuH5dylz2S6f8Ym2MaadPLR6noCBO4C22w=
189-
github.com/jfrog/jfrog-cli-artifactory v0.2.2-0.20250407070644-685ca4be29b6 h1:4RUqu8zI9RO0WnLoRrTTTdpqrydC0woCxFKyKCgxUkY=
190-
github.com/jfrog/jfrog-cli-artifactory v0.2.2-0.20250407070644-685ca4be29b6/go.mod h1:Mj2Nrz4xGH7ahFu4SOwCRnhwE3DA0BXY+6yArEAEMZ0=
191191
github.com/jfrog/jfrog-cli-core/v2 v2.31.1-0.20250407070140-5f4344d30fe4 h1:niRyAkZVcGm7jOUJ2+/5ZtTzkuNBjWmsvB/EJCQaDKs=
192192
github.com/jfrog/jfrog-cli-core/v2 v2.31.1-0.20250407070140-5f4344d30fe4/go.mod h1:4S7yztLwWq4yA+k9j9s5gvIqr7xC/6EjJQ+0ENCHTFc=
193193
github.com/jfrog/jfrog-cli-platform-services v1.8.0 h1:7p0StDwVjPfz9W1UslHvRGQTZenM4BujmbP/d2vBcr4=

0 commit comments

Comments
 (0)