From b3b45a1401ce2eb9083e3b305ee5b9dc7cc155f0 Mon Sep 17 00:00:00 2001 From: Thilo Fromm <thilofromm@microsoft.com> Date: Fri, 13 Oct 2023 17:59:49 +0200 Subject: [PATCH] run_local_tests.sh: script for running tests on local builds This change adds run_local_tests.sh, a script to run tests on local builds. It's a comfort wrapper around ci-automation scripts and uses the latest local build. Signed-off-by: Thilo Fromm <thilofromm@microsoft.com> --- run_local_tests.sh | 108 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100755 run_local_tests.sh diff --git a/run_local_tests.sh b/run_local_tests.sh new file mode 100755 index 00000000000..3f8c464a431 --- /dev/null +++ b/run_local_tests.sh @@ -0,0 +1,108 @@ +#!/bin/bash +# +# Copyright (c) 2023 The Flatcar Maintainers. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# QoL wrapper around ci-automation test.sh for running local tests of qemu_uefi image. +# The devcontainer tests will be skipped since these require a valid commit ref in +# the upstream scripts repo. +# +# Requirements: +# - Docker (for running the Mantle container). +# +# Prerequisites: +# - Flatcar OS image and qemu uefi code to be tested in +# __build__/images/images/amd64-usr/latest/ +# +# This script is intended to be run after building a qemu_uefi image with the SDK container: +# ./build_packages +# ./build_image +# ./image_to_vm.sh --from=../build/images/amd64-usr/latest/ --format=qemu_uefi +# Then, EXIT the SDK container (or run this on a different terminal): +# ./run_local_tests.sh +# +# Optional prerequisites: +# - Custom Mantle container image / version in sdk_container/.repo/manifests/mantle-container. +# This comes in handy if you've built a local mantle/kola which you want to test. +# Just edit the file and put in the whole containerr image name and version. +# +# Output: +# results reports: +# - results-qemu_uefi-detailed.md +# - results-qemu_uefi-detailed.tap +# - results-qemu_uefi.md +# - results-qemu_uefi.tap +# - results-qemu_update-detailed.md +# - results-qemu_update-detailed.tap +# - results-qemu_update.md +# - results-qemu_update.tap +# +# +# - Detailed test run output will reside below __TESTS__/qemu-uefi + +function set_vars() { + local arch="${1}" + local parallel="${2}" + + # Read by the mantle container. + # The local directory ("pwd") will be mounted to /work/ in the container. + cat > sdk_container/.env <<EOF +export export QEMU_IMAGE_NAME="/work/__build__/images/images/${arch}-usr/latest/flatcar_production_image.bin" +export QEMU_UEFI_BIOS="/work/__build__/images/images/${arch}-usr/latest/flatcar_production_qemu_uefi_efi_code.fd" +export QEMU_UPDATE_PAYLOAD="/work/__build__/images/images/${arch}-usr/latest/flatcar_test_update.gz" +export PARALLEL_TESTS=${parallel} +EOF + + export MAX_RETRIES=5 + export SKIP_COPY_TO_BINCACHE=1 +} +#-- + +function run_local_tests() { + local arch="${1:-amd64}" + if [[ $# -gt 0 ]] ; then shift; fi + local parallel="${1:-2}" + if [[ $# -gt 0 ]] ; then shift; fi + + rm -f results.* + + local mantle_container="$(cat "sdk_container/.repo/manifests/mantle-container")" + local custom_test_list=false + + # Generate list of all tests for qemu w/o the devcontainer tests. + # This will generate globs for top-level test modules, e.g. "cl.update.oem" will become cl.*. + # Globs are necessary because tests ignore OS min/max version specification if a test was specified with its full name. + # Using globs will prevent tests to be run which aren't meant for the OS version we're testing. + if [[ $# -eq 0 ]] ; then + tests="$(docker run "${mantle_container}" \ + kola list --platform qemu \ + | awk '!/^(devcontainer|Test)/ {if ($1 != "") print gensub(/^([^.]+).*/,"\\1",1,$1) ".*"}' | uniq)" + set -- ${tests} + else + custom_test_list=true + fi + + source ci-automation/test.sh || exit 1 + set_vars "${parallel}" + + echo "=================================" + echo "Using Mantle docker image '${mantle_container}'" + + rm -f results.sqlite + test_run amd64 qemu_uefi "${@}" + if [[ "${custom_test_list}" = "false" ]] ; then + test_run amd64 qemu_update + fi + +} +# -- + + +if [[ "$(basename "${0}")" = "run_local_tests.sh" ]] ; then + set -euo pipefail + run_local_tests "${@}" +fi