mirror of
https://github.com/whyour/qinglong.git
synced 2026-10-18 18:33:06 +08:00
54 lines
1.8 KiB
JavaScript
54 lines
1.8 KiB
JavaScript
const test = require('node:test');
|
|
const assert = require('node:assert/strict');
|
|
const fs = require('node:fs');
|
|
const os = require('node:os');
|
|
const path = require('node:path');
|
|
const { spawnSync } = require('node:child_process');
|
|
|
|
const startup = fs.readFileSync('shell/start-simplify.sh', 'utf8');
|
|
const preparation = startup.slice(
|
|
startup.indexOf('\nfix_config\n'),
|
|
startup.indexOf('log_with_style "INFO" "$(t \'🔄'),
|
|
);
|
|
for (const fails of [false, true]) {
|
|
test(`manual startup ${
|
|
fails
|
|
? 'stops on certificate failure'
|
|
: 'awaits certificates before starting supervision'
|
|
}`, (t) => {
|
|
const root = fs.mkdtempSync(path.join(os.tmpdir(), 'ql-start-certs-'));
|
|
t.after(() => fs.rmSync(root, { recursive: true, force: true }));
|
|
const module = path.join(root, 'static/build/config/grpcCerts.js');
|
|
fs.mkdirSync(path.dirname(module), { recursive: true });
|
|
fs.writeFileSync(
|
|
module,
|
|
`exports.initGrpcCerts = () => new Promise((resolve, reject) => setTimeout(() => {
|
|
if (process.env.QA_CERT_FAILURE === '1') return reject(new Error('certificate preparation failed'));
|
|
require('node:fs').writeFileSync(require('node:path').join(process.env.QL_DIR, 'certs-ready'), 'ready');
|
|
resolve();
|
|
}, 50));`,
|
|
);
|
|
const result = spawnSync(
|
|
'/bin/bash',
|
|
[
|
|
'-c',
|
|
`set -e
|
|
fix_config(){ :; }
|
|
pm2(){ test -f "$QL_DIR/certs-ready"; touch "$QL_DIR/supervisor-started"; }
|
|
${preparation}`,
|
|
],
|
|
{
|
|
encoding: 'utf8',
|
|
env: {
|
|
...process.env,
|
|
QL_DIR: root,
|
|
QA_CERT_FAILURE: fails ? '1' : '0',
|
|
},
|
|
},
|
|
);
|
|
assert.equal(result.status, fails ? 1 : 0, result.stderr);
|
|
assert.equal(fs.existsSync(path.join(root, 'supervisor-started')), !fails);
|
|
if (fails) assert.match(result.stderr, /certificate preparation failed/);
|
|
});
|
|
}
|