Files
qinglong/packages/ql3-cluster-control/test/copilotFailureDiagnosisRoute.test.cjs
T

270 lines
7.9 KiB
JavaScript

const assert = require('node:assert/strict');
const { test } = require('node:test');
const {
CLUSTER_COPILOT_FAILURE_DIAGNOSIS_REQUEST_SCHEMA,
CLUSTER_COPILOT_FAILURE_DIAGNOSIS_RESPONSE_SCHEMA,
CLUSTER_CONTROL_COPILOT_FAILURE_DIAGNOSIS_ROUTE,
createClusterControlCopilotFailureDiagnosisRoute,
} = require('@qinglong/cluster-control/copilot-routes');
function authorized(body, overrides = {}) {
return {
request: {
requestId: 'diagnosis-request-1',
method: 'POST',
path: '/api/v3/projects/project-1/runs/source-run-1/copilot/failure-diagnoses',
query: {},
headers: {},
signal: new AbortController().signal,
body,
},
principal: {
subject: { type: 'api_app', id: 'app-1' },
authenticationId: 'credential-1',
authenticatedAtMs: 1,
expiresAtMs: 10_000,
assurance: 'service',
},
operationId: 'copilot.failure_diagnosis.execute',
permission: 'model.invoke',
projectId: 'project-1',
policyFence: { projectVersion: 3, bindingVersion: 7 },
...overrides,
};
}
function body(overrides = {}) {
return {
schema: CLUSTER_COPILOT_FAILURE_DIAGNOSIS_REQUEST_SCHEMA,
traceId: 'trace-1',
...overrides,
};
}
function succeeded(admissionStatus = 'created') {
return {
admissionStatus,
admission: {
requestId: 'diagnosis-request-1',
runId: 'diagnosis-run-1',
sourceRunId: 'source-run-1',
},
tool: { outcome: 'succeeded', output: { private: 'must not cross' } },
model: {
outcome: 'succeeded',
output: {
artifactId: 'cdo:artifact-1',
artifactDigest: 'a'.repeat(64),
provider: 'private-provider',
},
plaintext: 'private diagnosis',
},
terminalization: null,
terminalizationRequired: false,
};
}
test('defines one exact model.invoke route and binds HTTP request identity', async () => {
let command;
const route = createClusterControlCopilotFailureDiagnosisRoute({
async execute(value) {
command = value;
return succeeded();
},
});
const request = authorized(body());
const result = await route.handle(request, {
projectId: 'project-1',
runId: 'source-run-1',
});
assert.deepEqual(CLUSTER_CONTROL_COPILOT_FAILURE_DIAGNOSIS_ROUTE, {
method: 'POST',
path: '/api/v3/projects/{projectId}/runs/{runId}/copilot/failure-diagnoses',
operationId: 'copilot.failure_diagnosis.execute',
permission: 'model.invoke',
projectParameter: 'projectId',
});
assert.deepEqual(command, {
requestId: 'diagnosis-request-1',
traceId: 'trace-1',
projectId: 'project-1',
sourceRunId: 'source-run-1',
principal: request.principal,
});
assert.equal('policyFence' in command, false);
assert.equal('model' in command, false);
assert.equal('attemptId' in command, false);
assert.equal(result.statusCode, 201);
assert.deepEqual(result.body, {
schema: CLUSTER_COPILOT_FAILURE_DIAGNOSIS_RESPONSE_SCHEMA,
requestId: 'diagnosis-request-1',
status: 'created',
replayed: false,
sourceRunId: 'source-run-1',
diagnosisRunId: 'diagnosis-run-1',
outcome: 'succeeded',
stage: 'model',
reason: null,
outputArtifact: {
artifactId: 'cdo:artifact-1',
artifactDigest: 'a'.repeat(64),
},
});
assert.equal(JSON.stringify(result).includes('private'), false);
});
test('returns a content-free existing receipt for exact replay', async () => {
const route = createClusterControlCopilotFailureDiagnosisRoute({
async execute() {
return succeeded('existing');
},
});
const result = await route.handle(authorized(body()), {
projectId: 'project-1',
runId: 'source-run-1',
});
assert.equal(result.statusCode, 200);
assert.equal(result.body.status, 'existing');
assert.equal(result.body.replayed, true);
});
test('projects pre-Model terminalization without Tool or log content', async () => {
const route = createClusterControlCopilotFailureDiagnosisRoute({
async execute() {
return {
admissionStatus: 'created',
admission: {
requestId: 'diagnosis-request-1',
runId: 'diagnosis-run-1',
sourceRunId: 'source-run-1',
},
tool: { outcome: 'failed', privateLog: 'must not cross' },
model: null,
terminalization: {
stage: 'log',
reason: 'log_retired',
outcome: 'failed',
privateEvidence: 'must not cross',
},
terminalizationRequired: false,
};
},
});
const result = await route.handle(authorized(body()), {
projectId: 'project-1',
runId: 'source-run-1',
});
assert.equal(result.statusCode, 201);
assert.equal(result.body.stage, 'log');
assert.equal(result.body.reason, 'log_retired');
assert.equal(result.body.outcome, 'failed');
assert.equal(result.body.outputArtifact, null);
assert.equal(JSON.stringify(result).includes('private'), false);
});
test('rejects non-exact bodies before invoking the capability', async () => {
let calls = 0;
const route = createClusterControlCopilotFailureDiagnosisRoute({
async execute() {
calls += 1;
return succeeded();
},
});
for (const invalid of [
null,
{},
body({ requestId: 'body-request-must-not-exist' }),
body({ provider: 'caller-selected' }),
body({ traceId: '' }),
Object.assign(Object.create(null), body()),
]) {
const result = await route.handle(authorized(invalid), {
projectId: 'project-1',
runId: 'source-run-1',
});
assert.equal(result.statusCode, 400);
assert.deepEqual(result.body, {
code: 'invalid_copilot_failure_diagnosis_request',
});
}
assert.equal(calls, 0);
});
test('fails closed on capability responses that do not bind the durable identity', async () => {
for (const mutation of [
(value) => ({
...value,
admission: { ...value.admission, requestId: 'other' },
}),
(value) => ({
...value,
admission: { ...value.admission, sourceRunId: 'other' },
}),
(value) => ({ ...value, terminalizationRequired: true }),
(value) => ({ ...value, model: null }),
(value) => ({ ...value, model: { ...value.model, output: null } }),
]) {
const route = createClusterControlCopilotFailureDiagnosisRoute({
async execute() {
return mutation(succeeded());
},
});
const result = await route.handle(authorized(body()), {
projectId: 'project-1',
runId: 'source-run-1',
});
assert.deepEqual(result, {
statusCode: 503,
body: { code: 'copilot_failure_diagnosis_unavailable' },
});
}
});
test('maps internal failures to stable low-sensitive transport codes', async () => {
for (const [internal, statusCode, external] of [
[
'COPILOT_FAILURE_DIAGNOSIS_APPLICATION_CONFLICT',
409,
'copilot_failure_diagnosis_conflict',
],
[
'TRUSTED_TOOL_EXECUTION_POLICY_DENIED',
403,
'copilot_failure_diagnosis_forbidden',
],
[
'COPILOT_FAILURE_DIAGNOSIS_APPLICATION_BUSY',
429,
'copilot_failure_diagnosis_capacity_exceeded',
],
[
'COPILOT_MODEL_EGRESS_DENIED',
422,
'copilot_failure_diagnosis_policy_rejected',
],
[
'MODEL_INVOCATION_DEADLINE_EXCEEDED',
504,
'copilot_failure_diagnosis_deadline_exceeded',
],
['MODEL_INVOCATION_ABORTED', 408, 'copilot_failure_diagnosis_aborted'],
['PRIVATE_STORAGE_FAILURE', 503, 'copilot_failure_diagnosis_unavailable'],
]) {
const route = createClusterControlCopilotFailureDiagnosisRoute({
async execute() {
throw Object.assign(new Error('private internal detail'), {
code: internal,
});
},
});
const result = await route.handle(authorized(body()), {
projectId: 'project-1',
runId: 'source-run-1',
});
assert.equal(result.statusCode, statusCode, internal);
assert.deepEqual(result.body, { code: external });
assert.equal(JSON.stringify(result).includes('private'), false);
}
});