[coreboot-gerrit] Change in coreboot[master]: util/gitconfig: Add timeout test

Alex Thiessen (Code Review) gerrit at coreboot.org
Mon Jan 15 22:54:39 CET 2018


Alex Thiessen has uploaded this change for review. ( https://review.coreboot.org/23280


Change subject: util/gitconfig: Add timeout test
......................................................................

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 at gmail.com>
---
A util/gitconfig/test/helpers.sh
A util/gitconfig/test/timeout.sh
M util/testing/Makefile.inc
3 files changed, 146 insertions(+), 0 deletions(-)



  git pull ssh://review.coreboot.org:29418/coreboot refs/changes/80/23280/1

diff --git a/util/gitconfig/test/helpers.sh b/util/gitconfig/test/helpers.sh
new file mode 100644
index 0000000..0d4b3c8
--- /dev/null
+++ b/util/gitconfig/test/helpers.sh
@@ -0,0 +1,71 @@
+#!/bin/bash
+
+##
+## This file is part of the coreboot project.
+##
+## Copyright (C) 2003-2018 Alex Thiessen <alex.thiessen.de+coreboot at 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
+}
diff --git a/util/gitconfig/test/timeout.sh b/util/gitconfig/test/timeout.sh
new file mode 100755
index 0000000..fff5a3a
--- /dev/null
+++ b/util/gitconfig/test/timeout.sh
@@ -0,0 +1,69 @@
+#!/bin/bash
+
+##
+## This file is part of the coreboot project.
+##
+## Copyright (C) 2003-2018 Alex Thiessen <alex.thiessen.de+coreboot at 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
+
+# statical 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 at 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}"
diff --git a/util/testing/Makefile.inc b/util/testing/Makefile.inc
index 321db0d..61d5802 100644
--- a/util/testing/Makefile.inc
+++ b/util/testing/Makefile.inc
@@ -110,6 +110,12 @@
 	$(foreach tool, $(TOOLLIST), echo "Building $(tool)";export MFLAGS= ;export MAKEFLAGS= ;$(MAKE) -C util/$(tool) all V=$(V) Q=$(Q) || exit 1; )
 	echo "Building romcc"
 	$(MAKE) -C util/romcc all test -j $(CPUS) V=$(V) Q=$(Q)
+	@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

-- 
To view, visit https://review.coreboot.org/23280
To unsubscribe, or for help writing mail filters, visit https://review.coreboot.org/settings

Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: Id46f905b9f782e67be97a65d10045c3345dc996b
Gerrit-Change-Number: 23280
Gerrit-PatchSet: 1
Gerrit-Owner: Alex Thiessen <alex.thiessen.de+coreboot at gmail.com>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.coreboot.org/pipermail/coreboot-gerrit/attachments/20180115/ff0e0692/attachment-0001.html>


More information about the coreboot-gerrit mailing list