Ctrl K
ComunidadGuías…

test/codex-os-user-isolation.test.js

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
var test = require("node:test");
var assert = require("node:assert");

var { createCodexAdapter } = require("../lib/yoke/adapters/codex");

function fakeUserInfo(username) {
  return {
    uid: username === "alice" ? 1201 : 1202,
    gid: username === "alice" ? 1301 : 1302,
    home: "/home/" + username,
    user: username,
    shell: "/bin/bash",
  };
}

function createFakeServer(options) {
  return {
    options: options,
    started: false,
    proc: null,
    start: function() {
      this.started = true;
      return Promise.resolve();
    },
    send: function(method) {
      if (method === "skills/list") return Promise.resolve({ data: [] });
      return Promise.resolve({});
    },
    notify: function() {},
    stop: function() { this.started = false; },
  };
}

test("Codex creates and reuses a separate app-server for each mapped Linux user", async function() {
  var servers = [];
  var adapter = createCodexAdapter({
    cwd: process.cwd(),
    osUsers: true,
    resolveOsUserInfo: fakeUserInfo,
    createAppServer: function(options) {
      var server = createFakeServer(options);
      servers.push(server);
      return server;
    },
  });

  await adapter.init({ linuxUser: "alice", env: { PROJECT_TOKEN: "alice-project" } });
  await adapter.init({ linuxUser: "alice" });
  await adapter.init({ linuxUser: "bob" });

  assert.strictEqual(servers.length, 2);
  assert.strictEqual(servers[0].options.osUserInfo.user, "alice");
  assert.strictEqual(servers[0].options.env.PROJECT_TOKEN, "alice-project");
  assert.strictEqual(servers[1].options.osUserInfo.user, "bob");
  assert.notStrictEqual(servers[0], servers[1]);
});

test("Codex fails closed when OS-user isolation lacks a mapped Linux user", async function() {
  var adapter = createCodexAdapter({
    cwd: process.cwd(),
    osUsers: true,
    resolveOsUserInfo: fakeUserInfo,
    createAppServer: createFakeServer,
  });

  await assert.rejects(
    adapter.init({}),
    /requires a mapped Linux user/
  );
});

test("Codex auth refresh restarts only the matching Linux user runtime", async function() {
  var servers = [];
  var adapter = createCodexAdapter({
    cwd: process.cwd(),
    osUsers: true,
    resolveOsUserInfo: fakeUserInfo,
    createAppServer: function(options) {
      var server = createFakeServer(options);
      servers.push(server);
      return server;
    },
  });

  await adapter.init({ linuxUser: "alice" });
  await adapter.init({ linuxUser: "bob" });
  await adapter.refreshAuthIdentity("alice");

  assert.strictEqual(servers[0].started, false, "Alice's stale app-server is stopped");
  assert.strictEqual(servers[1].started, true, "Bob's authenticated app-server stays running");

  await adapter.init({ linuxUser: "alice" });
  await adapter.init({ linuxUser: "bob" });
  assert.strictEqual(servers.length, 3, "only Alice gets a fresh app-server");
});