timeout.sh
1 #!/usr/bin/env bash 2 ## 3 ## This program is free software; you can redistribute it and/or modify 4 ## it under the terms of the GNU General Public License as published by 5 ## the Free Software Foundation; version 3 or later of the License. 6 ## 7 ## This program is distributed in the hope that it will be useful, 8 ## but WITHOUT ANY WARRANTY; without even the implied warranty of 9 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10 ## GNU General Public License for more details. 11 ## 12 ## SPDX-License-Identifier: GPL-3.0-or-later 13 ## <https://spdx.org/licenses/GPL-3.0-or-later.html> 14 ## 15 16 set -o errexit 17 set -o nounset 18 19 # static analysis 20 if command -v shellcheck 1>/dev/null; then 21 shellcheck --exclude=1090,1091 \ 22 "${BASH_SOURCE[0]}" \ 23 "$(dirname "${BASH_SOURCE[0]}")/helpers.sh" 24 else 25 echo "shellcheck not found, running unchecked" >&2 26 fi 27 28 # dependency check 29 dependencies=(dirname git make mktemp rm timeout) 30 for dependency in "${dependencies[@]}"; do 31 if ! command -v "${dependency}" 1>/dev/null; then 32 echo "missing ${dependency}, test skipped" >&2 33 exit 0 34 fi 35 done 36 37 source "$(dirname "${BASH_SOURCE[0]}")/helpers.sh" 38 39 # setup 40 base_dir="$(mktemp --directory --tmpdir \ 41 "test-$(basename "${BASH_SOURCE[0]}" .sh)-XXXXXXXX")" 42 clone_dir="${base_dir}/coreboot" 43 git clone "$(git rev-parse --show-toplevel)" "${clone_dir}" \ 44 1>"${base_dir}/clone.log" 2>&1 45 46 ( 47 set -o errexit 48 set -o nounset 49 50 clone_submodules "${clone_dir}" "${base_dir}" 51 52 # mock 53 git config user.name "John Doe" 54 git config user.email "john.doe@example.com" 55 56 # test 57 log_file="${base_dir}/gitconfig.log" 58 timeout 2s make gitconfig \ 59 1>"${log_file}" 2>&1 \ 60 || check_exit_code positive "${log_file}" 61 ) 62 63 # teardown 64 rm --force --recursive "${base_dir}"