Files

31 lines
1.9 KiB
Python

"""对本机隔离 Linux 容器做鉴权及持久化验收。"""
import json
import sqlite3
from pathlib import Path
import httpx
ROOT = Path(__file__).resolve().parents[2]
with httpx.Client(base_url='http://127.0.0.1:18372', trust_env=False, timeout=20) as client:
assert client.get('/').status_code == 401
assert client.get('/proxy/api/auth/keys').status_code == 401
assert client.get('/', auth=('admin', 'wrong')).status_code == 401
client.auth = ('admin', 'synthetic-web-for-local-test')
page = client.get('/')
assert page.status_code == 200 and '20261016-ui2' in page.text
response = client.get('/proxy/api/summary', params={'start_date': '2026-10-15', 'end_date': '2026-10-15'},
headers={'X-API-Key': 'mif_sk_syntheticlocal'})
assert response.status_code == 200, response.status_code
assert response.json()['data'][0]['steps'] == 4691
assert response.json()['data'][0]['active_kcal'] == 596
assert response.headers['Cache-Control'] == 'no-store'
assert client.get('/proxy/api/auth/keys').status_code == 200
assert client.get('/proxy/api/auth/keys', headers={'X-API-Key': 'mif_sk_invalid'}).status_code == 200
assert client.delete('/proxy/api/auth/keys/mif_sk_syntheticlocal', headers={'Origin': 'https://untrusted.invalid'}).status_code == 403
assert client.get('/proxy/api/summary', params={'start_date': '2026-10-15', 'end_date': '2026-10-15'},
headers={'X-API-Key': 'mif_sk_invalid'}).status_code == 401
with sqlite3.connect(ROOT / 'work/audit2-container-validation/state/data/mi_fitness.db') as conn:
assert conn.execute("SELECT count(*) FROM api_keys WHERE pass_token!=''").fetchone()[0] == 0
assert conn.execute('PRAGMA quick_check').fetchone()[0] == 'ok'
print(json.dumps({'browser_auth': 'ok', 'query': 'ok', 'csrf_block': 'ok', 'invalid_api_key': 'denied',
'sqlite_integrity': 'ok', 'sqlite_plaintext_tokens': 0, 'fixture': 'synthetic only'}, indent=2))