Skip to content

Commit 8ca9f75

Browse files
e2e/image: add private registry auth regression test
Add private registry test infrastructure and a pull/push auth regression e2e test. Signed-off-by: aryansharma9917 <sharmaaryan9837@gmail.com>
1 parent 89958b1 commit 8ca9f75

File tree

4 files changed

+89
-1
lines changed

4 files changed

+89
-1
lines changed

e2e/compose-env.yaml

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,19 @@ services:
33
registry:
44
image: 'registry:3'
55

6+
private-registry:
7+
image: 'registry:3'
8+
environment:
9+
- REGISTRY_HTTP_ADDR=0.0.0.0:5001
10+
- REGISTRY_AUTH=htpasswd
11+
- REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm
12+
- REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd
13+
volumes:
14+
- ./e2e/testdata/registry/auth:/auth:ro
15+
616
engine:
717
image: 'docker:${ENGINE_VERSION:-29}-dind'
818
privileged: true
9-
command: ['--insecure-registry=registry:5000', '--experimental']
19+
command: ['--insecure-registry=registry:5000', '--insecure-registry=private-registry:5001', '--experimental']
1020
environment:
1121
- DOCKER_TLS_CERTDIR=

e2e/image/private_test.go

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
package image
2+
3+
import (
4+
"strings"
5+
"testing"
6+
7+
"github.com/docker/cli/e2e/internal/fixtures"
8+
"gotest.tools/v3/assert"
9+
"gotest.tools/v3/icmd"
10+
)
11+
12+
const privateRegistryPrefix = "private-registry:5001"
13+
14+
// Regression test for https://github.com/docker/cli/issues/5963
15+
func TestPullPushPrivateRepository(t *testing.T) {
16+
t.Parallel()
17+
18+
dir := fixtures.SetupConfigFile(t)
19+
t.Cleanup(dir.Remove)
20+
emptyConfigDir := t.TempDir()
21+
22+
sourceImage := fixtures.AlpineImage
23+
privateImage := privateRegistryPrefix + "/private/alpine:test-private-pull-push"
24+
25+
icmd.RunCommand("docker", "pull", sourceImage).Assert(t, icmd.Success)
26+
t.Cleanup(func() {
27+
icmd.RunCommand("docker", "image", "rm", "-f", privateImage).Assert(t, icmd.Success)
28+
})
29+
30+
icmd.RunCommand("docker", "tag", sourceImage, privateImage).Assert(t, icmd.Success)
31+
32+
pushNoAuth := icmd.RunCmd(
33+
icmd.Command("docker", "push", privateImage),
34+
fixtures.WithConfig(emptyConfigDir),
35+
)
36+
pushNoAuth.Assert(t, icmd.Expected{ExitCode: 1})
37+
assertAuthDenied(t, pushNoAuth)
38+
39+
pushWithAuth := icmd.RunCmd(
40+
icmd.Command("docker", "push", privateImage),
41+
fixtures.WithConfig(dir.Path()),
42+
)
43+
pushWithAuth.Assert(t, icmd.Success)
44+
assert.Check(t, strings.Contains(pushWithAuth.Combined(), "The push refers to repository ["+privateImage+"]"), pushWithAuth.Combined())
45+
46+
icmd.RunCommand("docker", "image", "rm", "-f", privateImage).Assert(t, icmd.Success)
47+
48+
pullNoAuth := icmd.RunCmd(
49+
icmd.Command("docker", "pull", privateImage),
50+
fixtures.WithConfig(emptyConfigDir),
51+
)
52+
pullNoAuth.Assert(t, icmd.Expected{ExitCode: 1})
53+
assertAuthDenied(t, pullNoAuth)
54+
55+
pullWithAuth := icmd.RunCmd(
56+
icmd.Command("docker", "pull", privateImage),
57+
fixtures.WithConfig(dir.Path()),
58+
)
59+
pullWithAuth.Assert(t, icmd.Success)
60+
assert.Check(t, strings.Contains(pullWithAuth.Combined(), privateImage), pullWithAuth.Combined())
61+
}
62+
63+
func assertAuthDenied(t *testing.T, result *icmd.Result) {
64+
t.Helper()
65+
output := result.Combined()
66+
67+
assert.Check(t,
68+
strings.Contains(output, "requested access to the resource is denied") ||
69+
strings.Contains(output, "no basic auth credentials") ||
70+
strings.Contains(output, "unauthorized") ||
71+
strings.Contains(output, "authentication required"),
72+
output,
73+
)
74+
}

e2e/internal/fixtures/fixtures.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ func SetupConfigFile(t *testing.T) fs.Dir {
2323
"auths": {
2424
"registry:5000": {
2525
"auth": "ZWlhaXM6cGFzc3dvcmQK"
26+
},
27+
"private-registry:5001": {
28+
"auth": "ZTJlOnBhc3N3b3Jk"
2629
}
2730
}}`), fs.WithDir("trust", fs.WithDir("private")))
2831
return *dir
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
e2e:$2y$05$UozlY7.SA2NMcojF.qocv.W9Q4rsr75uLMW.mVEsAPx90BVeMgveC

0 commit comments

Comments
 (0)