Files

57 lines
1.8 KiB
Bash

#!/bin/sh
set -eu
if [ "$#" -ne 2 ]; then
echo "usage: $0 BASE_URL API_KEY" >&2
exit 2
fi
base=${1%/}
api_key=$2
work=$(mktemp -d)
trap 'rm -rf "$work"' EXIT HUP INT TERM
request() {
expected=$1
method=$2
url=$3
output=$4
shift 4
actual=$(curl --path-as-is -sS -o "$output" -w '%{http_code}' -X "$method" "$url" "$@")
if [ "$actual" != "$expected" ]; then
echo "$method $url: expected HTTP $expected, got $actual" >&2
sed -n '1,20p' "$output" >&2
exit 1
fi
}
request 200 GET "$base/" "$work/root"
request 200 GET "$base///" "$work/root-slashes"
request 200 GET "$base/static/" "$work/static-index"
request 200 GET "$base/static/app.js/" "$work/app"
request 200 GET "$base/api/health/" "$work/health"
grep -q '"service": "url-shortener"' "$work/health"
request 200 OPTIONS "$base/api/health/" "$work/options"
destination="https://destination.example/trailing-slash-smoke"
encoded_destination="https%3A%2F%2Fdestination.example%2Ftrailing-slash-smoke"
request 201 POST "$base/api/shorten/" "$work/created" \
-H 'Content-Type: application/json' \
--data "{\"url\":\"$destination\"}"
short_url=$(sed -n '1p' "$work/created")
code=${short_url##*/}
case "$short_url" in
"$base"/*) ;;
*) echo "unexpected generated short URL: $short_url" >&2; exit 1 ;;
esac
request 200 GET "$base/api/lookup/?url=$encoded_destination" "$work/lookup"
grep -q "\"short_code\": \"$code\"" "$work/lookup"
request 200 GET "$base/api/urls/$code/" "$work/metadata"
request 200 GET "$base/api/urls/?api_key=$api_key" "$work/list"
request 302 GET "$base/$code/" "$work/redirect"
request 204 DELETE "$base/api/urls/$code/?api_key=$api_key" "$work/delete"
request 404 GET "$base/api/urls/$code/" "$work/missing"
echo "trailing-slash smoke test passed: $base"