Files
2026-09-03 08:38:17 +08:00

45 lines
2.2 KiB
Python

import hashlib
import json
import os
import sys
from pathlib import Path
sys.path.insert(0, '/www/server/xingyu-im/ops')
from baota_publish_test_users import BT, WEB, database, digest, env_values, query
backup = Path('/www/backup/xingyu-application-20260831-121140')
state = json.loads((backup / 'result.json').read_text())
expected = state['backendSha256']
assert digest(BT / 'xingyu-api') == expected
assert str((WEB / 'admin').resolve()) == state['admin']
assert str((WEB / 'app').resolve()) == state['h5']
running = []
for proc in Path('/proc').iterdir():
if not proc.name.isdigit():
continue
try:
if os.readlink(str(proc / 'exe')) == str(BT / 'xingyu-api'):
assert digest(proc / 'exe') == expected
running.append(int(proc.name))
except (FileNotFoundError, PermissionError):
pass
assert len(running) == 1, 'expected one process running the released executable'
conn, _ = database(env_values())
try:
migrations = dict(query(conn, 'SELECT version,checksum FROM schema_migrations'))
for name in state['migrationsApplied']:
assert migrations[name] == digest(BT / 'migrations' / name)
counts = {}
for table in ['users', 'admin_users', 'user_sessions', 'orders', 'posts']:
counts[table] = query(conn, 'SELECT COUNT(*) FROM ' + table)[0][0]
cos_count = query(conn, "SELECT COUNT(*) FROM users u JOIN user_profiles p ON p.user_id=u.id WHERE u.is_test=1 AND p.avatar_url LIKE 'https://gz-1349751149.cos.ap-guangzhou.myqcloud.com/media/test-users/cn-adults-20260831-v1/%%'")[0][0]
assert cos_count == 100
permission_count = query(conn, "SELECT COUNT(*) FROM admin_role_permissions rp JOIN admin_roles r ON r.id=rp.role_id WHERE r.role_code='super_admin' AND rp.permission_code='users:create'")[0][0]
assert permission_count == 1
assert backup.stat().st_mode & 0o777 == 0o700
assert (backup / 'im.sql.gz').stat().st_size > 0
assert (backup / 'im.sql.gz').stat().st_mode & 0o777 == 0o600
print(json.dumps({'release': state, 'runningPids': running, 'migrationsRecorded': len(migrations), 'recordCounts': counts, 'testCosAvatars': cos_count, 'superAdminCreateUserPermission': True, 'backupProtected': True}))
finally:
conn.close()