generated-runtime.test.ts 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import assert from "node:assert/strict";
  2. import { execFileSync, spawnSync } from "node:child_process";
  3. import { mkdtemp, mkdir, rm, writeFile } from "node:fs/promises";
  4. import { tmpdir } from "node:os";
  5. import { join } from "node:path";
  6. import test from "node:test";
  7. const verifier = new URL("../scripts/verify-generated-runtime.mjs", import.meta.url);
  8. const gitEnvironment = { ...process.env };
  9. delete gitEnvironment.GIT_INDEX_FILE;
  10. async function runtimeFixture() {
  11. const root = await mkdtemp(join(tmpdir(), "codex-app-server-bridge-runtime-test-"));
  12. await Promise.all([
  13. mkdir(join(root, "dist"), { recursive: true }),
  14. mkdir(join(root, "scripts"), { recursive: true }),
  15. mkdir(join(root, "src"), { recursive: true }),
  16. ]);
  17. await writeFile(join(root, "package.json"), JSON.stringify({
  18. private: true,
  19. scripts: { compile: "node scripts/compile.mjs" },
  20. }));
  21. await writeFile(
  22. join(root, "scripts", "compile.mjs"),
  23. "import { copyFile } from 'node:fs/promises';\nawait Promise.all([copyFile('src/cli.js', 'dist/cli.js'), copyFile('src/config.js', 'dist/config.js')]);\n",
  24. );
  25. await writeFile(join(root, "src", "cli.js"), "export const version = 1;\n");
  26. await writeFile(join(root, "src", "config.js"), "export const configured = true;\n");
  27. await writeFile(join(root, "dist", "cli.js"), "export const version = 1;\n");
  28. await writeFile(join(root, "dist", "config.js"), "export const configured = true;\n");
  29. execFileSync("git", ["init", "--quiet"], { cwd: root, env: gitEnvironment });
  30. execFileSync("git", ["add", "."], { cwd: root, env: gitEnvironment });
  31. return root;
  32. }
  33. test("generated-runtime verifier accepts a fresh staged baseline", async () => {
  34. const root = await runtimeFixture();
  35. try {
  36. const result = spawnSync(process.execPath, [verifier.pathname], {
  37. cwd: root,
  38. encoding: "utf8",
  39. env: gitEnvironment,
  40. });
  41. assert.equal(result.status, 0, result.stderr);
  42. assert.match(result.stdout, /Generated runtime is fresh/);
  43. } finally {
  44. await rm(root, { recursive: true, force: true });
  45. }
  46. });
  47. test("generated-runtime verifier rejects source and runtime drift", async () => {
  48. const root = await runtimeFixture();
  49. try {
  50. await writeFile(join(root, "src", "cli.js"), "export const version = 2;\n");
  51. const result = spawnSync(process.execPath, [verifier.pathname], {
  52. cwd: root,
  53. encoding: "utf8",
  54. env: gitEnvironment,
  55. });
  56. assert.notEqual(result.status, 0);
  57. assert.match(result.stderr, /generated runtime drift detected/i);
  58. assert.match(result.stderr, /cli\.js/);
  59. } finally {
  60. await rm(root, { recursive: true, force: true });
  61. }
  62. });