/** * @file fake-sudo.js * @description Test helper for the S3 suites: an `execImpl` for * `run-as.__setExecImpl` (and a `spawn` for `__setSpawnImpl`) that plays * `sudo -n -u [VAR=v…] …` without root — it records the argv (so a test can assert nothing secret * crossed sudo) and runs the real `scripts/server/write-as.sh` for * `/opt/agenthub/libexec/write-as`, as this account. * @author Nguyễn Ngọc Trí Vĩ */ const path = require("node:path"); const { execFileSync, spawn: spawnChild } = require("node:child_process"); const WRITE_AS = path.join(__dirname, "..", "..", "..", "scripts", "server", "write-as.sh"); /** `{ exec, spawn, calls }`: pass `exec` to `runAs.__setExecImpl` and `spawn` * to `runAs.__setSpawnImpl`; `calls` = every sudo argv. */ function fakeSudo() { const calls = []; // The command sudo would run, as [file, args]. const unwrap = (cmd, argv) => { calls.push([cmd, ...argv]); if (cmd !== "sudo") return [cmd, argv]; let i = argv.indexOf("-u") + 2; // past the login while (/^[A-Z_][A-Z0-9_]*=/.test(argv[i])) i++; const [bin, ...rest] = argv.slice(i); return bin === "/opt/agenthub/libexec/write-as" ? ["sh", [WRITE_AS, ...rest]] : [bin, rest]; }; const exec = (cmd, argv, opts = {}) => execFileSync(...unwrap(cmd, argv), opts); const spawn = (cmd, argv, opts = {}) => spawnChild(...unwrap(cmd, argv), opts); return { exec, spawn, calls }; } module.exports = { fakeSudo };