Regression test suite has grown considerably and is taking too long to run with a single wrapper. Splitting them into individual standalone tests instead and making them run in parallel.
176 lines
5.3 KiB
Bash
176 lines
5.3 KiB
Bash
#!/bin/bash
|
|
|
|
# Verify that an older worker (v33) is still compatible with this composer
|
|
# version.
|
|
#
|
|
# Any tweaks to the worker api need to be backwards compatible.
|
|
|
|
set -exuo pipefail
|
|
|
|
source /usr/libexec/osbuild-composer-test/set-env-variables.sh
|
|
|
|
# Only run this on x86 and rhel8 GA; since the container is based on the ubi
|
|
# container, and we use the weldr api
|
|
if [ "$ARCH" != "x86_64" ] || [ "$ID" != rhel ] || ! sudo subscription-manager status; then
|
|
echo "Test only supported on GA RHEL."
|
|
exit 0
|
|
fi
|
|
|
|
# Provision the software under test.
|
|
/usr/libexec/osbuild-composer-test/provision.sh
|
|
|
|
function get_build_info() {
|
|
key="$1"
|
|
fname="$2"
|
|
if rpm -q --quiet weldr-client; then
|
|
key=".body${key}"
|
|
fi
|
|
jq -r "${key}" "${fname}"
|
|
}
|
|
|
|
WORKER_VERSION=8f21f0b873420a38a261d78a7df130f28b8e2867
|
|
WORKER_RPM=osbuild-composer-worker-33-1.20210830git8f21f0b.el8.x86_64
|
|
|
|
# grab the repos from the test rpms
|
|
REPOS=$(mktemp -d)
|
|
sudo dnf -y install osbuild-composer-tests
|
|
sudo cp -a /usr/share/tests/osbuild-composer/repositories "$REPOS/repositories"
|
|
|
|
# Remove the "new" worker
|
|
sudo dnf remove -y osbuild-composer osbuild-composer-worker osbuild-composer-tests
|
|
|
|
function setup_repo {
|
|
local project=$1
|
|
local commit=$2
|
|
local priority=${3:-10}
|
|
echo "Setting up dnf repository for ${project} ${commit}"
|
|
sudo tee "/etc/yum.repos.d/${project}.repo" << EOF
|
|
[${project}]
|
|
name=${project} ${commit}
|
|
baseurl=http://osbuild-composer-repos.s3-website.us-east-2.amazonaws.com/${project}/rhel-8-cdn/x86_64/${commit}
|
|
enabled=1
|
|
gpgcheck=0
|
|
priority=${priority}
|
|
EOF
|
|
}
|
|
|
|
# Composer v33
|
|
setup_repo osbuild-composer "$WORKER_VERSION" 20
|
|
sudo dnf install -y osbuild-composer-worker podman composer-cli
|
|
|
|
# verify the right worker is installed just to be sure
|
|
rpm -q "$WORKER_RPM"
|
|
|
|
# run container
|
|
WELDR_DIR="$(mktemp -d)"
|
|
WELDR_SOCK="$WELDR_DIR/api.socket"
|
|
DNF_DIR="$(mktemp -d)"
|
|
DNF_SOCK="$DNF_DIR/api.sock"
|
|
|
|
sudo podman pull --creds "${V2_QUAY_USERNAME}":"${V2_QUAY_PASSWORD}" \
|
|
"quay.io/osbuild/osbuild-composer-ubi-pr:${CI_COMMIT_SHA}"
|
|
|
|
# The host entitlement doesn't get picked up by composer
|
|
# see https://github.com/osbuild/osbuild-composer/issues/1845
|
|
sudo podman run \
|
|
--name=composer \
|
|
-d \
|
|
-v /etc/osbuild-composer:/etc/osbuild-composer:Z \
|
|
-v /etc/rhsm:/etc/rhsm:Z \
|
|
-v /etc/pki/entitlement:/etc/pki/entitlement:Z \
|
|
-v "$REPOS/repositories":/usr/share/osbuild-composer/repositories:Z \
|
|
-v "$WELDR_DIR:/run/weldr/":Z \
|
|
-v "$DNF_DIR:/run/osbuild-dnf-json/":Z \
|
|
-e OVERWRITE_CACHE_DIR="/var/cache/dnf-json" \
|
|
-p 8700:8700 \
|
|
"quay.io/osbuild/osbuild-composer-ubi-pr:${CI_COMMIT_SHA}" \
|
|
--weldr-api --dnf-json --remote-worker-api \
|
|
--no-local-worker-api --no-composer-api
|
|
|
|
# try starting a worker
|
|
set +e
|
|
sudo systemctl start osbuild-remote-worker@localhost:8700.service
|
|
while ! sudo systemctl --quiet is-active osbuild-remote-worker@localhost:8700.service; do
|
|
sudo systemctl status osbuild-remote-worker@localhost:8700.service
|
|
sleep 1
|
|
sudo systemctl start osbuild-remote-worker@localhost:8700.service
|
|
done
|
|
set -e
|
|
|
|
function log_on_exit() {
|
|
sudo podman logs composer
|
|
}
|
|
|
|
trap log_on_exit EXIT
|
|
|
|
BLUEPRINT_FILE=$(mktemp)
|
|
COMPOSE_START=$(mktemp)
|
|
COMPOSE_INFO=$(mktemp)
|
|
tee "$BLUEPRINT_FILE" > /dev/null << EOF2
|
|
name = "simple"
|
|
version = "0.0.1"
|
|
|
|
[customizations]
|
|
hostname = "simple"
|
|
EOF2
|
|
|
|
sudo composer-cli -s "$WELDR_SOCK" blueprints push "$BLUEPRINT_FILE"
|
|
sudo composer-cli -s "$WELDR_SOCK" blueprints depsolve simple
|
|
sudo composer-cli -s "$WELDR_SOCK" --json compose start simple qcow2 | tee "${COMPOSE_START}"
|
|
COMPOSE_ID=$(get_build_info ".build_id" "$COMPOSE_START")
|
|
|
|
# Wait for the compose to finish.
|
|
echo "⏱ Waiting for compose to finish: ${COMPOSE_ID}"
|
|
while true; do
|
|
sudo composer-cli -s "$WELDR_SOCK" --json compose info "${COMPOSE_ID}" | tee "$COMPOSE_INFO" > /dev/null
|
|
COMPOSE_STATUS=$(get_build_info ".queue_status" "$COMPOSE_INFO")
|
|
|
|
# Is the compose finished?
|
|
if [[ $COMPOSE_STATUS != RUNNING ]] && [[ $COMPOSE_STATUS != WAITING ]]; then
|
|
break
|
|
fi
|
|
|
|
# Wait 30 seconds and try again.
|
|
sleep 30
|
|
done
|
|
|
|
sudo composer-cli -s "$WELDR_SOCK" compose delete "${COMPOSE_ID}" >/dev/null
|
|
|
|
sudo journalctl -u osbuild-remote-worker@localhost:8700.service
|
|
# Verify that the remote worker finished a job
|
|
sudo journalctl -u osbuild-remote-worker@localhost:8700.service |
|
|
grep -qE "Job [0-9a-fA-F-]+ finished"
|
|
|
|
# Did the compose finish with success?
|
|
if [[ $COMPOSE_STATUS != FINISHED ]]; then
|
|
echo "Something went wrong with the compose. 😢"
|
|
exit 1
|
|
fi
|
|
|
|
tee "dnf-json-request.json" <<EOF
|
|
{
|
|
"command": "dump",
|
|
"arguments": {
|
|
"repos": [
|
|
{
|
|
"name": "fedora",
|
|
"id": "blep-2",
|
|
"metalink": "https://mirrors.fedoraproject.org/metalink?repo=fedora-35&arch=x86_64",
|
|
"check_gpg": true
|
|
}
|
|
],
|
|
"arch": "x86_64",
|
|
"module_platform_id": "platform:f35"
|
|
}
|
|
}
|
|
EOF
|
|
|
|
DNF_JSON_OUT=$(sudo curl -d"@dnf-json-request.json" --unix-socket "$DNF_SOCK" http:/dump | jq '.packages | length')
|
|
# expect more than 1 package
|
|
if [ ! "$DNF_JSON_OUT" -gt "1" ]; then
|
|
echo "dnf-json endpoint didn't return list of packages"
|
|
exit 1
|
|
fi
|
|
|
|
echo "Test passed!"
|
|
exit 0
|