From 8d2422274ae948f7412b6960597f5de91f3d8830 Mon Sep 17 00:00:00 2001 From: Egor Tensin Date: Sat, 31 Jul 2021 17:39:46 +0300 Subject: move all tests to test/ --- test/integration/local/test.sh | 229 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 229 insertions(+) create mode 100755 test/integration/local/test.sh (limited to 'test/integration/local') diff --git a/test/integration/local/test.sh b/test/integration/local/test.sh new file mode 100755 index 0000000..088539b --- /dev/null +++ b/test/integration/local/test.sh @@ -0,0 +1,229 @@ +#!/usr/bin/env bash + +set -o errexit -o nounset -o pipefail + +script_dir="$( dirname -- "${BASH_SOURCE[0]}" )" +script_dir="$( cd -- "$script_dir" && pwd )" +readonly script_dir + +upstream_repo_dir= +readonly etc_dir="$script_dir/etc" +readonly cgitize_toml_path="$etc_dir/cgitize.toml" +readonly output_dir="$script_dir/output" + +cleanup() { + echo + echo ---------------------------------------------------------------------- + echo Cleaning up + echo ---------------------------------------------------------------------- + + echo "Removing upstream repository directory: $upstream_repo_dir" + rm -rf -- "$upstream_repo_dir" + echo "Removing etc directory: $etc_dir" + rm -rf -- "$etc_dir" + echo "Removing output directory: $output_dir" + rm -rf -- "$output_dir" +} + +setup_upstream_repo() { + echo + echo ---------------------------------------------------------------------- + echo Setting up upstream repository + echo ---------------------------------------------------------------------- + + upstream_repo_dir="$( mktemp -d )" + pushd -- "$upstream_repo_dir" > /dev/null + + git init + echo '1' > 1.txt + git add . + git commit -m 'first commit' + echo '2' > 2.txt + git add . + git commit -m 'second commit' + + popd > /dev/null +} + +add_commits() { + echo + echo ---------------------------------------------------------------------- + echo Adding new commits + echo ---------------------------------------------------------------------- + + pushd -- "$upstream_repo_dir" > /dev/null + + echo '3' > 3.txt + git add . + git commit -m 'third commit' + + popd > /dev/null +} + +setup_cgitize_toml() { + echo + echo ---------------------------------------------------------------------- + echo cgitize.toml + echo ---------------------------------------------------------------------- + + local conf_dir + conf_dir="$( dirname -- "$cgitize_toml_path" )" + mkdir -p -- "$conf_dir" + + cat <&2 + return 1 + fi + + local test_string="$1" + shift + + local pattern + for pattern; do + # Be careful to _not_ use grep -q, since this fucks stuff up: + # https://mywiki.wooledge.org/BashPitfalls#pipefail. + if ! echo "$test_string" | grep --fixed-strings -- "$pattern" > /dev/null; then + echo "${FUNCNAME[0]}: couldn't find the following pattern: $pattern" >&2 + return 1 + fi + done +} + +verify_commits() { + # This is fucking stupid, but otherwise stuff like `if verify_commits;` + # doesn't work: https://stackoverflow.com/q/4072984/514684 + # TODO: figure this out? + pushd -- "$output_dir" > /dev/null && + cd -- test_repo && + local output && + output="$( git log --oneline )" && + echo "$output" && + check_contains "$output" "$@" && + popd > /dev/null +} + +verify_initial_commits() { + echo + echo ---------------------------------------------------------------------- + echo Checking the initial commits + echo ---------------------------------------------------------------------- + + verify_commits 'first commit' 'second commit' +} + +verify_added_commits() { + echo + echo ---------------------------------------------------------------------- + echo Checking the added commits + echo ---------------------------------------------------------------------- + + verify_commits 'first commit' 'second commit' 'third commit' +} + +test_bare() { + echo + echo ====================================================================== + echo "${FUNCNAME[0]}" + echo ====================================================================== + + setup_bare + cgitize + verify_initial_commits + add_commits + cgitize + verify_added_commits + cleanup +} + +test_workdir() { + echo + echo ====================================================================== + echo "${FUNCNAME[0]}" + echo ====================================================================== + + setup_workdir + cgitize + verify_initial_commits + add_commits + cgitize + verify_added_commits + cleanup +} + +test_failure() { + echo + echo ====================================================================== + echo "${FUNCNAME[0]}" + echo ====================================================================== + + setup_bare + cgitize + verify_initial_commits + add_commits + + echo + echo ---------------------------------------------------------------------- + echo Removing upstream repository + echo ---------------------------------------------------------------------- + rm -rf -- "$upstream_repo_dir" + + if cgitize; then + echo "cgitize should have failed to pull the upstream repository." >&2 + return 1 + fi + verify_initial_commits + if verify_added_commits; then + echo "The added commits should not have been pulled." >&2 + return 1 + fi + cleanup +} + +main() { + trap cleanup EXIT + test_bare + test_workdir + test_failure +} + +main -- cgit v1.2.3