Files
qinglong/packages/ql3-local-api/test/config.test.cjs
T

45 lines
1.4 KiB
JavaScript

const assert = require('node:assert/strict');
const { test } = require('node:test');
const {
LOCAL_API_PROCESS_CONFIG_SCHEMA,
LocalApiProcessConfigError,
normalizeLocalApiProcessConfig,
} = require('../dist/production-process/config.js');
function candidate(overrides = {}) {
return {
schema: LOCAL_API_PROCESS_CONFIG_SCHEMA,
deploymentRoot: '/srv/qinglong',
applicationConfigFilePath: '/srv/qinglong/private/application.json',
ownerPepperKeyringDirectory: '/srv/qinglong/private/owner-pepper',
listener: { host: '127.0.0.1', port: 5701 },
...overrides,
};
}
test('normalizes one exact loopback-only Local API process configuration', () => {
assert.deepEqual(normalizeLocalApiProcessConfig(candidate()), candidate());
assert.deepEqual(
normalizeLocalApiProcessConfig(
candidate({ listener: { host: '::1', port: 65535 } }),
).listener,
{ host: '::1', port: 65535 },
);
});
test('rejects remote listeners, privileged ports and path authority escapes', () => {
for (const value of [
candidate({ listener: { host: '0.0.0.0', port: 5701 } }),
candidate({ listener: { host: '127.0.0.1', port: 80 } }),
candidate({ applicationConfigFilePath: '/srv/application.json' }),
candidate({ ownerPepperKeyringDirectory: '/srv/qinglong' }),
{ ...candidate(), unexpected: true },
]) {
assert.throws(
() => normalizeLocalApiProcessConfig(value),
LocalApiProcessConfigError,
);
}
});