diff --git a/tests/prepare/artifact/install-cases.sh b/tests/prepare/artifact/install-cases.sh new file mode 100755 index 0000000000..fe938e4607 --- /dev/null +++ b/tests/prepare/artifact/install-cases.sh @@ -0,0 +1,74 @@ +#!/bin/bash +. /usr/share/beakerlib/beakerlib.sh || exit 1 +. ../../images.sh || exit 1 +. ./lib/common.sh || exit 1 + +rlJournalStart + rlPhaseStartSetup "Prepare test environment" + rlRun "testdir=$(mktemp -d)" 0 "Create test directory" + + build_rpms + + rlRun "cp -a install-cases $testdir/data" 0 "Copy test data" + rlRun "cp -a rpms $testdir/data/" 0 "Copy rpms data" + rlRun "pushd $testdir/data" 0 "Enter test directory" + rlRun "run=$(mktemp -d)" 0 "Create run directory" + + setup_distro_environment + rlPhaseEnd + +xfail_plans=( + "/verified-artifacts/pre-installed" +) + + while IFS= read -r image; do + if ! is_fedora "$image" && ! is_centos "$image"; then + # Can only test rpm artifacts right now + continue + fi + + extra_env="" + if is_centos_7 "$image"; then + extra_env="-e DNF_CMD=yum" + # TODO: centos7 is hard + continue + fi + + if is_centos_stream_9 "$image" || is_centos_stream_10 "$image"; then + # TODO(#4941): + # dnf repoquery fails + # - Error: 'Package' object has no attribute 'full_nevra' + # - Or gives an output of + # 'bar': + # - nevra: '%{full_nevra}' + # repo_id: 'tmt-artifact-shared' + continue + fi + + phase_prefix="$(test_phase_prefix $image)" + + for plan in $(tmt plans ls); do + xfail="" + expected_result=0 + for check_pattern in ${xfail_plans[@]}; do + if [[ "$plan" =~ $check_pattern ]]; then + xfail="(XFAIL)" + expected_result=2 + break + fi + done + rlPhaseStartTest "$phase_prefix $plan $xfail" + rlRun "tmt run $extra_env -i $run --scratch -vvv --all \ + plan --name $plan \ + provision -h $PROVISION_HOW --image $image" \ + $expected_result "Run test case $plan $xfail" + rlPhaseEnd + done + done <<< "$IMAGES" + + + rlPhaseStartCleanup + rlRun "popd" + rlRun "rm -rf $run $testdir" 0 "Remove temporary files directories" + rlPhaseEnd +rlJournalEnd diff --git a/tests/prepare/artifact/install-cases/.fmf/version b/tests/prepare/artifact/install-cases/.fmf/version new file mode 100644 index 0000000000..d00491fd7e --- /dev/null +++ b/tests/prepare/artifact/install-cases/.fmf/version @@ -0,0 +1 @@ +1 diff --git a/tests/prepare/artifact/install-cases/available-artifacts/basic.fmf b/tests/prepare/artifact/install-cases/available-artifacts/basic.fmf new file mode 100644 index 0000000000..a1c1104782 --- /dev/null +++ b/tests/prepare/artifact/install-cases/available-artifacts/basic.fmf @@ -0,0 +1,23 @@ +summary: Basic case (non-verified) +description: | + System repo: foo-1.4 (baseline) + Pre-installed: None + Artifacts: foo-2.2 or foo-1.2 + + Normal installation case with an non-verified artifact available + +/upgrade: + summary: " (upgrading)" + context+: + available_artifact: foo-2.2 + environment+: + EXPECTED_PACKAGE: foo-2.2 + +/downgrade: + summary: " (downgrading)" + context+: + available_artifact: foo-1.2 + environment+: + # TODO: This downgraded because of the forced artifact priority + # change this when the repo priority is opt-in + EXPECTED_PACKAGE: foo-1.2 diff --git a/tests/prepare/artifact/install-cases/available-artifacts/pre-installed.fmf b/tests/prepare/artifact/install-cases/available-artifacts/pre-installed.fmf new file mode 100644 index 0000000000..5816396460 --- /dev/null +++ b/tests/prepare/artifact/install-cases/available-artifacts/pre-installed.fmf @@ -0,0 +1,24 @@ +summary: Pre-installed package present (non-verified) +description: | + System repo: foo-1.4 (baseline) + Pre-installed: foo-1.4 + Artifacts: foo-2.2 or foo-1.2 + + Pre-installed package should be respected in this case + +environment+: + PRE_INSTALLED_PACKAGE: rpms/foo-1.4/foo-1.4*.rpm + +/upgrade: + summary: " (upgrading)" + context+: + available_artifact: foo-2.2 + environment+: + EXPECTED_PACKAGE: foo-1.4 + +/downgrade: + summary: " (downgrading)" + context+: + available_artifact: foo-1.2 + environment+: + EXPECTED_PACKAGE: foo-1.4 diff --git a/tests/prepare/artifact/install-cases/baseline/main.fmf b/tests/prepare/artifact/install-cases/baseline/main.fmf new file mode 100644 index 0000000000..c56666310f --- /dev/null +++ b/tests/prepare/artifact/install-cases/baseline/main.fmf @@ -0,0 +1,10 @@ +summary: Baseline case +description: | + System repo: foo-1.4 (baseline) + Pre-installed: None + Artifacts: None + + Normal installation case with no artifacts or anything special + +environment+: + EXPECTED_PACKAGE: foo-1.4 diff --git a/tests/prepare/artifact/install-cases/main.fmf b/tests/prepare/artifact/install-cases/main.fmf new file mode 100644 index 0000000000..89ab62c299 --- /dev/null +++ b/tests/prepare/artifact/install-cases/main.fmf @@ -0,0 +1,56 @@ +discover: + - how: fmf + test: + - /test +prepare: + - name: Setup system + order: 20 + how: shell + script: | + # Prepare the system repo + mkdir system_repo + for pkg in $SYSTEM_PACKAGE; do + cp rpms/$pkg/*.rpm system_repo/ + done + + # Running dnf/createrepo commands manually to bypass prepare/install handling + $DNF_CMD install -y createrepo + createrepo system_repo + cat > /etc/yum.repos.d/system-test-repo.repo <