🔎 Dynamically choose image test list

List the image tests that match the distro, distro version, and
architecture before running image tests. That ensures we run all of the
tests that are appropriate for the distro/version/arch combination.

Tests can be added or removed without changing the `run_image_tests.sh`
script.

Fixes #840.

Signed-off-by: Major Hayden <major@redhat.com>
This commit is contained in:
Major Hayden 2020-07-09 14:08:13 -05:00 committed by Ondřej Budai
parent d8d1db50cd
commit 7403c5b368

View file

@ -1,8 +1,9 @@
#!/bin/bash #!/bin/bash
set -euo pipefail set -euo pipefail
# Get OS details. # Get OS and architecture details.
source /etc/os-release source /etc/os-release
ARCH=$(uname -m)
WORKING_DIRECTORY=/usr/libexec/osbuild-composer WORKING_DIRECTORY=/usr/libexec/osbuild-composer
IMAGE_TEST_CASE_RUNNER=/usr/libexec/tests/osbuild-composer/osbuild-image-tests IMAGE_TEST_CASE_RUNNER=/usr/libexec/tests/osbuild-composer/osbuild-image-tests
@ -11,22 +12,17 @@ IMAGE_TEST_CASES_PATH=/usr/share/tests/osbuild-composer/cases
PASSED_TESTS=() PASSED_TESTS=()
FAILED_TESTS=() FAILED_TESTS=()
TEST_CASES=(
"openstack-boot.json"
"qcow2-boot.json"
"tar-boot.json"
"vhd-boot.json"
"vmdk-boot.json"
)
# Print out a nice test divider so we know when tests stop and start. # Print out a nice test divider so we know when tests stop and start.
test_divider () { test_divider () {
printf "%0.s-" {1..78} && echo printf "%0.s-" {1..78} && echo
} }
# Get the full test case name based on distro and architecture. # Get a list of test cases.
get_full_test_case () { get_test_cases () {
echo "${IMAGE_TEST_CASES_PATH}/${ID}_${VERSION_ID%.*}-$(uname -m)-${1}" TEST_CASE_SELECTOR="${ID}_${VERSION_ID%.*}-${ARCH}*.json"
pushd $IMAGE_TEST_CASES_PATH > /dev/null
ls $TEST_CASE_SELECTOR
popd > /dev/null
} }
# Run a test case and store the result as passed or failed. # Run a test case and store the result as passed or failed.
@ -40,7 +36,12 @@ run_test_case () {
echo "🏃🏻 Running test: ${TEST_NAME}" echo "🏃🏻 Running test: ${TEST_NAME}"
test_divider test_divider
if sudo $TEST_RUNNER -test.v $TEST_CASE_FILENAME 2>&1 | tee ${WORKSPACE}/${TEST_NAME}.log; then # Set up the testing command.
TEST_CMD="$TEST_RUNNER -test.v ${IMAGE_TEST_CASES_PATH}/${TEST_CASE_FILENAME}"
# Run the test and add the test name to the list of passed or failed
# tests depending on the result.
if sudo $TEST_CMD 2>&1 | tee ${WORKSPACE}/${TEST_NAME}.log; then
PASSED_TESTS+=("$TEST_NAME") PASSED_TESTS+=("$TEST_NAME")
else else
FAILED_TESTS+=("$TEST_NAME") FAILED_TESTS+=("$TEST_NAME")
@ -51,15 +52,16 @@ run_test_case () {
} }
# Ensure osbuild-composer-tests is installed. # Ensure osbuild-composer-tests is installed.
sudo dnf -y install osbuild-composer-tests if ! rpm -qi osbuild-composer-tests > /dev/null 2>&1; then
sudo dnf -y install osbuild-composer-tests
fi
# Change to the working directory. # Change to the working directory.
cd $WORKING_DIRECTORY cd $WORKING_DIRECTORY
# Run each test case. # Run each test case.
for TEST_CASE in "${TEST_CASES[@]}"; do for TEST_CASE in $(get_test_cases); do
TEST_CASE_FILENAME=$(get_full_test_case $TEST_CASE) run_test_case $IMAGE_TEST_CASE_RUNNER $TEST_CASE
run_test_case $IMAGE_TEST_CASE_RUNNER $TEST_CASE_FILENAME
done done
# Print a report of the test results. # Print a report of the test results.