feat: sync g14 harness and device-pod cli
This commit is contained in:
@@ -149,6 +149,62 @@ test("device-pod-cli preserves common v0.1 hardware options in REST job args", a
|
||||
});
|
||||
});
|
||||
|
||||
test("device-pod-cli exposes workspace writes, keil source edits, and UART JSON-RPC as REST jobs", async () => {
|
||||
const seen: any[] = [];
|
||||
const fetchImpl = async (url, init) => {
|
||||
seen.push({ url: String(url), body: JSON.parse(String(init?.body ?? "{}")) });
|
||||
return jsonResponse(202, { ok: true, status: "running", job: { id: `job_${seen.length}`, status: "running" } });
|
||||
};
|
||||
|
||||
const put = await runDevicePodCli([
|
||||
"--api-base-url", "http://cloud.test",
|
||||
"--session-token", "session-a",
|
||||
"--reason", "write file",
|
||||
"--lease-token", "lease-a",
|
||||
"device-pod-71-freq:workspace:/projects/app",
|
||||
"put",
|
||||
"User/new.c",
|
||||
"--create-dirs"
|
||||
], { fetchImpl, stdinText: "int main(void) { return 0; }\n", now: () => "2026-05-29T00:00:00.000Z" });
|
||||
assert.equal(put.exitCode, 0);
|
||||
assert.equal(seen[0].body.intent, "workspace.put");
|
||||
assert.equal(seen[0].body.args.path, "projects/app/User/new.c");
|
||||
assert.equal(seen[0].body.args.createDirs, true);
|
||||
assert.equal(Buffer.from(seen[0].body.args.contentB64, "base64").toString("utf8"), "int main(void) { return 0; }\n");
|
||||
|
||||
const keil = await runDevicePodCli([
|
||||
"--api-base-url", "http://cloud.test",
|
||||
"--session-token", "session-a",
|
||||
"--reason", "add source",
|
||||
"--lease-token", "lease-a",
|
||||
"device-pod-71-freq:workspace:/projects/app",
|
||||
"keil",
|
||||
"add-source",
|
||||
"User/new.c",
|
||||
"--group", "User"
|
||||
], { fetchImpl, now: () => "2026-05-29T00:00:00.000Z" });
|
||||
assert.equal(keil.exitCode, 0);
|
||||
assert.deepEqual(seen[1].body.args, { action: "add-source", base: "projects/app", path: "User/new.c", group: "User" });
|
||||
|
||||
const jsonrpc = await runDevicePodCli([
|
||||
"--api-base-url", "http://cloud.test",
|
||||
"--session-token", "session-a",
|
||||
"--reason", "gpio read",
|
||||
"--lease-token", "lease-a",
|
||||
"device-pod-71-freq:io-probe:/uart/1",
|
||||
"jsonrpc",
|
||||
"gpio.read",
|
||||
"--params-json", "{\"pin\":\"PB5\"}",
|
||||
"--require-jsonrpc-result",
|
||||
"--expect-result-field", "pin",
|
||||
"--expect-result-field", "value"
|
||||
], { fetchImpl, now: () => "2026-05-29T00:00:00.000Z" });
|
||||
assert.equal(jsonrpc.exitCode, 0);
|
||||
assert.equal(seen[2].body.intent, "io.uart.jsonrpc");
|
||||
assert.deepEqual(seen[2].body.args.expectResultField, ["pin", "value"]);
|
||||
assert.equal(seen[2].body.args.params, "{\"pin\":\"PB5\"}");
|
||||
});
|
||||
|
||||
test("device-pod-cli rejects legacy local profile create in formal mode", async () => {
|
||||
const result = await runDevicePodCli(["profile", "create", "--pod-id", "device-pod-71-freq"], { now: () => "2026-05-29T00:00:00.000Z" });
|
||||
assert.equal(result.exitCode, 1);
|
||||
|
||||
Reference in New Issue
Block a user