#!/usr/bin/env python3 """S-18a (#139): prove the Objecttypen API is up and its static token authenticates. Assert an unauthenticated call to /api/v2/objecttypes is 401 and an authenticated one (the seeded dev token) is 200 — i.e. the service migrated, booted, and setup_configuration provisioned the token. Stdlib only so it runs in a bare python:3-slim container on the compose network. """ import os import sys import time import urllib.error import urllib.request BASE = os.environ["OBJECTTYPEN"] # http://:8000 TOKEN = os.environ["OBJECTTYPEN_TOKEN"] TIMEOUT = int(os.environ.get("OBJECTTYPEN_TIMEOUT", "60")) def status(url, token=None): req = urllib.request.Request(url) if token: req.add_header("Authorization", f"Token {token}") try: with urllib.request.urlopen(req, timeout=10) as r: return r.status except urllib.error.HTTPError as e: return e.code except Exception: return 0 def main(): url = f"{BASE}/api/v2/objecttypes" deadline = time.time() + TIMEOUT while time.time() < deadline: unauth = status(url) authed = status(url, TOKEN) if unauth == 401 and authed == 200: print(f"OK — {url}: no-auth {unauth}, token {authed}") return 0 time.sleep(3) print(f"FAIL — {url}: expected no-auth 401 + token 200, got {status(url)} / {status(url, TOKEN)}", file=sys.stderr) return 1 if __name__ == "__main__": sys.exit(main())