69 lines
3.5 KiB
TypeScript
69 lines
3.5 KiB
TypeScript
import assert from "node:assert/strict";
|
|
import { chmod, mkdir, writeFile } from "node:fs/promises";
|
|
import path from "node:path";
|
|
import { startManagerServer } from "../../mgr/server.js";
|
|
import { MemoryAgentRunStore } from "../../mgr/store.js";
|
|
import { ManagerClient } from "../../mgr/client.js";
|
|
import { renderRunnerJobDryRun } from "../../runner/k8s-job.js";
|
|
import type { RunRecord } from "../../common/types.js";
|
|
import { assertNoSecretLeak, createRunWithCommand, type SelfTestCase } from "../harness.js";
|
|
|
|
const selfTest: SelfTestCase = async (context) => {
|
|
const server = await startManagerServer({ port: 0, host: "127.0.0.1", sourceCommit: "self-test", store: new MemoryAgentRunStore() });
|
|
try {
|
|
const client = new ManagerClient(server.baseUrl);
|
|
const item = await createRunWithCommand(client, context, "job smoke", "selftest-job-render", 15_000);
|
|
const rendered = renderRunnerJobDryRun({
|
|
run: await client.get(`/api/v1/runs/${item.runId}`) as RunRecord,
|
|
commandId: item.commandId,
|
|
managerUrl: server.baseUrl,
|
|
image: "127.0.0.1:5000/agentrun/agentrun-mgr@sha256:1111111111111111111111111111111111111111111111111111111111111111",
|
|
attemptId: "attempt_selftest",
|
|
sourceCommit: "self-test",
|
|
});
|
|
assert.equal(rendered.dryRun, true);
|
|
assert.equal(rendered.mutation, false);
|
|
assert.equal((rendered.jobIdentity as { serviceAccountName?: string }).serviceAccountName, "agentrun-v01-runner");
|
|
assertNoSecretLeak(rendered);
|
|
|
|
const fakeKubectl = path.join(context.tmp, "fake-kubectl.js");
|
|
const createdManifest = path.join(context.tmp, "created-runner-job.json");
|
|
await writeFile(fakeKubectl, `#!/usr/bin/env bun
|
|
const chunks = [];
|
|
for await (const chunk of Bun.stdin.stream()) chunks.push(chunk);
|
|
const text = Buffer.concat(chunks.map((chunk) => Buffer.from(chunk))).toString("utf8");
|
|
await Bun.write(${JSON.stringify(createdManifest)}, text);
|
|
const manifest = JSON.parse(text);
|
|
console.log(JSON.stringify({ apiVersion: manifest.apiVersion, kind: manifest.kind, metadata: { uid: "job-uid-selftest", resourceVersion: "1", name: manifest.metadata.name, namespace: manifest.metadata.namespace } }));
|
|
`);
|
|
await chmod(fakeKubectl, 0o755);
|
|
await mkdir(path.dirname(fakeKubectl), { recursive: true });
|
|
const serverWithKubectl = await startManagerServer({
|
|
port: 0,
|
|
host: "127.0.0.1",
|
|
sourceCommit: "self-test",
|
|
store: new MemoryAgentRunStore(),
|
|
runnerJobDefaults: {
|
|
namespace: "agentrun-v01",
|
|
managerUrl: "http://agentrun-mgr.agentrun-v01.svc.cluster.local:8080",
|
|
image: "127.0.0.1:5000/agentrun/agentrun-mgr@sha256:1111111111111111111111111111111111111111111111111111111111111111",
|
|
kubectlCommand: fakeKubectl,
|
|
},
|
|
});
|
|
try {
|
|
const jobClient = new ManagerClient(serverWithKubectl.baseUrl);
|
|
const jobItem = await createRunWithCommand(jobClient, context, "job create smoke", "selftest-job-create", 15_000);
|
|
const created = await jobClient.post(`/api/v1/runs/${jobItem.runId}/runner-jobs`, { commandId: jobItem.commandId, attemptId: "attempt_selftest_create" });
|
|
assert.equal((created as { mutation?: unknown }).mutation, true);
|
|
assertNoSecretLeak(created);
|
|
} finally {
|
|
await new Promise<void>((resolve) => serverWithKubectl.server.close(() => resolve()));
|
|
}
|
|
return { name: "runner-k8s-job", tests: ["runner-k8s-job-dry-run", "runner-k8s-job-create-api"] };
|
|
} finally {
|
|
await new Promise<void>((resolve) => server.server.close(() => resolve()));
|
|
}
|
|
};
|
|
|
|
export default selfTest;
|