From 6878c95ea88ac98beaf69467ba7eae7d12f75461 Mon Sep 17 00:00:00 2001
From: Alex Jia <chuanchang.jia@gmail.com>
Date: Tue, 30 Jul 2019 19:04:14 +0800
Subject: [PATCH] systemtest: support deleting image from registry

Signed-off-by: Alex Jia <chuanchang.jia@gmail.com>
---
 systemtest/060-delete.bats | 37 +++++++++++++++++++++++++++++++++++++
 systemtest/helpers.bash    |  6 ++++++
 2 files changed, 43 insertions(+)
 create mode 100644 systemtest/060-delete.bats

diff --git a/systemtest/060-delete.bats b/systemtest/060-delete.bats
new file mode 100644
index 00000000..0f14822f
--- /dev/null
+++ b/systemtest/060-delete.bats
@@ -0,0 +1,37 @@
+#!/usr/bin/env bats
+#
+# Copy tests
+#
+
+load helpers
+
+function setup() {
+    standard_setup
+
+    start_registry --enable-delete=true reg
+}
+
+# delete image from registry
+@test "delete: remove image from registry" {
+    local remote_image=docker://busybox:latest
+    local localimg=docker://localhost:5000/busybox:unsigned
+    local output=
+
+    run_skopeo copy --dest-tls-verify=false $remote_image $localimg
+    output=$(run_skopeo inspect --tls-verify=false --raw $localimg)
+    echo $output | grep "vnd.docker.distribution.manifest.v2+json"
+
+    run_skopeo delete --tls-verify=false $localimg
+
+    # make sure image is removed from registry
+    expected_rc=1
+    run_skopeo $expected_rc inspect --tls-verify=false $localimg
+}
+
+teardown() {
+    podman rm -f reg
+
+    standard_teardown
+}
+
+# vim: filetype=sh
diff --git a/systemtest/helpers.bash b/systemtest/helpers.bash
index d30e0676..7df6d367 100644
--- a/systemtest/helpers.bash
+++ b/systemtest/helpers.bash
@@ -231,6 +231,7 @@ function expect_line_count() {
 #       --testuser=XXX      Require authentication; this is the username
 #       --testpassword=XXX  ...and the password (these two go together)
 #       --with-cert         Create a cert for running with TLS (not working)
+#       --enable-delete     Set allowing registry deletions (default: false)
 #
 #   NAME is the container name to assign.
 #
@@ -239,6 +240,7 @@ start_registry() {
     local testuser=
     local testpassword=
     local create_cert=
+    local enable_delete=false
 
     # option processing: recognize options for running the registry
     # in different modes.
@@ -250,6 +252,7 @@ start_registry() {
             --testuser=*)       testuser="$value";      shift;;
             --testpassword=*)   testpassword="$value";  shift;;
             --with-cert)        create_cert=1;          shift;;
+            --enable-delete=*)  enable_delete="$value"; shift;;
             -*)                 die "Invalid option '$opt'" ;;
             *)                  break;;
         esac
@@ -264,6 +267,9 @@ start_registry() {
     mkdir -p $AUTHDIR
 
     local -a reg_args=(-v $AUTHDIR:/auth:Z -p $port:5000)
+    if [[ "$enable_delete" == "true" ]]; then
+        reg_args+=( -e REGISTRY_STORAGE_DELETE_ENABLED=true)
+    fi
 
     # cgroup option necessary under podman-in-podman (CI tests),
     # and doesn't seem to do any harm otherwise.