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:
parent
c9826d7934
commit
15aad88404
|
@ -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
|
||||||
|
}
|
|
@ -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)
|
$(MAKE) -C util/romcc all test -j $(CPUS) V=$(V) Q=$(Q)
|
||||||
echo "Testing broadcom/secimage"
|
echo "Testing broadcom/secimage"
|
||||||
$(MAKE) -C util/broadcom/secimage test
|
$(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:
|
test-cleanup:
|
||||||
rm -rf coreboot-builds coreboot-builds-chromeos
|
rm -rf coreboot-builds coreboot-builds-chromeos
|
||||||
|
|
Loading…
Reference in New Issue