#!/usr/bin/env php = 3) { DomainRepository::bindConfigToDomain($pdo, 'cfg_one', $ids[2]); DomainRepository::bindConfigToDomain($pdo, 'cfg_two', $ids[2]); } $map = DomainRepository::groupConfigsByDomainId($pdo); vassert('多配置可共用同一域名', count($map[$ids[2]] ?? []) === 2, json_encode($map[$ids[2]] ?? [])); $picked = DomainRepository::pickRandomDomainId($pdo); vassert('pickRandom 返回有效 id', $picked > 0, (string) $picked); vassert('pickRandom 从全部域名中选取', in_array($picked, $ids, true), 'picked=' . $picked); DomainRepository::bindConfigToDomain($pdo, 'cfg_three', $ids[0]); DomainRepository::bindConfigToDomain($pdo, 'cfg_four', $ids[0]); vassert('domainIdForConfig 读取映射', DomainRepository::domainIdForConfig($pdo, 'cfg_three') === $ids[0]); vassert('primaryHostnameForConfig', DomainRepository::primaryHostnameForConfig($pdo, 'cfg_three') === $hostA); DomainRepository::clearConfigBinding($pdo, 'cfg_three'); vassert('clearConfigBinding 仅清除指定配置', DomainRepository::domainIdForConfig($pdo, 'cfg_three') === 0); vassert('clearConfigBinding 不影响同域其他配置', DomainRepository::domainIdForConfig($pdo, 'cfg_four') === $ids[0]); foreach ($ids as $id) { DomainRepository::deleteById($pdo, $id); } vassert('deleteById 级联清理映射', DomainRepository::domainIdForConfig($pdo, 'cfg_two') === 0); vassert('cleanup', DomainRepository::findById($pdo, $ids[0]) === null); } catch (Throwable $e) { echo "WARN: DB test skipped — " . $e->getMessage() . "\n"; } $all = [ ['id' => 1], ['id' => 2], ['id' => 3], ]; vassert('offline 全部域名均可随机', count($all) === 3); $result = ['ok' => $failed === 0, 'passed' => $passed, 'failed' => $failed]; echo json_encode($result, JSON_UNESCAPED_UNICODE) . "\n"; exit($failed > 0 ? 1 : 0);