Files
qinglong/packages/ql3-runtime-core/test/remoteWorkerPlacement.test.cjs
T

107 lines
3.6 KiB
JavaScript

const assert = require('node:assert/strict');
const { test } = require('node:test');
const {
canonicalRemoteWorkerCapabilities,
evaluateRemoteWorkerPlacement,
normalizeRemoteWorkerPlacement,
} = require('../dist/remote-execution/remoteWorkerPlacement');
function worker(capabilities) {
const snapshot = canonicalRemoteWorkerCapabilities(capabilities);
return {
workerId: 'worker-arm64',
sessionId: '01944c19-7c00-7000-8000-000000000001',
generation: 1,
status: 'online',
version: 0,
capabilitiesJson: snapshot.json,
capabilitiesHash: snapshot.hash,
maxConcurrentRuns: 2,
availableSlots: 1,
registeredAtMs: 100,
lastHeartbeatAtMs: 200,
leaseExpiresAtMs: 10_000,
updatedAtMs: 200,
};
}
test('uses pinned SemVer for remote runtime range admission', () => {
const placement = normalizeRemoteWorkerPlacement({
required: {
architectures: ['arm64'],
runtimes: [{ name: 'node', versionRange: '>=24.18.0 <25' }],
},
});
const candidate = worker({
architecture: 'arm64',
executors: ['remote-worker'],
protocolVersion: '1.0.0',
supportTier: 'tier1',
runtimes: [{ name: 'node', version: '24.18.0' }],
});
assert.deepEqual(evaluateRemoteWorkerPlacement(candidate, placement, 500), {
matches: true,
score: 0,
mismatches: [],
});
assert.throws(
() =>
normalizeRemoteWorkerPlacement({
required: {
runtimes: [{ name: 'node', versionRange: 'not-a-range' }],
},
}),
/versionRange is not semver/,
);
});
test('defaults to Tier 1 protocol v1 and requires explicit legacy placement', () => {
const legacy = worker({
architecture: 'arm/v6', executors: ['remote-worker'],
protocolVersion: '1.0.0', supportTier: 'legacy-only',
});
assert.deepEqual(evaluateRemoteWorkerPlacement(legacy, {}, 500), {
matches: false, score: 0, mismatches: ['support_tier'],
});
assert.deepEqual(evaluateRemoteWorkerPlacement(
legacy, { required: { supportTiers: ['legacy-only'] } }, 500,
), { matches: true, score: 0, mismatches: [] });
const incompatible = worker({
architecture: 'arm64', executors: ['remote-worker'],
protocolVersion: '2.0.0', supportTier: 'tier1',
});
assert.deepEqual(evaluateRemoteWorkerPlacement(incompatible, {}, 500), {
matches: false, score: 0, mismatches: ['protocol_version'],
});
});
test('rejects unversioned capabilities and unknown support policy', () => {
assert.throws(() => canonicalRemoteWorkerCapabilities({
architecture: 'arm64', executors: ['remote-worker'],
}), /shape is invalid/);
assert.throws(() => normalizeRemoteWorkerPlacement({
required: { supportTiers: ['unsupported'] },
}), /supportTier is unknown/);
assert.throws(() => normalizeRemoteWorkerPlacement({
required: { protocolVersionRange: 'not-a-range' },
}), /protocolVersionRange is not semver/);
assert.throws(() => canonicalRemoteWorkerCapabilities({
architecture: 'arm/v7', executors: ['remote-worker'],
protocolVersion: '1.0.0', supportTier: 'tier1',
}), /does not belong to supportTier/);
});
test('keeps Worker architecture tiers aligned with the release identity', () => {
const { REMOTE_WORKER_ARCHITECTURES_BY_SUPPORT_TIER } =
require('../dist/remote-execution/remoteWorkerCompatibility');
const release = require('../../../ql3-release.json');
assert.deepEqual(REMOTE_WORKER_ARCHITECTURES_BY_SUPPORT_TIER, {
tier1: release.architectureSupport.tier1,
candidate: release.architectureSupport.candidates,
experimental: release.architectureSupport.experimentalBlocked,
'legacy-only': release.architectureSupport.legacyOnly,
});
});