diff --git a/test/.gitignore b/test/.gitignore new file mode 100644 index 000000000..4ebc8aea5 --- /dev/null +++ b/test/.gitignore @@ -0,0 +1 @@ +coverage diff --git a/test/test_coverage.sh b/test/test_coverage.sh new file mode 100755 index 000000000..714c1880e --- /dev/null +++ b/test/test_coverage.sh @@ -0,0 +1,105 @@ +#!/bin/bash + +# Test the code coverage using bashcov (https://github.com/infertux/bashcov) +# +# Install bashcov with: gem install bashcov + +try_this() +{ + local EXPECTED_RETURN_VALUE + local TEST_NAME + + EXPECTED_RETURN_VALUE=${1} + TEST_NAME="${2}" + shift 2 + + COUNTER=$((COUNTER + 1)) + if [ ${COUNTER} -eq ${SINGLE_TEST} -o ${SINGLE_TEST} -eq 0 ]; then + echo "Starting test #${COUNTER} ${TEST_NAME}" + bashcov --root ${LIVE_BUILD} -- "$@" + RETVAL=${?} + if [ ${RETVAL} -ne ${EXPECTED_RETURN_VALUE} ]; then + echo "Error: the test does not have the expected return value (expected: ${EXPECTED_RETURN_VALUE} actual: ${RETVAL})" + exit 1 + fi + # Cleanup after the test + rm -fr auto config local .build + else + echo "Skipping test #${COUNTER} ${TEST_NAME}" + fi +} + +# The outermost wrapper layer +test_wrapper_layer() +{ + try_this 0 "Default lb config" ${LIVE_BUILD}/frontend/lb config + + # Increase coverage by adding error scenarios + try_this 1 "No argument to lb" ${LIVE_BUILD}/frontend/lb + try_this 1 "Unknown argument to lb" ${LIVE_BUILD}/frontend/lb does_not_exist +} + +# The configuration generator +test_lb_config() +{ + try_this 0 "Default config" ${LIVE_BUILD}/scripts/build/config +} + +# Testing various proxy settings +test_proxy() +{ + export http_proxy + + http_proxy=""; try_this 0 "All proxy options turned off" ${LIVE_BUILD}/scripts/build/config --apt-options "-o Acquire::http::Proxy-Auto-Detect= -o Acquire::http::ProxyAutoDetect= -o Acquire::http::Proxy=" + http_proxy=""; try_this 0 "All proxy options turned off, with proxy scripts returning an error code" ${LIVE_BUILD}/scripts/build/config --apt-options "-o Acquire::http::Proxy-Auto-Detect=/bin/false -o Acquire::http::ProxyAutoDetect=/bin/false -o Acquire::http::Proxy=" + + cat > ${LIVE_BUILD}/tmp.sh << EOF +#!/bin/sh +echo '' +EOF + chmod u+x ${LIVE_BUILD}/tmp.sh + http_proxy=""; try_this 0 "All proxy options turned off, with proxy scripts returning an empty line" ${LIVE_BUILD}/scripts/build/config --apt-options "-o Acquire::http::Proxy-Auto-Detect=${LIVE_BUILD}/tmp.sh -o Acquire::http::ProxyAutoDetect=${LIVE_BUILD}/tmp.sh -o Acquire::http::Proxy=" + + cat > ${LIVE_BUILD}/tmp.sh << EOF +#!/bin/sh +echo 'DIRECT' +EOF + chmod u+x ${LIVE_BUILD}/tmp.sh + http_proxy=""; try_this 0 "All proxy options turned off, with proxy scripts returning 'DIRECT'" ${LIVE_BUILD}/scripts/build/config --apt-options "-o Acquire::http::Proxy-Auto-Detect=${LIVE_BUILD}/tmp.sh -o Acquire::http::ProxyAutoDetect=${LIVE_BUILD}/tmp.sh -o Acquire::http::Proxy=" + + cat > ${LIVE_BUILD}/tmp1.sh << EOF +#!/bin/sh +echo 'location1' +EOF + chmod u+x ${LIVE_BUILD}/tmp1.sh + cat > ${LIVE_BUILD}/tmp2.sh << EOF +#!/bin/sh +echo 'location2' +EOF + chmod u+x ${LIVE_BUILD}/tmp2.sh + http_proxy=""; try_this 1 "Error: mismatch Acquire::http::Proxy-Auto-Detect and Acquire::http::ProxyAutoDetect" ${LIVE_BUILD}/scripts/build/config --apt-options "-o Acquire::http::Proxy-Auto-Detect=${LIVE_BUILD}/tmp1.sh -o Acquire::http::ProxyAutoDetect=${LIVE_BUILD}/tmp2.sh -o Acquire::http::Proxy=" + http_proxy=""; try_this 1 "Error: mismatch Acquire::http::Proxy-Auto-Detect and Acquire::http::Proxy" ${LIVE_BUILD}/scripts/build/config --apt-options "-o Acquire::http::Proxy-Auto-Detect=${LIVE_BUILD}/tmp1.sh -o Acquire::http::ProxyAutoDetect= -o Acquire::http::Proxy=location3" + http_proxy="location4"; try_this 1 "Error: mismatch Acquire::http::Proxy-Auto-Detect and http_proxy" ${LIVE_BUILD}/scripts/build/config --apt-options "-o Acquire::http::Proxy-Auto-Detect=${LIVE_BUILD}/tmp1.sh -o Acquire::http::ProxyAutoDetect= -o Acquire::http::Proxy=" + http_proxy=""; try_this 1 "Error: mismatch Acquire::http::Proxy-Auto-Detect and command line --apt-http-proxy" ${LIVE_BUILD}/scripts/build/config --apt-options "-o Acquire::http::Proxy-Auto-Detect=${LIVE_BUILD}/tmp1.sh -o Acquire::http::ProxyAutoDetect= -o Acquire::http::Proxy=" --apt-http-proxy=location5 + # Reset at the end + export -n http_proxy +} + +# Use a path relative to the git code +export LIVE_BUILD=$(realpath $(dirname $BASH_SOURCE)/..) + +# Allow fine-grained test selection. If desired, pass along the test number on the command line +COUNTER=0 +SINGLE_TEST=${1:-0} + +rm -fr ${LIVE_BUILD}/coverage +# Invoke the outermost wrapper layer +test_wrapper_layer + +# Bashcov somehow has issues in following the paths, +# so invoke config directly +# This is not the recommended way to invoke live-build +test_lb_config + +# Testing various proxy settings +test_proxy \ No newline at end of file