feat: establish Chenglu persistent agent runtime
This commit is contained in:
commit
5aa396ac7b
17 changed files with 450 additions and 0 deletions
29
test/server.test.js
Normal file
29
test/server.test.js
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
"use strict";
|
||||
|
||||
const test = require("node:test");
|
||||
const assert = require("node:assert/strict");
|
||||
const crypto = require("node:crypto");
|
||||
const fs = require("node:fs");
|
||||
const os = require("node:os");
|
||||
const path = require("node:path");
|
||||
|
||||
test("health surface stays read-only and identifies Chenglu Agent", async () => {
|
||||
const dir = fs.mkdtempSync(path.join(os.tmpdir(), "chenglu-server-"));
|
||||
const { privateKey, publicKey } = crypto.generateKeyPairSync("ed25519");
|
||||
process.env.CHENGLU_STATE_PATH = path.join(dir, "state.json");
|
||||
process.env.CHENGLU_IDENTITY_KEY = path.join(dir, "identity.key");
|
||||
process.env.CHENGLU_IDENTITY_PUBLIC = path.join(dir, "identity.pub");
|
||||
fs.writeFileSync(process.env.CHENGLU_IDENTITY_KEY, privateKey.export({ type: "pkcs8", format: "pem" }));
|
||||
fs.writeFileSync(process.env.CHENGLU_IDENTITY_PUBLIC, publicKey.export({ type: "spki", format: "pem" }));
|
||||
fs.writeFileSync(process.env.CHENGLU_STATE_PATH, JSON.stringify({ version: 2, mode: "ONLINE_IDLE" }));
|
||||
const { createServer } = require("../src/server");
|
||||
const server = createServer().listen(0, "127.0.0.1");
|
||||
try {
|
||||
await new Promise(resolve => server.once("listening", resolve));
|
||||
const address = server.address();
|
||||
const health = await fetch(`http://127.0.0.1:${address.port}/health`).then(response => response.json());
|
||||
assert.deepEqual(health, { ok: true, agent_id: "CHENGLU-AGENT-001", mode: "ONLINE_IDLE" });
|
||||
const rejected = await fetch(`http://127.0.0.1:${address.port}/v1/identity`, { method: "DELETE" });
|
||||
assert.equal(rejected.status, 404);
|
||||
} finally { await new Promise(resolve => server.close(resolve)); fs.rmSync(dir, { recursive: true, force: true }); }
|
||||
});
|
||||
Loading…
Reference in a new issue