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

69 lines
2.0 KiB
JavaScript

const assert = require('node:assert/strict');
const { test } = require('node:test');
const {
assertAcknowledgeRemoteRunRunningCommand,
assertAcknowledgeRemoteRunStartingCommand,
assertFailRemoteRunStartCommand,
} = require('@qinglong/runtime-core/remote-activation');
const SESSION_ID = '018f5c64-9b9d-7f1a-8c2d-1234567890ac';
const EVENT_A = '018f5c64-9b9d-7f1a-8c2d-1234567890a1';
const EVENT_B = '018f5c64-9b9d-7f1a-8c2d-1234567890a2';
function fence() {
return {
runId: 'run-1',
attemptId: 'attempt-1',
workerId: 'edge-1',
workerSessionId: SESSION_ID,
workerGeneration: 2,
offerId: 'offer-1',
leaseGeneration: 3,
leaseToken: 'worker_generated_lease_capability_0000000000000001',
expectedLeaseVersion: 4,
};
}
test('validates starting, running and start-failure activation commands', () => {
assert.doesNotThrow(() => assertAcknowledgeRemoteRunStartingCommand({
...fence(), eventId: EVENT_A,
}));
assert.doesNotThrow(() => assertAcknowledgeRemoteRunRunningCommand({
...fence(),
attemptEventId: EVENT_A,
runEventId: EVENT_B,
executorHandle: 'remote:handle-1',
logArtifactId: 'artifact-1',
callbackSequence: 1,
callbackTokenDigest: 'a'.repeat(64),
}));
assert.doesNotThrow(() => assertFailRemoteRunStartCommand({
...fence(), attemptEventId: EVENT_A, runEventId: EVENT_B,
}));
});
test('rejects unbounded handles and malformed callback digests', () => {
assert.throws(
() => assertAcknowledgeRemoteRunRunningCommand({
...fence(),
attemptEventId: EVENT_A,
runEventId: EVENT_B,
executorHandle: 'x'.repeat(513),
callbackSequence: 1,
callbackTokenDigest: 'a'.repeat(64),
}),
/executorHandle/,
);
assert.throws(
() => assertAcknowledgeRemoteRunRunningCommand({
...fence(),
attemptEventId: EVENT_A,
runEventId: EVENT_B,
executorHandle: 'remote:handle-1',
callbackSequence: 1,
callbackTokenDigest: 'A'.repeat(64),
}),
/callbackTokenDigest/,
);
});