Files
navop/script/test-bundle-macos-dmg.sh

60 lines
1.5 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
PROJECT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
TARGET="retry-test-target"
FAKE_BIN_DIR="$(mktemp -d "${TMPDIR:-/tmp}/onetcli-dmg-test.XXXXXX")"
TEST_PROJECT_DIR="${FAKE_BIN_DIR}/project"
APP_DIR="${TEST_PROJECT_DIR}/target/Navop.app"
DMG_PATH="${TEST_PROJECT_DIR}/navop-${TARGET}.dmg"
ATTEMPTS_FILE="${FAKE_BIN_DIR}/attempts"
cleanup() {
rm -rf "$FAKE_BIN_DIR"
}
trap cleanup EXIT
mkdir -p "$APP_DIR/Contents/MacOS"
cat > "${FAKE_BIN_DIR}/hdiutil" <<'HDIUTIL'
#!/usr/bin/env bash
set -euo pipefail
attempts_file="${ONETCLI_TEST_HDIUTIL_ATTEMPTS_FILE:?}"
attempts=0
if [ -f "$attempts_file" ]; then
attempts="$(cat "$attempts_file")"
fi
attempts=$((attempts + 1))
printf '%s' "$attempts" > "$attempts_file"
if [ "$attempts" -eq 1 ]; then
echo "hdiutil: create failed - Resource busy" >&2
exit 1
fi
output="${@: -1}"
if [[ "$output" != *.dmg ]]; then
output="${output}.dmg"
fi
printf 'fake dmg' > "$output"
HDIUTIL
chmod +x "${FAKE_BIN_DIR}/hdiutil"
PATH="${FAKE_BIN_DIR}:$PATH" \
ONETCLI_PROJECT_DIR="$TEST_PROJECT_DIR" \
ONETCLI_TEST_HDIUTIL_ATTEMPTS_FILE="$ATTEMPTS_FILE" \
ONETCLI_DMG_RETRIES=2 \
ONETCLI_DMG_RETRY_DELAY=0 \
"$PROJECT_DIR/script/bundle-macos-dmg.sh" "$TARGET"
if [ "$(cat "$ATTEMPTS_FILE")" != "2" ]; then
echo "Expected hdiutil to be retried exactly once"
exit 1
fi
if [ ! -f "$DMG_PATH" ]; then
echo "Expected DMG at $DMG_PATH"
exit 1
fi