| #!/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 "$@" |