diff options
-rw-r--r-- | .github/workflows/ci.yml | 6 | ||||
-rwxr-xr-x | test/integration/example/test.sh | 137 |
2 files changed, 141 insertions, 2 deletions
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index feb74f2..c4d1aed 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -25,8 +25,10 @@ jobs: git config --global user.email 'John.Doe@example.com' - name: Install dependencies run: pip install -r requirements.txt - - name: Integration tests + - name: Integration test (local) run: ./test/integration/local/test.sh + - name: Integration test (example config) + run: ./test/integration/example/test.sh - name: Unit tests run: python -m unittest --buffer @@ -36,7 +38,7 @@ jobs: steps: - name: Checkout uses: actions/checkout@v2 - - name: Integration tests + - name: Integration test (Docker) run: ./test/integration/docker/test.sh publish_docker: diff --git a/test/integration/example/test.sh b/test/integration/example/test.sh new file mode 100755 index 0000000..4d8ab3a --- /dev/null +++ b/test/integration/example/test.sh @@ -0,0 +1,137 @@ +#!/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 + +readonly cgitize_toml_path="$script_dir/../../../examples/cgitize.toml" +readonly output_dir='/tmp/cgitize' + +clone_via_ssh_true() { + sed -i -E -e 's/^clone_via_ssh = (true|false)$/clone_via_ssh = true/' -- "$cgitize_toml_path" +} + +clone_via_ssh_false() { + sed -i -E -e 's/^clone_via_ssh = (true|false)$/clone_via_ssh = false/' -- "$cgitize_toml_path" +} + +cleanup() { + echo + echo ---------------------------------------------------------------------- + echo Cleaning up + echo ---------------------------------------------------------------------- + + echo "Removing output directory: $output_dir" + rm -rf -- "$output_dir" + echo "Reverting clone_via_ssh settings: $cgitize_toml_path" + clone_via_ssh_true +} + +cgitize() { + echo + echo ---------------------------------------------------------------------- + echo Running cgitize + echo ---------------------------------------------------------------------- + + python3 -m cgitize.main --config "$cgitize_toml_path" +} + +setup_ssh() { + clone_via_ssh_true +} + +setup_https() { + clone_via_ssh_false +} + +verify_origin() { + if [ "$#" -ne 2 ]; then + echo "usage: ${FUNCNAME[0]} REPO URL" >&2 + return 1 + fi + + local repo="$1" + local expected="$2" + + echo + echo ---------------------------------------------------------------------- + echo "Verifying origin: $repo" + echo ---------------------------------------------------------------------- + + local repo_dir="$output_dir/$repo" + + local actual + actual="$( GIT_DIR="$repo_dir" git config --get remote.origin.url )" + + if [ "$expected" = "$actual" ]; then + echo 'It matches.' + else + echo "It doesn't match!" + echo " Expected: $expected" + echo " Actual: $actual" + return 1 + fi +} + +verify_repos() { + local repo + for repo; do + echo + echo ---------------------------------------------------------------------- + echo "Verifying repository: $repo" + echo ---------------------------------------------------------------------- + + local repo_dir="$output_dir/$repo" + GIT_DIR="$repo_dir" git rev-parse HEAD > /dev/null + echo 'HEAD is fine.' + + if test -f "$repo_dir/info/web/last-modified"; then + echo 'last-modified is fine.' + else + echo 'last-modified is missing!' + return 1 + fi + done +} + +test_ssh() { + echo + echo ====================================================================== + echo "${FUNCNAME[0]}" + echo ====================================================================== + + setup_ssh + cgitize + verify_repos lens cef wintun + verify_origin lens 'git@github.com:ekmett/lens.git' + verify_origin cef 'git@bitbucket.org:chromiumembedded/cef.git' + cleanup +} + +test_https() { + echo + echo ====================================================================== + echo "${FUNCNAME[0]}" + echo ====================================================================== + + setup_https + cgitize + verify_repos lens cef wintun + verify_origin lens 'https://github.com/ekmett/lens.git' + verify_origin cef 'https://bitbucket.org/chromiumembedded/cef.git' + cleanup +} + +main() { + trap cleanup EXIT + if [ -z "${CI+y}" ]; then + # Skip this on CI; there're no SSH keys to authenticate against GitHub, + # etc. there. + test_ssh + fi + test_https +} + +main |