Files
tf_registry/tests/smoke.sh
T

88 lines
2.5 KiB
Bash
Executable File

#!/usr/bin/env bash
# Smoke tests for Terraform Registry
# Usage: bash tests/smoke.sh [DOMAIN]
set -euo pipefail
DOMAIN="${1:-https://registry.containerk8s.dev.nubes.ru}"
PASS=0
FAIL=0
check() {
local name="$1"
if eval "$2" &>/dev/null; then
echo "✅ $name"
((PASS++))
else
echo "❌ $name"
((FAIL++))
fi
}
echo "=== Registry Smoke Tests: $DOMAIN ==="
echo
# 1. Root page
check "GET /" \
"curl -s --max-time 5 '$DOMAIN/' | grep -q ONLINE"
# 2. Healthz
check "GET /healthz → ok" \
"test 'ok' = \"\$(curl -s --max-time 5 '$DOMAIN/healthz')\""
# 3. Readyz
check "GET /readyz → ok" \
"test 'ok' = \"\$(curl -s --max-time 5 '$DOMAIN/readyz')\""
# 4. Discovery
check "GET /.well-known/terraform.json" \
"curl -s --max-time 5 '$DOMAIN/.well-known/terraform.json' | grep -q '/v1/providers/'"
# 5. Versions
check "GET /v1/providers/nubes-test/nubes/versions" \
"curl -s --max-time 10 '$DOMAIN/v1/providers/nubes-test/nubes/versions' | \
python3 -c \"
import sys,json
d=json.load(sys.stdin)
vs=[v['version'] for v in d['versions']]
assert d['id']=='nubes-test/nubes'
assert len(vs)>=1
assert vs==sorted(vs), 'not sorted'
for v in d['versions']:
p=[x['os'] for x in v['platforms']]
assert 'linux' in p and 'darwin' in p and 'windows' in p
print('OK')
\""
# 6. Download metadata
check "GET /v1/providers/.../5.1.17/download/linux/amd64" \
"curl -s --max-time 10 '$DOMAIN/v1/providers/nubes-test/nubes/5.1.17/download/linux/amd64' | \
python3 -c \"
import sys,json
d=json.load(sys.stdin)
assert d['os']=='linux' and d['arch']=='amd64'
assert len(d['shasum'])==64
assert 'download_url' in d
keys=d['signing_keys']['gpg_public_keys']
assert len(keys)==2
assert keys[0]['key_id']=='3EC4673EB798238A'
assert keys[1]['key_id']=='CB3A0DF161ECC416'
print('OK')
\""
# 7. Proxy download
check "GET /v1/proxy — download zip" \
"url=\$(curl -s --max-time 5 '$DOMAIN/v1/providers/nubes-test/nubes/5.1.17/download/linux/amd64' | python3 -c \"import sys,json; print(json.load(sys.stdin)['download_url'])\") && \
test '200' = \"\$(curl -s --max-time 15 -o /dev/null -w '%{http_code}' \"\$url\")\""
# 8. 404 for unknown provider
check "GET unknown → 404" \
"test '404' = \"\$(curl -s --max-time 5 -o /dev/null -w '%{http_code}' '$DOMAIN/v1/providers/nosuch/noversion/versions')\""
# 9. Missing key param → 400
check "GET /v1/proxy без key → 400" \
"test '400' = \"\$(curl -s --max-time 5 -o /dev/null -w '%{http_code}' '$DOMAIN/v1/proxy')\""
echo
echo "=== $PASS PASS, $FAIL FAIL ==="
exit $FAIL