forked from wangziqi/gongxue-base
63 lines
1.8 KiB
JavaScript
63 lines
1.8 KiB
JavaScript
import assert from 'node:assert/strict';
|
|
import http from 'node:http';
|
|
import { runRemoteTenantCorsSmoke } from './remote-tenant-cors-smoke.js';
|
|
|
|
const origins = {
|
|
active: 'https://active.gongxue100.test',
|
|
disabled: 'https://disabled.gongxue100.test',
|
|
unknown: 'https://unknown.gongxue100.test',
|
|
};
|
|
|
|
function json(res, status, payload, headers = {}) {
|
|
res.writeHead(status, { 'content-type': 'application/json', ...headers });
|
|
res.end(JSON.stringify(payload));
|
|
}
|
|
|
|
const server = http.createServer((req, res) => {
|
|
const origin = req.headers.origin || '';
|
|
if (req.url === '/health' && req.method === 'GET' && !origin) {
|
|
json(res, 200, { ok: true });
|
|
return;
|
|
}
|
|
if (req.method === 'OPTIONS' && req.url === '/api/tenant/resolve') {
|
|
if (origin === origins.active) {
|
|
res.writeHead(204, {
|
|
'access-control-allow-origin': origin,
|
|
'access-control-allow-methods': 'GET,POST,OPTIONS',
|
|
vary: 'Origin',
|
|
});
|
|
res.end();
|
|
return;
|
|
}
|
|
json(res, 403, { code: 'CORS_ORIGIN_DENIED' });
|
|
return;
|
|
}
|
|
json(res, 404, { code: 'NOT_FOUND' });
|
|
});
|
|
|
|
await new Promise(resolve => server.listen(0, '127.0.0.1', resolve));
|
|
try {
|
|
const address = server.address();
|
|
const summary = await runRemoteTenantCorsSmoke(
|
|
{
|
|
apiBaseUrl: `http://127.0.0.1:${address.port}`,
|
|
activeOrigin: origins.active,
|
|
disabledOrigin: origins.disabled,
|
|
unknownOrigin: origins.unknown,
|
|
timeoutMs: 5_000,
|
|
},
|
|
{ quiet: true },
|
|
);
|
|
assert.deepEqual(summary, {
|
|
failed: 0,
|
|
activeTenantOriginAllowed: true,
|
|
unknownOriginDenied: true,
|
|
disabledOriginDenied: true,
|
|
noOriginHealthAllowed: true,
|
|
statuses: { active: 204, disabled: 403, unknown: 403, health: 200 },
|
|
});
|
|
console.log('[PASS] remote dynamic tenant CORS smoke script');
|
|
} finally {
|
|
await new Promise(resolve => server.close(resolve));
|
|
}
|