Files
zot/test/blackbox/helpers_zot.bash
T
Ramkumar Chinchani ba3436c57e ci: add a upgrade bats test (#3621)
* ci: add a upgrade bats test

Fixes https://github.com/project-zot/zot/issues/3601

Signed-off-by: Ramkumar Chinchani <rchincha.dev@gmail.com>

* ci: first check existing images

Signed-off-by: Ramkumar Chinchani <rchincha.dev@gmail.com>

* ci: refactor into common test code

Signed-off-by: Ramkumar Chinchani <rchincha.dev@gmail.com>

* refactor: Refactor upgrade tests to improve readability and maintainability

- Added section headers for release tests, upgrade process, and new tests in upgrade.bats and upgrade_minimal.bats.
- Replaced inline port retrieval with a function call to get_zot_port for consistency.
- Consolidated repeated test logic into dedicated functions (e.g., test_new_existing_pull_image, test_new_push_image).
- Removed unnecessary variable assignments and streamlined test cases for clarity.

Signed-off-by: Ramkumar Chinchani <rchincha.dev@gmail.com>

---------

Signed-off-by: Ramkumar Chinchani <rchincha.dev@gmail.com>
2026-01-24 13:42:45 -08:00

133 lines
4.7 KiB
Bash

ROOT_DIR=$(git rev-parse --show-toplevel)
OS=$(go env GOOS)
ARCH=$(go env GOARCH)
ZOT_PATH=${ROOT_DIR}/bin/zot-${OS}-${ARCH}
ZLI_PATH=${ROOT_DIR}/bin/zli-${OS}-${ARCH}
ZOT_MINIMAL_PATH=${ROOT_DIR}/bin/zot-${OS}-${ARCH}-minimal
ZB_PATH=${ROOT_DIR}/bin/zb-${OS}-${ARCH}
TEST_DATA_DIR=${BATS_FILE_TMPDIR}/test/data
AUTH_USER=poweruser
AUTH_PASS=sup*rSecr9T
# additional creds for sha256/sha512 based password hashes
AUTH_USER2=poweruser2
AUTH_PASS2=sup*rSecr2T
AUTH_USER3=poweruser3
AUTH_PASS3=sup*rSecr3T
AUTH_USER4=poweruser4
AUTH_PASS4=sup*rSecr4T
AUTH_USER5=poweruser5
AUTH_PASS5=sup*rSecr5T
mkdir -p ${TEST_DATA_DIR}
function zot_serve() {
local zot_path=${1}
local config_file=${2}
${zot_path} serve ${config_file} &
# zot.pid file keeps a list of zot server PIDs (in case multiple zot servers are started)
echo -n "$! " >> ${BATS_FILE_TMPDIR}/zot.pid
}
function zot_rel_serve() {
local config_file=${1}
local zot_path=${BATS_FILE_TMPDIR}/zot-rel-${OS}-${ARCH}
if [ ! -f "${zot_path}" ]; then
if ! curl -f -L -o "${zot_path}" https://github.com/project-zot/zot/releases/latest/download/zot-${OS}-${ARCH}; then
echo "ERROR: Failed to download zot binary from GitHub." >&2
return 1
fi
# Download checksum file and verify integrity
checksum_url="https://github.com/project-zot/zot/releases/latest/download/checksums.sha256.txt"
checksum_file="${BATS_FILE_TMPDIR}/zot-sha256sums.txt"
curl -L -o "${checksum_file}" "${checksum_url}"
expected_sum=$(grep "zot-${OS}-${ARCH}$" "${checksum_file}" | awk '{print $1}')
if [ -z "${expected_sum}" ]; then
echo "ERROR: Could not find checksum for zot-${OS}-${ARCH} in checksums.sha256.txt"
exit 1
fi
actual_sum=$(sha256sum "${zot_path}" | awk '{print $1}')
if [ "${expected_sum}" != "${actual_sum}" ]; then
echo "ERROR: Checksum verification failed for zot-${OS}-${ARCH}"
exit 1
fi
chmod +x "${zot_path}"
fi
${zot_path} serve ${config_file} &
# zot.pid file keeps a list of zot server PIDs (in case multiple zot servers are started)
echo -n "$! " >> ${BATS_FILE_TMPDIR}/zot.pid
}
function zot_rel_min_serve() {
local config_file=${1}
local zot_path=${BATS_FILE_TMPDIR}/zot-rel-${OS}-${ARCH}-minimal
if [ ! -f "${zot_path}" ]; then
if ! curl -f -L -o "${zot_path}" https://github.com/project-zot/zot/releases/latest/download/zot-${OS}-${ARCH}-minimal; then
echo "ERROR: Failed to download zot binary from GitHub." >&2
return 1
fi
# Download checksum file and verify integrity
checksum_url="https://github.com/project-zot/zot/releases/latest/download/checksums.sha256.txt"
checksum_file="${BATS_FILE_TMPDIR}/zot-sha256sums.txt"
curl -L -o "${checksum_file}" "${checksum_url}"
expected_sum=$(grep "zot-${OS}-${ARCH}-minimal$" "${checksum_file}" | awk '{print $1}')
if [ -z "${expected_sum}" ]; then
echo "ERROR: Could not find checksum for zot-${OS}-${ARCH}-minimal in checksums.sha256.txt"
exit 1
fi
actual_sum=$(sha256sum "${zot_path}" | awk '{print $1}')
if [ "${expected_sum}" != "${actual_sum}" ]; then
echo "ERROR: Checksum verification failed for zot-${OS}-${ARCH}-minimal"
exit 1
fi
chmod +x "${zot_path}"
fi
${zot_path} serve ${config_file} &
# zot.pid file keeps a list of zot server PIDs (in case multiple zot servers are started)
echo -n "$! " >> ${BATS_FILE_TMPDIR}/zot.pid
}
# stops all zot instances started by the test
function zot_stop_all() {
if [ -f "${BATS_FILE_TMPDIR}/zot.pid" ]; then
kill $(cat ${BATS_FILE_TMPDIR}/zot.pid) 2>/dev/null || true
rm -f ${BATS_FILE_TMPDIR}/zot.pid
fi
}
function wait_zot_reachable() {
local zot_port=${1}
local zot_url=http://127.0.0.1:${zot_port}/v2/_catalog
curl --connect-timeout 3 \
--max-time 5 \
--retry 60 \
--retry-delay 1 \
--retry-max-time 180 \
--retry-connrefused \
${zot_url}
}
function zli_add_config() {
local registry_name=${1}
local registry_url=${2}
# Clean up old configuration for the same registry
if ${ZLI_PATH} config --list | grep -q ${registry_name}; then
${ZLI_PATH} config remove ${registry_name}
fi
# Add the new registry
${ZLI_PATH} config add ${registry_name} ${registry_url}
}
function zb_run() {
local zot_address=${1}
${ZB_PATH} -c 10 -n 30 -o stdout ${zot_address} --skip-cleanup
}
function log_output() {
local zot_log_file=${1:-${BATS_FILE_TMPDIR}/zot/zot-log.json}
cat ${zot_log_file} | jq ' .["message"] '
}