Files
qinglong/test/back/ql3LinuxResourceGate.test.cjs

456 lines
14 KiB
JavaScript

const assert = require('node:assert/strict');
const { test } = require('node:test');
const {
RESOURCE_TIERS,
createWorkloadPlans,
isPathTreeReadOnly,
mountOptionsForPath,
parseArguments,
parseCpuMax,
parseKeyValueFile,
parseLimit,
parseMountOptions,
parseNodeTestReport,
validateEnvelope,
} = require('../../scripts/ql3-linux-resource-gate.cjs');
function envelopeFor(tierName) {
const tier = RESOURCE_TIERS[tierName];
return {
memoryMaxBytes: tier.memoryMaxBytes,
memoryPeakBytes: 64 * 1024 * 1024,
swapMaxBytes: tier.swapMaxBytes,
cpuQuotaCores: tier.cpuQuotaCores,
pidsMax: tier.pidsMax,
noNewPrivileges: 1,
seccompMode: 2,
mounts: new Map([
['/', ['ro', 'relatime']],
['/workspace', ['ro', 'nodev']],
['/tmp', ['rw', 'nosuid', 'nodev']],
]),
};
}
test('defines separate router stress, edge release and cluster control envelopes', () => {
assert.deepEqual(Object.keys(RESOURCE_TIERS), [
'router-stress-ci',
'edge-release-ci',
'cluster-control-ci',
]);
assert.equal(RESOURCE_TIERS['router-stress-ci'].supportedMinimum, false);
assert.equal(
RESOURCE_TIERS['router-stress-ci'].memoryMaxBytes,
128 * 1024 * 1024,
);
assert.equal(
RESOURCE_TIERS['edge-release-ci'].memoryMaxBytes,
256 * 1024 * 1024,
);
assert.equal(
RESOURCE_TIERS['cluster-control-ci'].memoryMaxBytes,
512 * 1024 * 1024,
);
assert.notEqual(
RESOURCE_TIERS['router-stress-ci'].workload,
RESOURCE_TIERS['cluster-control-ci'].workload,
);
});
test('parses bounded cgroup v2 and mount evidence', () => {
assert.equal(parseLimit('134217728\n', 'memory.max'), 134217728);
assert.equal(parseLimit('max\n', 'memory.max'), Number.POSITIVE_INFINITY);
assert.equal(parseCpuMax('50000 100000\n'), 0.5);
assert.deepEqual(parseKeyValueFile('oom 0\noom_kill 1\n', 'events'), {
oom: 0,
oom_kill: 1,
});
const mounts = parseMountOptions(
'overlay / overlay ro,relatime 0 0\ntmpfs /tmp tmpfs rw,nosuid,nodev 0 0\nsource /workspace fakeowner ro,nodev 0 0\n',
);
assert.deepEqual(mounts.get('/'), ['ro', 'relatime']);
assert.deepEqual(mounts.get('/tmp'), ['rw', 'nosuid', 'nodev']);
assert.deepEqual(mounts.get('/workspace'), ['ro', 'nodev']);
assert.deepEqual(mountOptionsForPath(mounts, '/workspace/cache'), [
'ro',
'nodev',
]);
assert.equal(isPathTreeReadOnly(mounts, '/workspace'), true);
});
test('fails open hosts, root execution and a widened resource envelope', () => {
const valid = envelopeFor('router-stress-ci');
assert.deepEqual(
validateEnvelope('router-stress-ci', valid, {
platform: 'linux',
architecture: 'arm64',
uid: 65532,
}),
[],
);
const inheritedWorkspace = {
...valid,
mounts: new Map([
['/', ['ro']],
['/tmp', ['rw']],
]),
};
assert.deepEqual(
validateEnvelope('router-stress-ci', inheritedWorkspace, {
platform: 'linux',
architecture: 'arm64',
uid: 65532,
}),
[],
);
assert.equal(
isPathTreeReadOnly(
new Map([
['/', ['ro']],
['/workspace/cache', ['rw']],
]),
'/workspace',
),
false,
);
const widened = {
...valid,
memoryMaxBytes: 256 * 1024 * 1024,
mounts: new Map([
['/', ['rw']],
['/workspace', ['rw']],
['/tmp', ['rw']],
]),
};
assert.deepEqual(
validateEnvelope('router-stress-ci', widened, {
platform: 'darwin',
architecture: 'arm64',
uid: 0,
}),
[
'memory.max 268435456 did not equal 134217728',
'platform darwin is not linux',
'resource workload must be non-root',
'/ must be mounted read-only',
'/workspace must be mounted read-only',
],
);
});
test('builds tier-specific workload plans without shell commands', () => {
const edge = createWorkloadPlans('/workspace', 'router-stress-ci');
assert.deepEqual(
edge.map(({ name }) => name),
[
'edge-executor',
'node-sqlite',
'local-workflow-product',
'local-workflow-sqlite-lock',
'plugin-package-failed-upgrade',
'legacy-shadow-terminal-edge',
],
);
assert.match(edge[0].script, /ql3-edge-benchmark\.cjs$/);
assert.ok(edge[0].args.includes('--max-rss-delta-mb=64'));
const edgeShadow = edge.find(
({ name }) => name === 'legacy-shadow-terminal-edge',
);
assert.match(edgeShadow.script, /ql3-legacy-shadow-resource-rollback\.cjs$/);
assert.ok(edgeShadow.args.includes('--profile=edge'));
assert.ok(edgeShadow.args.includes('--mode=audit-only'));
assert.ok(edgeShadow.args.includes('--samples=8'));
const edgeWorkflow = edge.find(
({ name }) => name === 'local-workflow-product',
);
assert.equal(edgeWorkflow.format, 'node_test');
assert.ok(
edgeWorkflow.nodeArgs.some((argument) =>
/ql3-local-application\/test\/activation\.test\.cjs$/.test(argument),
),
);
assert.equal(edgeWorkflow.maxProcessRssBytes, 96 * 1024 * 1024);
assert.equal(edgeWorkflow.contract, undefined);
assert.equal(
edgeWorkflow.nodeArgs.includes(
'--test-name-pattern=executes one admitted Workflow',
),
true,
);
const edgeRelease = createWorkloadPlans('/workspace', 'edge-release-ci');
assert.deepEqual(
edgeRelease.map(({ name }) => name),
[
'edge-executor',
'node-sqlite',
'local-workflow-product',
'local-ai-prompt-durable-output-edge',
'local-ai-prompt-durable-output-standalone',
'local-workflow-sqlite-lock',
'local-workflow-admission-crash-recovery',
'local-workflow-control-crash-recovery',
'local-ai-prompt-model-invocation-crash-recovery',
'local-ai-prompt-outer-transaction-crash-recovery',
'plugin-package-failed-upgrade',
'legacy-shadow-terminal-edge',
'legacy-shadow-terminal-standalone',
],
);
const releaseWorkflow = edgeRelease.find(
({ name }) => name === 'local-workflow-product',
);
assert.equal(
releaseWorkflow.nodeArgs.includes(
'--test-name-pattern=executes one admitted Workflow|stops one running Workflow Task',
),
true,
);
assert.deepEqual(releaseWorkflow.contract, {
kind: 'local_workflow_product_lifecycle',
profile: 'edge',
completedWorkflowSteps: 2,
completedAttempts: 2,
cancelCommandStatus: 'accepted',
exactReplay: true,
processIdentityObserved: true,
processExited: true,
parentRunStatus: 'cancelled',
attemptStatus: 'cancelled',
cancelledStepRuns: 2,
cancelEvents: 1,
cancelAudits: 1,
physicalPowerLossProven: false,
});
const releaseEdgeShadow = edgeRelease.find(
({ name }) => name === 'legacy-shadow-terminal-edge',
);
const releaseStandaloneShadow = edgeRelease.find(
({ name }) => name === 'legacy-shadow-terminal-standalone',
);
assert.ok(releaseEdgeShadow.args.includes('--mode=full'));
assert.ok(releaseStandaloneShadow.args.includes('--profile=standalone'));
assert.ok(releaseStandaloneShadow.args.includes('--mode=audit-only'));
const edgePrompt = edgeRelease.find(
({ name }) => name === 'local-ai-prompt-durable-output-edge',
);
const standalonePrompt = edgeRelease.find(
({ name }) => name === 'local-ai-prompt-durable-output-standalone',
);
assert.equal(edgePrompt.maxProcessRssBytes, 192 * 1024 * 1024);
assert.deepEqual(edgePrompt.env, {
QL3_PROMPT_RESOURCE_PROFILE: 'edge',
QL3_PROMPT_RESOURCE_OUTPUT_BYTES: String(512 * 1024),
});
assert.equal(edgePrompt.contract.providerCalls, 2);
assert.equal(edgePrompt.contract.keyLoads, 1);
assert.equal(edgePrompt.contract.keyResolutions, 2);
assert.equal(edgePrompt.contract.exactReplay, true);
assert.equal(edgePrompt.contract.contentFree, true);
assert.equal(edgePrompt.contract.durableOutputBytes, 512 * 1024);
assert.equal(edgePrompt.contract.maxWalWriteAmplificationPermille, 0);
assert.equal(standalonePrompt.contract.profile, 'standalone');
assert.equal(standalonePrompt.contract.journalMode, 'wal');
assert.equal(standalonePrompt.contract.requireWalGrowth, true);
const workflowLock = edge.find(
({ name }) => name === 'local-workflow-sqlite-lock',
);
assert.match(
workflowLock.script,
/ql3-local-workflow-resource-benchmark\.cjs$/,
);
assert.ok(workflowLock.args.includes('--lock-samples=16'));
assert.ok(workflowLock.args.includes('--max-lock-p95-ms=500'));
const releaseAdmissionCrash = edgeRelease.find(
({ name }) => name === 'local-workflow-admission-crash-recovery',
);
const releaseControlCrash = edgeRelease.find(
({ name }) => name === 'local-workflow-control-crash-recovery',
);
assert.equal(releaseAdmissionCrash.env, undefined);
assert.deepEqual(releaseAdmissionCrash.contract.profiles, [
'edge',
'standalone',
]);
assert.equal(releaseAdmissionCrash.contract.scenarios, 16);
assert.equal(releaseControlCrash.env, undefined);
assert.deepEqual(releaseControlCrash.contract.profiles, [
'edge',
'standalone',
]);
assert.equal(releaseControlCrash.contract.scenarios, 16);
const modelCrash = edgeRelease.find(
({ name }) => name === 'local-ai-prompt-model-invocation-crash-recovery',
);
const transactionCrash = edgeRelease.find(
({ name }) => name === 'local-ai-prompt-outer-transaction-crash-recovery',
);
assert.equal(modelCrash.contract.scenarios, 14);
assert.deepEqual(modelCrash.contract.boundaries, [
'model_start',
'model_completion',
]);
assert.equal(modelCrash.contract.physicalPowerLossProven, false);
assert.equal(transactionCrash.contract.scenarios, 20);
assert.deepEqual(transactionCrash.contract.operations, [
'admission',
'finalization',
]);
assert.equal(transactionCrash.contract.exactReplay, true);
assert.equal(transactionCrash.contract.contentFree, true);
assert.equal(
transactionCrash.contract.promptAdmissionFinalizationCrashProven,
true,
);
assert.equal(transactionCrash.contract.physicalPowerLossProven, false);
const edgeUpgrade = edge.find(
({ name }) => name === 'plugin-package-failed-upgrade',
);
const releaseUpgrade = edgeRelease.find(
({ name }) => name === 'plugin-package-failed-upgrade',
);
assert.match(
edgeUpgrade.script,
/ql3-plugin-package-recovery-edge-benchmark\.cjs$/,
);
assert.ok(edgeUpgrade.args.includes('--max-rss-delta-mb=64'));
assert.ok(releaseUpgrade.args.includes('--max-rss-delta-mb=96'));
const cluster = createWorkloadPlans('/workspace', 'cluster-control-ci');
assert.deepEqual(
cluster.map(({ name }) => name),
['cluster-control'],
);
assert.match(cluster[0].script, /ql3-cluster-control-benchmark\.cjs$/);
});
test('rejects unknown tiers and architecture labels', () => {
assert.deepEqual(
parseArguments(['--tier=edge-release-ci', '--expected-arch=x64', '--json']),
{ tier: 'edge-release-ci', expectedArch: 'x64', json: true },
);
assert.throws(
() => parseArguments(['--tier=router']),
/--tier must be one of/,
);
assert.throws(
() => parseArguments(['--tier=router-stress-ci', '--expected-arch=arm']),
/--expected-arch must be x64 or arm64/,
);
});
test('fails closed when durable Prompt resource evidence drifts', () => {
const [edgePlan, standalonePlan] = createWorkloadPlans(
'/workspace',
'edge-release-ci',
).filter(
({ contract }) => contract?.kind === 'durable_prompt_output_resource',
);
const evidence = {
profile: 'edge',
journalMode: 'delete',
durableOutputBytes: 512 * 1024,
providerCalls: 2,
keyLoads: 1,
keyResolutions: 2,
liveOnlyKeyLoads: 0,
exactReplay: true,
contentFree: true,
durableFacts: { attempts: 0 },
peakProcessRssBytes: 100 * 1024 * 1024,
databaseLogicalWriteAmplificationPermille: 1_383,
databaseAllocatedWriteAmplificationPermille: 1_383,
walWriteAmplificationPermille: 0,
walGrowthBytes: 0,
physicalPowerLossProven: false,
};
const output = (value) =>
`tests 1\npass 1\nfail 0\nskipped 0\nQL3_RESOURCE_EVIDENCE=${JSON.stringify(
value,
)}\n`;
assert.equal(
parseNodeTestReport(output(evidence), edgePlan).evidence.profile,
'edge',
);
assert.throws(
() =>
parseNodeTestReport(
output({
...evidence,
databaseLogicalWriteAmplificationPermille: 3_001,
}),
edgePlan,
),
/durable Prompt output evidence violated its contract/,
);
assert.throws(
() =>
parseNodeTestReport(
output({
...evidence,
profile: 'standalone',
journalMode: 'wal',
walWriteAmplificationPermille: 0,
walGrowthBytes: 0,
}),
standalonePlan,
),
/durable Prompt output evidence violated its contract/,
);
});
test('fails closed when authenticated Workflow cancellation evidence drifts', () => {
const plan = createWorkloadPlans('/workspace', 'edge-release-ci').find(
({ contract }) => contract?.kind === 'local_workflow_product_lifecycle',
);
assert.ok(plan);
const completionEvidence = {
schemaVersion: 1,
profile: 'edge',
workflowSteps: 2,
attempts: 2,
peakProcessRssBytes: 79 * 1024 * 1024,
};
const cancellationEvidence = {
schemaVersion: 1,
profile: 'edge',
cancelCommandStatus: 'accepted',
exactReplay: true,
processIdentityObserved: true,
processExited: true,
parentRunStatus: 'cancelled',
attemptStatus: 'cancelled',
cancelledStepRuns: 2,
cancelEvents: 1,
cancelAudits: 1,
peakProcessRssBytes: 80 * 1024 * 1024,
physicalPowerLossProven: false,
};
const output = (value) =>
`tests 2\npass 2\nfail 0\nskipped 0\nQL3_RESOURCE_EVIDENCE=${JSON.stringify(
completionEvidence,
)}\nQL3_RESOURCE_EVIDENCE=${JSON.stringify(value)}\n`;
assert.equal(
parseNodeTestReport(output(cancellationEvidence), plan).evidenceRecords[1]
.processExited,
true,
);
assert.throws(
() =>
parseNodeTestReport(
output({ ...cancellationEvidence, cancelAudits: 0 }),
plan,
),
/local Workflow cancellation evidence violated its contract/,
);
assert.throws(
() =>
parseNodeTestReport(
output({
...cancellationEvidence,
peakProcessRssBytes: 161 * 1024 * 1024,
}),
plan,
),
/process RSS exceeded its tier budget/,
);
});