Bind Geofabrik downloads to resolved mirrors
This commit is contained in:
@@ -0,0 +1,128 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -Eeuo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../../.." && pwd)"
|
||||
DOWNLOAD_SCRIPT="$ROOT_DIR/scripts/download-geofabrik.sh"
|
||||
TEST_ROOT="$(mktemp -d)"
|
||||
FAKE_BIN="$TEST_ROOT/bin"
|
||||
CALL_LOG="$TEST_ROOT/curl.log"
|
||||
PBF_FIXTURE="$TEST_ROOT/snapshot.osm.pbf"
|
||||
CHECKSUM_FIXTURE="$TEST_ROOT/snapshot.osm.pbf.md5"
|
||||
trap 'rm -rf -- "$TEST_ROOT"' EXIT
|
||||
|
||||
mkdir -p "$FAKE_BIN"
|
||||
printf 'verified geofabrik snapshot\n' >"$PBF_FIXTURE"
|
||||
|
||||
fail() {
|
||||
printf 'Fehler: %s\n' "$*" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
cat >"$FAKE_BIN/curl" <<'SH'
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -Eeuo pipefail
|
||||
|
||||
is_head=false
|
||||
output_path=""
|
||||
url="${!#}"
|
||||
for ((index = 1; index <= $#; index += 1)); do
|
||||
argument="${!index}"
|
||||
case "$argument" in
|
||||
--head)
|
||||
is_head=true
|
||||
;;
|
||||
--output)
|
||||
index=$((index + 1))
|
||||
output_path="${!index}"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [[ "$is_head" == "true" ]]; then
|
||||
printf 'HEAD|%s\n' "$url" >>"$FAKE_CALL_LOG"
|
||||
printf '%s' "$FAKE_RESOLVED_URL"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
printf 'GET|%s\n' "$url" >>"$FAKE_CALL_LOG"
|
||||
if [[ "$url" == "$FAKE_CHECKSUM_URL" ]]; then
|
||||
cp "$FAKE_CHECKSUM_FIXTURE" "$output_path"
|
||||
exit 0
|
||||
fi
|
||||
if [[ -n "${FAKE_PBF_URL:-}" && "$url" == "$FAKE_PBF_URL" ]]; then
|
||||
cp "$FAKE_PBF_FIXTURE" "$output_path"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
printf 'Unerwarteter Download: %s\n' "$url" >&2
|
||||
exit 90
|
||||
SH
|
||||
chmod 0755 "$FAKE_BIN/curl"
|
||||
|
||||
snapshot_checksum="$(md5sum "$PBF_FIXTURE" | awk '{ print $1 }')"
|
||||
printf '%s germany-260728.osm.pbf\n' \
|
||||
"$snapshot_checksum" \
|
||||
>"$CHECKSUM_FIXTURE"
|
||||
|
||||
germany_output="$TEST_ROOT/germany"
|
||||
germany_latest='https://download.example/europe/germany-latest.osm.pbf'
|
||||
germany_mirror='https://mirror.example/geofabrik/germany-latest.osm.pbf'
|
||||
PATH="$FAKE_BIN:$PATH" \
|
||||
FAKE_CALL_LOG="$CALL_LOG" \
|
||||
FAKE_RESOLVED_URL="$germany_mirror" \
|
||||
FAKE_CHECKSUM_URL="$germany_mirror.md5" \
|
||||
FAKE_CHECKSUM_FIXTURE="$CHECKSUM_FIXTURE" \
|
||||
FAKE_PBF_URL="$germany_mirror" \
|
||||
FAKE_PBF_FIXTURE="$PBF_FIXTURE" \
|
||||
WATERMAPS_GEOFABRIK_DIR="$germany_output" \
|
||||
WATERMAPS_GEOFABRIK_EUROPE_BASE_URL='https://download.example/europe' \
|
||||
"$DOWNLOAD_SCRIPT" germany
|
||||
|
||||
cmp --silent "$PBF_FIXTURE" "$germany_output/germany-latest.osm.pbf" ||
|
||||
fail "Der prüfsummengebundene Snapshot wurde nicht aktiviert."
|
||||
grep -Fxq "GET|$germany_mirror.md5" "$CALL_LOG" ||
|
||||
fail "Die Prüfsumme wurde nicht vom effektiven Mirror gelesen."
|
||||
grep -Fxq "GET|$germany_mirror" "$CALL_LOG" ||
|
||||
fail "Der PBF wurde nicht vom selben effektiven Mirror gelesen."
|
||||
if grep -Fxq "GET|$germany_latest.md5" "$CALL_LOG"; then
|
||||
fail "Die potenziell veraltete Prüfsumme der ursprünglichen URL wurde verwendet."
|
||||
fi
|
||||
|
||||
printf '%s netherlands-260727.osm.pbf\n' \
|
||||
"$snapshot_checksum" \
|
||||
>"$CHECKSUM_FIXTURE"
|
||||
: >"$CALL_LOG"
|
||||
netherlands_output="$TEST_ROOT/netherlands"
|
||||
mkdir -p "$netherlands_output"
|
||||
printf 'previous valid snapshot\n' \
|
||||
>"$netherlands_output/netherlands-latest.osm.pbf"
|
||||
netherlands_dated='https://mirror.example/geofabrik/netherlands-260728.osm.pbf'
|
||||
|
||||
set +e
|
||||
PATH="$FAKE_BIN:$PATH" \
|
||||
FAKE_CALL_LOG="$CALL_LOG" \
|
||||
FAKE_RESOLVED_URL="$netherlands_dated" \
|
||||
FAKE_CHECKSUM_URL="$netherlands_dated.md5" \
|
||||
FAKE_CHECKSUM_FIXTURE="$CHECKSUM_FIXTURE" \
|
||||
FAKE_PBF_URL='' \
|
||||
FAKE_PBF_FIXTURE="$PBF_FIXTURE" \
|
||||
WATERMAPS_GEOFABRIK_DIR="$netherlands_output" \
|
||||
WATERMAPS_GEOFABRIK_EUROPE_BASE_URL='https://download.example/europe' \
|
||||
"$DOWNLOAD_SCRIPT" netherlands \
|
||||
>"$TEST_ROOT/mismatch.out" \
|
||||
2>&1
|
||||
mismatch_status=$?
|
||||
set -e
|
||||
|
||||
[[ "$mismatch_status" -ne 0 ]] ||
|
||||
fail "Eine Prüfsumme für einen anderen datierten Snapshot wurde akzeptiert."
|
||||
grep -Fxq 'previous valid snapshot' \
|
||||
"$netherlands_output/netherlands-latest.osm.pbf" ||
|
||||
fail "Der bisherige Snapshot wurde nach einem Mismatch verändert."
|
||||
if grep -Fxq "GET|$netherlands_dated" "$CALL_LOG"; then
|
||||
fail "Der PBF-Download begann trotz abweichendem Prüfsummendateinamen."
|
||||
fi
|
||||
|
||||
printf 'Geofabrik-Download: Mirror-Bindung und datierter Mismatch: OK\n'
|
||||
Reference in New Issue
Block a user