summaryrefslogtreecommitdiff
path: root/integration-tests/dpkg-build-test/run-dpkg-build-test.sh
blob: eb78c3f28acf7ff46e83cf3edef87ce690d04a20 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
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 "$@"