From 58d18db04d6fa3104292cbc5bfc956137216f69f Mon Sep 17 00:00:00 2001 From: Aryan Sharma Date: Fri, 18 Jul 2025 09:47:22 +0000 Subject: [PATCH 1/2] Add e2e test for authorized pull/push to private repo Signed-off-by: Aryan Sharma --- e2e/auth_test.go | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 e2e/auth_test.go diff --git a/e2e/auth_test.go b/e2e/auth_test.go new file mode 100644 index 000000000000..66d14920cc98 --- /dev/null +++ b/e2e/auth_test.go @@ -0,0 +1,33 @@ +package e2e + +import ( + "os" + "os/exec" + "testing" +) + +func runCmd(t *testing.T, name string, args ...string) string { + cmd := exec.Command(name, args...) + output, err := cmd.CombinedOutput() + if err != nil { + t.Fatalf("Command failed: %s %v\nOutput: %s\nError: %v", name, args, output, err) + } + return string(output) +} + +func TestAuthorizedPullPush(t *testing.T) { + username := os.Getenv("DOCKER_USERNAME") + password := os.Getenv("DOCKER_PASSWORD") + privateRepo := os.Getenv("PRIVATE_REPO") + + if username == "" || password == "" || privateRepo == "" { + t.Fatal("DOCKER_USERNAME, DOCKER_PASSWORD, and PRIVATE_REPO must be set") + } + + runCmd(t, "docker", "login", "--username", username, "--password", password) + runCmd(t, "docker", "pull", "alpine") + runCmd(t, "docker", "tag", "alpine", privateRepo) + runCmd(t, "docker", "push", privateRepo) + runCmd(t, "docker", "rmi", privateRepo) + runCmd(t, "docker", "pull", privateRepo) +} From afb83bd4bbb6094bb537ef114e4496b2a1d6a706 Mon Sep 17 00:00:00 2001 From: Aryan Sharma Date: Fri, 18 Jul 2025 14:22:54 +0000 Subject: [PATCH 2/2] e2e: add authorized pull/push test using local registry with auth Signed-off-by: Aryan Sharma --- e2e/auth_test.go | 46 +++++++++++++++++++++++++--------------------- 1 file changed, 25 insertions(+), 21 deletions(-) diff --git a/e2e/auth_test.go b/e2e/auth_test.go index 66d14920cc98..c6034b2bc8f6 100644 --- a/e2e/auth_test.go +++ b/e2e/auth_test.go @@ -1,33 +1,37 @@ package e2e import ( - "os" - "os/exec" "testing" + + "github.com/docker/cli/e2e/internal/registry" + "github.com/docker/cli/internal/test/command" ) -func runCmd(t *testing.T, name string, args ...string) string { - cmd := exec.Command(name, args...) - output, err := cmd.CombinedOutput() - if err != nil { - t.Fatalf("Command failed: %s %v\nOutput: %s\nError: %v", name, args, output, err) - } - return string(output) +func runDockerCommand(t *testing.T, args ...string) { + cmd := command.NewDockerCommand(t, args...) + cmd.Assert() } func TestAuthorizedPullPush(t *testing.T) { - username := os.Getenv("DOCKER_USERNAME") - password := os.Getenv("DOCKER_PASSWORD") - privateRepo := os.Getenv("PRIVATE_REPO") - - if username == "" || password == "" || privateRepo == "" { - t.Fatal("DOCKER_USERNAME, DOCKER_PASSWORD, and PRIVATE_REPO must be set") + const ( + username = "testuser" + password = "testpassword" + ) + reg, err := registry.NewV2( + registry.WithAuth(username, password), + ) + if err != nil { + t.Fatalf("Failed to start registry: %v", err) } + defer reg.Stop() + + repo := reg.RepoName("private/alpine") - runCmd(t, "docker", "login", "--username", username, "--password", password) - runCmd(t, "docker", "pull", "alpine") - runCmd(t, "docker", "tag", "alpine", privateRepo) - runCmd(t, "docker", "push", privateRepo) - runCmd(t, "docker", "rmi", privateRepo) - runCmd(t, "docker", "pull", privateRepo) + // docker login + runDockerCommand(t, "login", reg.Host(), "-u", username, "-p", password) + runDockerCommand(t, "pull", "alpine") + runDockerCommand(t, "tag", "alpine", repo) + runDockerCommand(t, "push", repo) + runDockerCommand(t, "rmi", repo) + runDockerCommand(t, "pull", repo) }