Skip to content

Commit 614f3bb

Browse files
author
Michal Minář
committed
e2e: added tests for cross-repo mounting
Signed-off-by: Michal Minář <[email protected]>
1 parent e9655cf commit 614f3bb

File tree

1 file changed

+28
-0
lines changed

1 file changed

+28
-0
lines changed

test/end-to-end/core.sh

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,11 @@ os::cmd::expect_success "docker tag -f centos/ruby-22-centos7:latest ${DOCKER_RE
132132
os::cmd::expect_success "docker push ${DOCKER_REGISTRY}/cache/ruby-22-centos7:latest"
133133
echo "[INFO] Pushed ruby-22-centos7"
134134

135+
# get image's digest
136+
rubyimagedigest=$(oc get -o jsonpath='{.status.tags[?(@.tag=="latest")].items[0].image}' is/ruby-22-centos7)
137+
# get a random, non-empty blob
138+
rubyimageblob=$(oc get isimage -o go-template='{{range .image.dockerImageLayers}}{{if gt .size 1024.}}{{.name}},{{end}}{{end}}' ruby-22-centos7@${rubyimagedigest} | cut -d , -f 1)
139+
135140
# verify remote images can be pulled directly from the local registry
136141
echo "[INFO] Docker pullthrough"
137142
os::cmd::expect_success "oc import-image --confirm --from=mysql:latest mysql:pullthrough"
@@ -204,9 +209,32 @@ echo "[INFO] Docker login successful"
204209
# log back into docker as e2e-user again
205210
os::cmd::expect_success "docker login -u e2e-user -p ${e2e_user_token} -e [email protected] ${DOCKER_REGISTRY}"
206211

212+
# verify cross-repo mount functionality
213+
echo "[INFO] Docker cross-repo mount"
214+
os::cmd::expect_success "oc new-project crossmount"
215+
os::cmd::expect_success "oc create imagestream repo"
216+
207217
echo "[INFO] Back to 'default' project with 'admin' user..."
208218
os::cmd::expect_success "oc project ${CLUSTER_ADMIN_CONTEXT}"
209219
os::cmd::expect_success_and_text 'oc whoami' 'system:admin'
220+
os::cmd::expect_success "oc tag --source docker centos/ruby-22-centos7:latest -n custom ruby-22-centos7:latest"
221+
os::cmd::expect_success 'oc policy add-role-to-user registry-viewer pusher -n custom'
222+
223+
os::cmd::expect_success_and_text "curl -I -X HEAD -u 'pusher:${pusher_token}' '${DOCKER_REGISTRY}/v2/crossmount/repo/blobs/$rubyimageblob'" "404 Not Found"
224+
os::cmd::expect_success_and_text "curl -I -X HEAD -u 'pusher:${pusher_token}' '${DOCKER_REGISTRY}/v2/cache/ruby-22-centos7/blobs/$rubyimageblob'" "200 OK"
225+
# 202 means that cross-repo mount has failed (in this case because of blob doesn't exist in the source repository), client needs to reupload the blob
226+
os::cmd::expect_success_and_text "curl -I -X POST -u 'pusher:${pusher_token}' '${DOCKER_REGISTRY}/v2/crossmount/repo/blobs/uploads/?mount=$rubyimageblob&from=cache/hello-world'" "202 Accepted"
227+
# 201 means that blob has been cross mounted from given repository
228+
os::cmd::expect_success_and_text "curl -I -X POST -u 'pusher:${pusher_token}' '${DOCKER_REGISTRY}/v2/crossmount/repo/blobs/uploads/?mount=$rubyimageblob&from=cache/ruby-22-centos7'" "201 Created"
229+
# remove pusher's permissions to read from the source repository
230+
os::cmd::expect_success "oc policy remove-role-from-user system:image-pusher pusher -n cache"
231+
# cross-repo mount failed because of access denied
232+
os::cmd::expect_success_and_text "curl -I -X POST -u 'pusher:${pusher_token}' '${DOCKER_REGISTRY}/v2/crossmount/repo/blobs/uploads/?mount=$rubyimageblob&from=cache/ruby-22-centos7'" "202 Accepted"
233+
# wait until image is imported
234+
os::cmd::try_until_text "oc get -n custom is/ruby-22-centos7 --template='{{if .status.tags}}{{if gt (len .status.tags) 0}}tagged{{end}}{{end}}'" tagged $((20*TIME_SEC))
235+
# cross repo mount from a remote repository
236+
os::cmd::expect_success_and_text "curl -I -X POST -u 'pusher:${pusher_token}' '${DOCKER_REGISTRY}/v2/crossmount/repo/blobs/uploads/?mount=$rubyimageblob&from=custom/ruby-22-centos7'" "201 Created"
237+
echo "[INFO] Docker cross-repo mount successful"
210238

211239
# The build requires a dockercfg secret in the builder service account in order
212240
# to be able to push to the registry. Make sure it exists first.

0 commit comments

Comments
 (0)