diff --git a/.fmf/version b/.fmf/version new file mode 100644 index 00000000..d00491fd --- /dev/null +++ b/.fmf/version @@ -0,0 +1 @@ +1 diff --git a/.github/workflows/tmt-tests.yml b/.github/workflows/tmt-tests.yml new file mode 100644 index 00000000..d3a4b620 --- /dev/null +++ b/.github/workflows/tmt-tests.yml @@ -0,0 +1,50 @@ +name: TMT Tests + +on: + push: + branches: + - main + pull_request: + branches: + - main + workflow_dispatch: + inputs: + plan_filter: + description: | + Test plan filter name, ie: tag:smoke. + If provided, only tests matching this filter will be run, otherwise all tests will be run. + required: false + default: '' + use_built_from_src: + description: 'Built bootupd from source instead of install distro package' + required: false + default: 'true' + +jobs: + tmt-tests: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Install dependencies + run: | + set -x -e -o pipefail + sudo apt-get update + sudo apt-get install -y podman libblkid-dev rsync + pip install --user tmt + + - name: Run TMT tests + run: | + set -x -e -o pipefail + if [ "$ACT" = "true" ]; then + echo "Running locally using ACT" + TMT_PROVISION_OPTS="--how local --feeling-safe" + else + TMT_PROVISION_OPTS="--how container" + fi + if [ -n "${{ github.event.inputs.plan_filter }}" ]; then + PLAN_FILTER_PARAM="plan --filter '${{ github.event.inputs.plan_filter }}'" + fi + eval "tmt run --all --debug -vvvv provision $TMT_PROVISION_OPTS $PLAN_FILTER_PARAM" diff --git a/tests/core/core.fmf b/tests/core/core.fmf new file mode 100644 index 00000000..7198a3d1 --- /dev/null +++ b/tests/core/core.fmf @@ -0,0 +1,32 @@ +summary: check bootupd package installation and basic functionality +tag: + - smoke +test: | + set -x -e -o pipefail + + # Check if bootupctl is available + if ! command -v bootupctl &> /dev/null; then + echo "bootupctl command not found" + exit 1 + fi + + # Get architecture + arch="$(uname --machine)" + + # Run bootupctl status and check output + output=$(bootupctl status | tr -d '\r') + + if [[ "${arch}" == "x86_64" ]]; then + expected_components='Available components: BIOS EFI' + else + # Assume aarch64 for now + expected_components='Available components: EFI' + fi + + if [ "${expected_components}" != "${output}" ]; then + echo "Expected: ${expected_components}" + echo "Got: ${output}" + exit 1 + fi + + echo "bootupd package and bootupctl status test passed" diff --git a/tests/tmt/plans/main.fmf b/tests/tmt/plans/main.fmf new file mode 100644 index 00000000..4582ae2b --- /dev/null +++ b/tests/tmt/plans/main.fmf @@ -0,0 +1,32 @@ +# This prepare is used to control when bootupd is installed using +# the distribution package or when it is built from source in the test environment +prepare: + - name: Set BOOTUPD_BIN_DIR when built from source + when: use_built_from_src is defined and use_built_from_src == true + how: shell + script: | + set -x -e -o pipefail + echo "Preparing the test environment" + BOOTUPD_BIN_NAME="bootupd" + PARENT_DIR=$(dirname "${TMT_TREE}") + BOOTUPD_BIN_FULL_PATH=$(find "${PARENT_DIR}" -type f -name "${BOOTUPD_BIN_NAME}") + if [ -z "${BOOTUPD_BIN_FULL_PATH}" ]; then + echo "bootupd file not found." + exit 1 + elif [ "$(echo "${BOOTUPD_BIN_FULL_PATH}" | wc -l)" -gt 1 ]; then + echo "error: found multiple 'bootupd' binaries:" >&2 + echo "${BOOTUPD_BIN_FULL_PATH}" >&2 + exit 1 + fi + BOOTUPD_BIN_DIR=$(dirname "${BOOTUPD_BIN_FULL_PATH}") + echo "BOOTUPD_BIN_DIR=${BOOTUPD_BIN_DIR}" > /tmp/bootupd_bin_dir + - name: Install bootupd package + when: use_built_from_src is not defined or use_built_from_src == false + how: install + package: bootupd + - name: Set BOOTUPD_BIN_DIR when installed package + when: use_built_from_src is not defined or use_built_from_src == false + how: shell + script: | + set -x -e -o pipefail + echo "BOOTUPD_BIN_DIR=/usr/libexec" > /tmp/bootupd_bin_dir diff --git a/tests/tmt/plans/smoke.fmf b/tests/tmt/plans/smoke.fmf new file mode 100644 index 00000000..d86f03fd --- /dev/null +++ b/tests/tmt/plans/smoke.fmf @@ -0,0 +1,8 @@ +summary: Basic smoke test +tag: + - smoke +discover: + how: fmf + filter: "tag: smoke" +execute: + how: tmt