98 lines
3.6 KiB
TypeScript
98 lines
3.6 KiB
TypeScript
|
|
import { describe, it } from 'node:test';
|
||
|
|
import { strict as assert } from 'node:assert';
|
||
|
|
import * as fs from 'node:fs';
|
||
|
|
import * as os from 'node:os';
|
||
|
|
import * as path from 'node:path';
|
||
|
|
|
||
|
|
import {
|
||
|
|
resolveNatsBinary,
|
||
|
|
resolveRunnerTransportPlan,
|
||
|
|
} from '../../src/utils/runner-transport.js';
|
||
|
|
import type { ILoadedMatrixPackageEnvironment } from '../../src/utils/package-environment.js';
|
||
|
|
|
||
|
|
function createLoadedEnvironment(
|
||
|
|
packageDir: string,
|
||
|
|
envName: string,
|
||
|
|
environment: ILoadedMatrixPackageEnvironment['environment'],
|
||
|
|
): ILoadedMatrixPackageEnvironment {
|
||
|
|
return {
|
||
|
|
packageDir,
|
||
|
|
envName,
|
||
|
|
environmentPath: path.join(packageDir, '.matrix', `${envName}.environment.json`),
|
||
|
|
environment,
|
||
|
|
};
|
||
|
|
}
|
||
|
|
|
||
|
|
describe('runner transport resolution', () => {
|
||
|
|
it('prefers environment-owned embedded NATS paths over shared defaults', () => {
|
||
|
|
const packageDir = fs.mkdtempSync(path.join(os.tmpdir(), 'mx-runner-embedded-'));
|
||
|
|
const loaded = createLoadedEnvironment(packageDir, 'dev', {
|
||
|
|
name: 'dev',
|
||
|
|
runtime: { root: 'COM.TEST.EMBEDDED' },
|
||
|
|
nats: {
|
||
|
|
mode: 'embedded',
|
||
|
|
port: 5111,
|
||
|
|
wsPort: 5112,
|
||
|
|
binaryPath: './tools/nats-server-custom',
|
||
|
|
dataDir: './runtime-state/nats-data',
|
||
|
|
pidFile: './runtime-state/nats.pid',
|
||
|
|
},
|
||
|
|
});
|
||
|
|
|
||
|
|
const plan = resolveRunnerTransportPlan(packageDir, loaded);
|
||
|
|
|
||
|
|
assert.equal(plan.mode, 'embedded');
|
||
|
|
assert.equal(plan.root, 'COM.TEST.EMBEDDED');
|
||
|
|
assert.equal(plan.url, 'nats://127.0.0.1:5111');
|
||
|
|
assert.equal(plan.wsUrl, 'ws://127.0.0.1:5112');
|
||
|
|
assert.equal(plan.binaryPath, path.join(packageDir, 'tools', 'nats-server-custom'));
|
||
|
|
assert.equal(plan.dataDir, path.join(packageDir, 'runtime-state', 'nats-data'));
|
||
|
|
assert.equal(plan.pidFile, path.join(packageDir, 'runtime-state', 'nats.pid'));
|
||
|
|
});
|
||
|
|
|
||
|
|
it('uses MATRIX_NATS_SERVER_BINARY before shared repo fallbacks', () => {
|
||
|
|
const packageDir = fs.mkdtempSync(path.join(os.tmpdir(), 'mx-runner-envbinary-'));
|
||
|
|
const fakeBinary = path.join(packageDir, 'custom-bin', 'nats-server');
|
||
|
|
fs.mkdirSync(path.dirname(fakeBinary), { recursive: true });
|
||
|
|
fs.writeFileSync(fakeBinary, '', 'utf8');
|
||
|
|
|
||
|
|
const original = process.env.MATRIX_NATS_SERVER_BINARY;
|
||
|
|
process.env.MATRIX_NATS_SERVER_BINARY = fakeBinary;
|
||
|
|
try {
|
||
|
|
const resolved = resolveNatsBinary(packageDir);
|
||
|
|
assert.equal(resolved, fakeBinary);
|
||
|
|
} finally {
|
||
|
|
if (original === undefined) {
|
||
|
|
delete process.env.MATRIX_NATS_SERVER_BINARY;
|
||
|
|
} else {
|
||
|
|
process.env.MATRIX_NATS_SERVER_BINARY = original;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
it('resolves external NATS environments without inventing embedded state', () => {
|
||
|
|
const packageDir = fs.mkdtempSync(path.join(os.tmpdir(), 'mx-runner-external-'));
|
||
|
|
const loaded = createLoadedEnvironment(packageDir, 'integration', {
|
||
|
|
name: 'integration',
|
||
|
|
runtime: { root: 'COM.TEST.EXTERNAL' },
|
||
|
|
nats: {
|
||
|
|
mode: 'external',
|
||
|
|
url: 'nats://example.net:4229',
|
||
|
|
wsUrl: 'wss://example.net/nats-ws',
|
||
|
|
credentialsRef: 'file:~/.matrix/credentials.json',
|
||
|
|
},
|
||
|
|
});
|
||
|
|
|
||
|
|
const plan = resolveRunnerTransportPlan(packageDir, loaded, 'COM.TEST.EXTERNAL.OVERRIDE');
|
||
|
|
|
||
|
|
assert.equal(plan.mode, 'external');
|
||
|
|
assert.equal(plan.root, 'COM.TEST.EXTERNAL.OVERRIDE');
|
||
|
|
assert.equal(plan.url, 'nats://example.net:4229');
|
||
|
|
assert.equal(plan.wsUrl, 'wss://example.net/nats-ws');
|
||
|
|
assert.equal(plan.credentialsRef, 'file:~/.matrix/credentials.json');
|
||
|
|
assert.equal('binaryPath' in plan, false);
|
||
|
|
assert.equal('dataDir' in plan, false);
|
||
|
|
assert.equal('pidFile' in plan, false);
|
||
|
|
});
|
||
|
|
});
|