diff options
Diffstat (limited to 'integration-tests/dpkg-build-test/run-dpkg-build-test.sh')
-rwxr-xr-x | integration-tests/dpkg-build-test/run-dpkg-build-test.sh | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/integration-tests/dpkg-build-test/run-dpkg-build-test.sh b/integration-tests/dpkg-build-test/run-dpkg-build-test.sh new file mode 100755 index 000000000..eb78c3f28 --- /dev/null +++ b/integration-tests/dpkg-build-test/run-dpkg-build-test.sh @@ -0,0 +1,110 @@ +#!/bin/bash +# +# A script to run a BuildStream test case. + + +TEST_DIR="elements/" +RESULTS="results/" +EXPECTED="expected/" + +set -eu + +# compare_debs +# +# Compares results to expected files for every .deb file found +# +# Args: +# test_name ($1) - The name of the test, for error reporting +# result_dir ($2) - The directory containing result files +# expected_dir ($3) - The directory containing expected files +# +# Returns: +# 1 if the debs are all equivalent, 0 otherwise. +compare_debs () ( + set +e + + local test_name="$1" + local result_dir="$2" + local expected_dir="$3" + + # First, expected and result must have the same .deb file lists + diff <(cd $result_dir/$test_name && find . -name "*.deb" | sort) <(cd $expected_dir/$test_name && find . -name "*.deb" | sort) + if [ "$?" -ne 0 ] + then + printf "%-34s ${RED}%9s${END}\n" "$test_name" "failed" + return 1 + fi + + for deb in $(cd $result_dir/$test_name && find . -name "*.deb"); do + result_deb="$result_dir/$test_name/$deb" + expected_deb="$expected_dir/$test_name/$deb" + diff <(dpkg-deb -c $result_deb | tr -s ' ' | cut -d' ' -f6) <(dpkg-deb -c $expected_deb | tr -s ' ' | cut -d' ' -f6) + if [ "$?" -ne 0 ] + then + printf "%-34s ${RED}%9s${END}\n" "$test_name" "failed" + return 1 + fi + done + printf "%-34s ${GREEN}%9s${END}\n" "$test_name" "succeeded" + return 0 +) + +# run_test +# +# Run tests for this test case. +# +# This should create a set of directories that match the directories +# in 'results/', as well as a log of the BuildStream output in +# 'test_log.log'. +# +run_test () { + local element + local elements + local element_name + local test_dir + local bst_file + local tar_file + + local successes=0 + local total=0 + local exit + + source ../lib.sh + + mkdir -p "$TEST_DIR" + elements="$(find "$TEST_DIR" -maxdepth 1 -type f)" + + for element in $elements; + do + total=$((total + 1)) + + element_name="$(basename "$element")" + element_name="${element_name%.*}" + + test_dir="$RESULTS/$element_name" + + echo "Running test '$element_name'" + + bst_with_flags build "$element_name".bst + echo "Built $element_name" + bst_with_flags checkout "$element_name".bst "$test_dir" + + exit=0 + if [ "$element" == "dpkg-deploy-test.bst" ]; then + compare_debs "$element_name" "$RESULTS" "$EXPECTED" || exit=$? + else + compare_results_no_contents "$element_name" "$RESULTS" "$EXPECTED" || exit=$? + fi + if [ $exit == 0 ] + then + successes=$((successes + 1)) + fi + done + + if [ $total != $successes ] + then + return 1 + fi +} + +run_test "$@" |