45 lines
2.2 KiB
Python
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()
|