Skip to content

Commit 9572e2e

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

File tree

3 files changed

+69
-113
lines changed

3 files changed

+69
-113
lines changed

docker_test.go

Lines changed: 50 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -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-
403363
func TestContainerPushBuildNameNumberFromEnv(t *testing.T) {
404364
containerManagers := initContainerTest(t)
405365
for _, containerManager := range containerManagers {

go.mod

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,11 @@ require (
1818
github.com/jfrog/archiver/v3 v3.6.1
1919
github.com/jfrog/build-info-go v1.10.10
2020
github.com/jfrog/gofrog v1.7.6
21-
github.com/jfrog/jfrog-cli-artifactory v0.2.1
22-
github.com/jfrog/jfrog-cli-core/v2 v2.58.2
21+
github.com/jfrog/jfrog-cli-artifactory v0.2.4
22+
github.com/jfrog/jfrog-cli-core/v2 v2.58.4
2323
github.com/jfrog/jfrog-cli-platform-services v1.9.0
24-
github.com/jfrog/jfrog-cli-security v1.16.2
25-
github.com/jfrog/jfrog-client-go v1.51.1
24+
github.com/jfrog/jfrog-cli-security v1.17.1
25+
github.com/jfrog/jfrog-client-go v1.52.0
2626
github.com/jszwec/csvutil v1.10.0
2727
github.com/manifoldco/promptui v0.9.0
2828
github.com/stretchr/testify v1.10.0
@@ -88,7 +88,7 @@ require (
8888
github.com/imdario/mergo v0.3.16 // indirect
8989
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect
9090
github.com/jedib0t/go-pretty/v6 v6.6.5 // indirect
91-
github.com/jfrog/froggit-go v1.16.2 // indirect
91+
github.com/jfrog/froggit-go v1.17.0 // indirect
9292
github.com/jfrog/go-mockhttp v0.3.1 // indirect
9393
github.com/jfrog/jfrog-apps-config v1.0.1 // indirect
9494
github.com/json-iterator/go v1.1.12 // indirect
@@ -189,14 +189,10 @@ require (
189189
sigs.k8s.io/yaml v1.4.0 // indirect
190190
)
191191

192-
replace github.com/jfrog/jfrog-cli-artifactory => github.com/agrasth/jfrog-cli-artifactory v0.0.0-20250414071755-dbd58851a867
192+
replace github.com/jfrog/jfrog-cli-core/v2 => github.com/jfrog/jfrog-cli-core/v2 v2.31.1-0.20250505105213-0ba559a374cb
193193

194-
replace github.com/jfrog/jfrog-cli-core/v2 => github.com/jfrog/jfrog-cli-core/v2 v2.31.1-0.20250410085750-f34f5feea93e
194+
// replace github.com/jfrog/jfrog-client-go => github.com/jfrog/jfrog-client-go v1.28.1-0.20250406105605-ee90d11546f9
195195

196-
replace github.com/jfrog/jfrog-client-go => github.com/jfrog/jfrog-client-go v1.28.1-0.20250406105605-ee90d11546f9
196+
replace github.com/jfrog/jfrog-cli-artifactory => github.com/jfrog/jfrog-cli-artifactory v0.2.5-0.20250430063946-1f4e12be9eb9
197197

198-
replace github.com/jfrog/jfrog-cli-security => github.com/jfrog/jfrog-cli-security v1.16.3-0.20250402121228-12cce9f88504
199-
200-
// replace github.com/jfrog/build-info-go => github.com/jfrog/build-info-go v1.8.9-0.20241220065541-91828d43d8b9
201-
202-
// replace github.com/jfrog/gofrog => github.com/jfrog/gofrog dev
198+
// replace github.com/jfrog/jfrog-cli-security => github.com/jfrog/jfrog-cli-security v1.16.3-0.20250402121228-12cce9f88504

go.sum

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,6 @@ 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=
2624
github.com/andybalholm/brotli v1.1.1 h1:PR2pgnyFznKEugtsUo0xLdDop5SKXd5Qf5ysW+7XdTA=
2725
github.com/andybalholm/brotli v1.1.1/go.mod h1:05ib4cKhjx3OQYUY22hTVd34Bc8upXjOLL2rKwwZBoA=
2826
github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8=
@@ -180,22 +178,24 @@ github.com/jfrog/archiver/v3 v3.6.1 h1:LOxnkw9pOn45DzCbZNFV6K0+6dCsQ0L8mR3ZcujO5
180178
github.com/jfrog/archiver/v3 v3.6.1/go.mod h1:VgR+3WZS4N+i9FaDwLZbq+jeU4B4zctXL+gL4EMzfLw=
181179
github.com/jfrog/build-info-go v1.10.10 h1:2nOFjV7SX1uisi2rQK7fb4Evm7YkSOdmssrm6Tf4ipc=
182180
github.com/jfrog/build-info-go v1.10.10/go.mod h1:JcISnovFXKx3wWf3p1fcMmlPdt6adxScXvoJN4WXqIE=
183-
github.com/jfrog/froggit-go v1.16.2 h1:F//S83iXH14qsCwYzv0zB2JtjS2pJVEsUoEmYA+37dQ=
184-
github.com/jfrog/froggit-go v1.16.2/go.mod h1:5VpdQfAcbuyFl9x/x8HGm7kVk719kEtW/8YJFvKcHPA=
181+
github.com/jfrog/froggit-go v1.17.0 h1:20Ie787WO27SwB2MOHDvsR6yN7fA5WfRnuAbmUqz1Zs=
182+
github.com/jfrog/froggit-go v1.17.0/go.mod h1:HvDkfFfJwIdsXFdqaB+utvD2cLDRmaC3kF8otYb6Chw=
185183
github.com/jfrog/go-mockhttp v0.3.1 h1:/wac8v4GMZx62viZmv4wazB5GNKs+GxawuS1u3maJH8=
186184
github.com/jfrog/go-mockhttp v0.3.1/go.mod h1:LmKHex73SUZswM8ANS8kPxLihTOvtq44HVcCoTJKuqc=
187185
github.com/jfrog/gofrog v1.7.6 h1:QmfAiRzVyaI7JYGsB7cxfAJePAZTzFz0gRWZSE27c6s=
188186
github.com/jfrog/gofrog v1.7.6/go.mod h1:ntr1txqNOZtHplmaNd7rS4f8jpA5Apx8em70oYEe7+4=
189187
github.com/jfrog/jfrog-apps-config v1.0.1 h1:mtv6k7g8A8BVhlHGlSveapqf4mJfonwvXYLipdsOFMY=
190188
github.com/jfrog/jfrog-apps-config v1.0.1/go.mod h1:8AIIr1oY9JuH5dylz2S6f8Ym2MaadPLR6noCBO4C22w=
191-
github.com/jfrog/jfrog-cli-core/v2 v2.31.1-0.20250410085750-f34f5feea93e h1:N+7gJdZmwggKqrTbrEvAFxxXQziFbJ4zHI/sXa8vR1A=
192-
github.com/jfrog/jfrog-cli-core/v2 v2.31.1-0.20250410085750-f34f5feea93e/go.mod h1:4S7yztLwWq4yA+k9j9s5gvIqr7xC/6EjJQ+0ENCHTFc=
189+
github.com/jfrog/jfrog-cli-artifactory v0.2.5-0.20250430063946-1f4e12be9eb9 h1:T9CCRIvOxXhxBZ+9OXSfxN8laCkfEp70j1JPKSXgYs8=
190+
github.com/jfrog/jfrog-cli-artifactory v0.2.5-0.20250430063946-1f4e12be9eb9/go.mod h1:rgIWMmSRY/sqV+JxCBJFJK5rZTO7es19cbKF+8HGSFo=
191+
github.com/jfrog/jfrog-cli-core/v2 v2.31.1-0.20250505105213-0ba559a374cb h1:rFO38OtQqjO2mO8cOQibQ0n+i/mMkh/QLq6Ss8fsJjg=
192+
github.com/jfrog/jfrog-cli-core/v2 v2.31.1-0.20250505105213-0ba559a374cb/go.mod h1:JbLdMCWL0xVZZ0FY7jd+iTi/gKYqRmRpeLBhAFtldfQ=
193193
github.com/jfrog/jfrog-cli-platform-services v1.9.0 h1:r/ETgJuMUOUu12w20ydsF6paqEaj0khH6bxMRsdNz1Y=
194194
github.com/jfrog/jfrog-cli-platform-services v1.9.0/go.mod h1:pMZMSwhj7yA4VKyj0Skr2lObIyGpZUxNJ40DSLKXU38=
195-
github.com/jfrog/jfrog-cli-security v1.16.3-0.20250402121228-12cce9f88504 h1:mnU8PtDaCmU1ZC8Wcy0VKj1gJEZnnyjgAc3rJLCcMjs=
196-
github.com/jfrog/jfrog-cli-security v1.16.3-0.20250402121228-12cce9f88504/go.mod h1:tJyLh4KI4qoF/AVBy0wC9s8DVxV/hoyKK4LIzpxL590=
197-
github.com/jfrog/jfrog-client-go v1.28.1-0.20250406105605-ee90d11546f9 h1:pEBTHYeyuDa+w0oJNCYFq1wD2O2NqWdDTAtDRFy7s3w=
198-
github.com/jfrog/jfrog-client-go v1.28.1-0.20250406105605-ee90d11546f9/go.mod h1:uRmT8Q1SJymIzId01v0W1o8mGqrRfrwUF53CgEMsH0U=
195+
github.com/jfrog/jfrog-cli-security v1.17.1 h1:4gXZ9Q59DOBkntMBDjlcVdZ1jaJUn1bFy4Rhr+SAeqA=
196+
github.com/jfrog/jfrog-cli-security v1.17.1/go.mod h1:655eM28gQHUdT6IC6uQf677tqrN1wEcPRzc+8vcM/vA=
197+
github.com/jfrog/jfrog-client-go v1.52.0 h1:MCmHviUqj3X7iqyOokTkyvV5yBWFwZYDPVXYikl4nf0=
198+
github.com/jfrog/jfrog-client-go v1.52.0/go.mod h1:uRmT8Q1SJymIzId01v0W1o8mGqrRfrwUF53CgEMsH0U=
199199
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
200200
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
201201
github.com/jszwec/csvutil v1.10.0 h1:upMDUxhQKqZ5ZDCs/wy+8Kib8rZR8I8lOR34yJkdqhI=

0 commit comments

Comments
 (0)