Files
MoonBridge/testing/smoke/permission-network.cjs
T
layue13andClaude Opus 5.5 afea023bce build: 代理发行包改为单个可运行的 moonbridge.jar
发行包去掉 bin/ 启动脚本和 lib/ 下的 42 个依赖 jar,改为与其他代理服务端一样
用 java -jar moonbridge.jar 启动:
- proxy-core 用 shadow 打出含全部依赖的 moonbridge.jar(合并 META-INF/services,
  清单写入 Main-Class、Multi-Release 与 Enable-Native-Access: ALL-UNNAMED)
- 泄漏检测默认关闭改由 ProxyMain 在加载 Netty 前设置,显式 -D 仍优先
- 移除不再使用的 application 约定插件
- 安装包检查、烟测与基准脚本改用发行包根目录作 classpath;文档同步

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 15:00:14 +08:00

40 lines
2.6 KiB
JavaScript

// Run after permission-services.cjs start and compiling PermissionNetworkAcceptance.
const fs = require('node:fs');
const path = require('node:path');
const {spawn,spawnSync} = require('node:child_process');
const root = path.resolve(__dirname, '../..');
const mode = process.argv[2];
if (!['sql','redis'].includes(mode)) throw new Error('Usage: node testing/smoke/permission-network.cjs sql|redis [outage]');
const outage = process.argv[3] === 'outage';
const log = fs.createWriteStream(path.join(root,'build',`permission-network-${mode}${outage?'-outage':''}.log`));
const args = ['-cp',`${path.join(root,'proxy/core/build/install/moonbridge/*')}${path.delimiter}${path.join(root,'build/permission-network-classes')}`,
'PermissionNetworkAcceptance','proxy/core/build/install/moonbridge',`build/permission-services/${mode==='sql'?'mariadb':'redis'}-base.yml`,'build/permission-network',mode];
if (outage) args.push('outage');
const child = spawn('java',args,{cwd:root,windowsHide:true,stdio:['pipe','pipe','pipe']});
let pending = '';
child.stderr.on('data',chunk=>log.write(chunk));
child.stdout.on('data',chunk=>{
log.write(chunk); pending+=chunk.toString();
let end;
while ((end=pending.indexOf('\n'))>=0) {
const line=pending.slice(0,end).trim(); pending=pending.slice(end+1);
const request=/^REQUEST_(STOP|START)_(MARIADB|REDIS)$/.exec(line);
if (request) {
const [,verb,kind]=request;
console.log(line);
const action=`${verb==='STOP'?'pause':'resume'}-${kind.toLowerCase()}`;
const result=spawnSync(process.execPath,[path.join(__dirname,'permission-services.cjs'),action],{encoding:'utf8',windowsHide:true});
if (result.status!==0) { console.error(result.stderr); child.kill(); process.exitCode=1; return; }
if (verb==='START' && kind==='REDIS') {
const subscribers=spawnSync(process.execPath,[path.join(__dirname,'permission-services.cjs'),'wait-redis-subscribers'],{encoding:'utf8',windowsHide:true});
if (subscribers.status!==0) { console.error(subscribers.stderr);child.kill();process.exitCode=1;return; }
console.log(subscribers.stdout.trim());
}
child.stdin.write(`${kind}_${verb==='STOP'?'STOPPED':'STARTED'}\n`);
} else if (line.includes('ACCEPTANCE_PASS')) console.log(line);
}
});
const deadline=setTimeout(()=>{console.error('Network acceptance exceeded 10 minutes');child.kill();process.exitCode=1;},600000);
child.on('error',error=>{console.error(error.message);process.exitCode=1;});
child.on('close',(code,signal)=>{clearTimeout(deadline);log.end();console.log(`Network acceptance exit=${code} signal=${signal || 'none'}`);process.exitCode=process.exitCode||(code===0?0:1);});