lorax/tests/test_lorax.sh
Brian C. Lane 94b2b58d99 tests: Add a lorax boot.iso test
This builds a boot.iso in the vm, copies it out, and boots it.
The tests that run inside the boot.iso
(/tests/lorax/test_boot_bootiso.sh) cannot use beakerlib so it needs to
be a simple shell script returning 1 on failure along with a descriptive
message.
2019-11-05 10:38:31 -08:00

87 lines
2.2 KiB
Bash
Executable File

#!/bin/bash
# Note: execute this file from the project root directory
#
# Test building a boot.iso using lorax
set -eu
BEAKERLIB_DIR=$(mktemp -d /tmp/lorax-test.XXXXXX)
CLI="${CLI:-}"
export BEAKERLIB_DIR
source /usr/share/beakerlib/beakerlib.sh
RELEASE=$(awk -F: '{ print $5 }' /etc/system-release-cpe)
export RELEASE
function setup_tests {
local share_dir=$1
# Make the boot.iso boot more quickly (isolinux.cfg)
for cfg in "$share_dir"/templates.d/99-generic/config_files/*/isolinux.cfg; do
sed -i.orig 's/^timeout.*/timeout 20/' "$cfg"
sed -i 's/quiet$/inst.sshd=1 console=ttyS0,115200n8/' "$cfg"
done
# Make the boot.iso boot more quickly (grub.conf)
for cfg in "$share_dir"/templates.d/99-generic/config_files/*/grub.conf; do
sed -i.orig 's/^timeout.*/timeout 2/' "$cfg"
sed -i 's/quiet$/inst.sshd=1 console=ttyS0,115200n8/' "$cfg"
done
# Make the boot.iso boot more quickly (grub2-efi.cfg)
for cfg in "$share_dir"/templates.d/99-generic/config_files/*/grub2-efi.cfg; do
sed -i.orig 's/^set timeout.*/set timeout=2/' "$cfg"
sed -i 's/\(.*linux .* ro$\)/\1 inst.sshd=1 console=ttyS0,115200n8/' "$cfg"
done
}
function teardown_tests {
local share_dir=$1
# Restore all the configuration files
for cfg in "$share_dir"/templates.d/99-generic/config_files/*/*.orig; do
mv "$cfg" "${cfg%%.orig}"
done
}
SHARE_DIR=$(mktemp -d '/tmp/lorax-share.XXXXX')
export SHARE_DIR
if [ -z "$CLI" ]; then
cp -R /usr/share/lorax/* "$SHARE_DIR"
else
top_srcdir=$(pwd)
export top_srcdir
source ./tests/testenv.sh
cp -R ./share/* "$SHARE_DIR"
fi
chmod a+rx -R "$SHARE_DIR"
setup_tests "$SHARE_DIR"
export BEAKERLIB_JOURNAL=0
if [ -z "$*" ]; then
# Run all the lorax tests
for t in ./tests/lorax/test_*sh; do
$t
done
else
# execute other tests which need more adjustments in the calling environment
# or can't be executed inside Travis CI
for TEST in "$@"; do
$TEST
done
fi
teardown_tests "$SHARE_DIR"
source "$BEAKERLIB_DIR/TestResults"
if [ $TESTRESULT_RESULT_ECODE != 0 ]; then
echo "Test failed. Leaving log in $BEAKERLIB_DIR"
exit $TESTRESULT_RESULT_ECODE
fi
rm -rf "$BEAKERLIB_DIR"