98 lines
3.6 KiB
TypeScript
Raw Normal View History

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);
});
});