util/gitconfig: Add timeout test
Add a `util/gitconfig/test` subdirectory which will contain tests to run as executable files, add a helper script. Add a timeout test that verifies that gitconfig completes in under two seconds (typical run time is ~30 ms). Add gitconfig tests to the `testing` Makefile under the `test-tools` target. Change-Id: Id46f905b9f782e67be97a65d10045c3345dc996b Signed-off-by: Alex Thiessen <alex.thiessen.de+coreboot@gmail.com> Reviewed-on: https://review.coreboot.org/23280 Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
		
				
					committed by
					
						 Patrick Georgi
						Patrick Georgi
					
				
			
			
				
	
			
			
			
						parent
						
							c9826d7934
						
					
				
				
					commit
					15aad88404
				
			
							
								
								
									
										71
									
								
								util/gitconfig/test/helpers.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								util/gitconfig/test/helpers.sh
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,71 @@ | ||||
| #!/bin/bash | ||||
|  | ||||
| ## | ||||
| ## This file is part of the coreboot project. | ||||
| ## | ||||
| ## Copyright (C) 2003-2018 Alex Thiessen <alex.thiessen.de+coreboot@gmail.com> | ||||
| ## | ||||
| ## This program is free software; you can redistribute it and/or modify | ||||
| ## it under the terms of the GNU General Public License as published by | ||||
| ## the Free Software Foundation; version 3 or later of the License. | ||||
| ## | ||||
| ## This program is distributed in the hope that it will be useful, | ||||
| ## but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| ## GNU General Public License for more details. | ||||
| ## | ||||
| ## SPDX-License-Identifier: GPL-3.0-or-later | ||||
| ## <https://spdx.org/licenses/GPL-3.0-or-later.html> | ||||
| ## | ||||
|  | ||||
| set -o errexit | ||||
| set -o nounset | ||||
|  | ||||
| # dependency check | ||||
| dependencies=(cut git readlink) | ||||
| for dependency in "${dependencies[@]}"; do | ||||
| 	if ! command -v "${dependency}" 1>/dev/null; then | ||||
| 		echo "missing ${dependency}, test skipped" >&2 | ||||
| 		exit 0 | ||||
| 	fi | ||||
| done | ||||
|  | ||||
| # helper functions | ||||
| function clone_submodules() { | ||||
| 	clone_dir="${1}" | ||||
| 	log_dir="${2}" | ||||
|  | ||||
| 	modules_dir="$(readlink --canonicalize-missing \ | ||||
| 		"$(git rev-parse --git-dir)/modules")" | ||||
| 	cd "${clone_dir}" | ||||
| 	git submodule init 1>>"${log_dir}/clone.log" 2>&1 | ||||
| 	for submodule in $(git config --get-regexp "submodule\..*\.url" \ | ||||
| 		| cut --delimiter=. --fields=2); do | ||||
| 		git config "submodule.${submodule}.url" \ | ||||
| 			"${modules_dir}/${submodule}" | ||||
| 	done | ||||
| 	git submodule update 1>>"${log_dir}/clone.log" 2>&1 | ||||
| } | ||||
|  | ||||
| function check_exit_code() { | ||||
| 	declare -i err=${?} | ||||
|  | ||||
| 	# either "positive" or "negative" | ||||
| 	polarity="${1}" | ||||
| 	log_file="${2}" | ||||
|  | ||||
| 	# exit code 124 is special as per `timeout` manpage | ||||
| 	if [ "${polarity}" == "positive" ] && [ ${err} -eq 124 ]; then | ||||
| 		echo >&2 "timed out" | ||||
| 	fi | ||||
|  | ||||
| 	if [ "${polarity}" == "positive" ] && [ ${err} -ne 0 ]; then | ||||
| 		echo "bad exit code: expected 0, actually ${err}" | ||||
| 		echo "for details, refer to log file \"${log_file}\"" | ||||
| 		exit ${err} | ||||
| 	elif [ "${polarity}" == "negative" ] && [ ${err} -eq 0 ]; then | ||||
| 		echo "bad exit code: expected non-zero, actually 0" | ||||
| 		echo "for details, refer to log file \"${log_file}\"" | ||||
| 		exit 1 | ||||
| 	fi | ||||
| } | ||||
							
								
								
									
										69
									
								
								util/gitconfig/test/timeout.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										69
									
								
								util/gitconfig/test/timeout.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,69 @@ | ||||
| #!/bin/bash | ||||
|  | ||||
| ## | ||||
| ## This file is part of the coreboot project. | ||||
| ## | ||||
| ## Copyright (C) 2003-2018 Alex Thiessen <alex.thiessen.de+coreboot@gmail.com> | ||||
| ## | ||||
| ## This program is free software; you can redistribute it and/or modify | ||||
| ## it under the terms of the GNU General Public License as published by | ||||
| ## the Free Software Foundation; version 3 or later of the License. | ||||
| ## | ||||
| ## This program is distributed in the hope that it will be useful, | ||||
| ## but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| ## GNU General Public License for more details. | ||||
| ## | ||||
| ## SPDX-License-Identifier: GPL-3.0-or-later | ||||
| ## <https://spdx.org/licenses/GPL-3.0-or-later.html> | ||||
| ## | ||||
|  | ||||
| set -o errexit | ||||
| set -o nounset | ||||
|  | ||||
| # static analysis | ||||
| if command -v shellcheck 1>/dev/null; then | ||||
| 	shellcheck --exclude=1090,1091 \ | ||||
| 		"${BASH_SOURCE[0]}" \ | ||||
| 		"$(dirname "${BASH_SOURCE[0]}")/helpers.sh" | ||||
| else | ||||
| 	echo "shellcheck not found, running unchecked" >&2 | ||||
| fi | ||||
|  | ||||
| # dependency check | ||||
| dependencies=(dirname git make mktemp rm timeout) | ||||
| for dependency in "${dependencies[@]}"; do | ||||
| 	if ! command -v "${dependency}" 1>/dev/null; then | ||||
| 		echo "missing ${dependency}, test skipped" >&2 | ||||
| 		exit 0 | ||||
| 	fi | ||||
| done | ||||
|  | ||||
| source "$(dirname "${BASH_SOURCE[0]}")/helpers.sh" | ||||
|  | ||||
| # setup | ||||
| base_dir="$(mktemp --directory --tmpdir \ | ||||
| 	"test-$(basename "${BASH_SOURCE[0]}" .sh)-XXXXXXXX")" | ||||
| clone_dir="${base_dir}/coreboot" | ||||
| git clone "$(git rev-parse --show-toplevel)" "${clone_dir}" \ | ||||
| 	1>"${base_dir}/clone.log" 2>&1 | ||||
|  | ||||
| ( | ||||
| 	set -o errexit | ||||
| 	set -o nounset | ||||
|  | ||||
| 	clone_submodules "${clone_dir}" "${base_dir}" | ||||
|  | ||||
| 	# mock | ||||
| 	git config user.name "John Doe" | ||||
| 	git config user.email "john.doe@example.com" | ||||
|  | ||||
| 	# test | ||||
| 	log_file="${base_dir}/gitconfig.log" | ||||
| 	timeout 2s make gitconfig \ | ||||
| 		1>"${log_file}" 2>&1 \ | ||||
| 		|| check_exit_code positive "${log_file}" | ||||
| ) | ||||
|  | ||||
| # teardown | ||||
| rm --force --recursive "${base_dir}" | ||||
| @@ -123,6 +123,12 @@ test-tools: | ||||
| 	$(MAKE) -C util/romcc all test -j $(CPUS) V=$(V) Q=$(Q) | ||||
| 	echo "Testing broadcom/secimage" | ||||
| 	$(MAKE) -C util/broadcom/secimage test | ||||
| 	@echo "Running gitconfig tests" | ||||
| 	@for test in $$(find util/gitconfig/test -maxdepth 1 \ | ||||
| 		-type f -executable); do \ | ||||
| 		echo "$${test}"; \ | ||||
| 		"$${test}" || exit $${?}; \ | ||||
| 	done | ||||
|  | ||||
| test-cleanup: | ||||
| 	rm -rf coreboot-builds coreboot-builds-chromeos | ||||
|   | ||||
		Reference in New Issue
	
	Block a user