From 126670d5dd087cbd2b4609ec62ceb32e7ed08ad7 Mon Sep 17 00:00:00 2001 From: Urvashi Mohnani Date: Wed, 13 Dec 2023 10:26:45 -0500 Subject: [PATCH] Fix push endpoint stream The push binding endpoint wasn't actually writing the output data to the stream when quiet=false and there was no push error. Do not hard code quiet=true anymore, take into account the user input. Signed-off-by: Urvashi Mohnani --- pkg/api/handlers/libpod/images_push.go | 8 ++++---- test/apiv2/12-imagesMore.at | 15 +++++++++++++++ 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/pkg/api/handlers/libpod/images_push.go b/pkg/api/handlers/libpod/images_push.go index 2e587e650c..43d28f6620 100644 --- a/pkg/api/handlers/libpod/images_push.go +++ b/pkg/api/handlers/libpod/images_push.go @@ -81,7 +81,7 @@ func PushImage(w http.ResponseWriter, r *http.Request) { ForceCompressionFormat: query.ForceCompressionFormat, Format: query.Format, Password: password, - Quiet: true, + Quiet: query.Quiet, RemoveSignatures: query.RemoveSignatures, Username: username, } @@ -150,9 +150,9 @@ func PushImage(w http.ResponseWriter, r *http.Request) { } if pushError != nil { stream.Error = pushError.Error() - if err := enc.Encode(stream); err != nil { - logrus.Warnf("Failed to encode json: %v", err) - } + } + if err := enc.Encode(stream); err != nil { + logrus.Warnf("Failed to encode json: %v", err) } flush() return diff --git a/test/apiv2/12-imagesMore.at b/test/apiv2/12-imagesMore.at index 3534349e7c..584d7c3958 100644 --- a/test/apiv2/12-imagesMore.at +++ b/test/apiv2/12-imagesMore.at @@ -43,8 +43,23 @@ s1=$(jq -r .status <<<"${lines[1]}") like "$s1" "mytag: digest: sha256:[0-9a-f]\{64\} size: [0-9]\+" \ "Push to local registry: second status line" +# Push to local registry using the libpod endpoint with quiet=false... +# First create a new tag for the image to push +t POST "libpod/images/$IMAGE/tag?repo=localhost:$REGISTRY_PORT/myrepo&tag=quiet-false" 201 + +t POST "libpod/images/localhost:$REGISTRY_PORT/myrepo:quiet-false/push?tlsVerify=false&quiet=false" 200 + +# ...and check output. We can't use our built-in checks because this output +# is a sequence of JSON objects, i.e., individual ones, not in a JSON array. +# The lines themselves are valid JSON, but taken together they are not. +readarray lines <<<"$output" +s0=$(jq -r .manifestdigest <<<"${lines[-1]}") +like "$s0" "sha256:[0-9a-f]\{64\}" \ + "Push to local registry: last line in push report" + # Untag the image t POST "libpod/images/$iid/untag?repo=localhost:$REGISTRY_PORT/myrepo&tag=mytag" 201 +t POST "libpod/images/$iid/untag?repo=localhost:$REGISTRY_PORT/myrepo&tag=quiet-false" 201 # Try to push non-existing image t POST "images/localhost:$REGISTRY_PORT/idonotexist/push?tlsVerify=false" 404