Files

38 lines
1.7 KiB
JavaScript
Raw Permalink Normal View History

/**
* `ensureOsAccount`(`src/worker/agent.ts`)—— 集群化后「建号」落点的守卫。
*
* 本套件只覆盖**参数校验**(纯逻辑,任何平台都能跑)。
* 真实建号(`useradd` + `chown`)需要 Linux root ⇒ 在各节点上冒烟验证,不进本套件。
*
* 背景:单机时代的 `dsh-provision.path` 靠**本地控制面库**算 uid,集群下算不出来
* (实测 `hashUid` 兜底会把 guest 算成 184656 ≠ 真实 100002,而 PG 是 Manager 专属)
* ⇒ 改为「Manager 随 `POST /launch` 投递 uid,agent 在 spawn 前确保账号存在」。
* 见 `agent.ts` 中该函数的注释。
*/
import test from 'node:test'
import assert from 'node:assert/strict'
import { ensureOsAccount } from '../lib/worker/agent.js'
const config = { baseUid: 100000, dataRoot: '/nonexistent-dshs-root' }
const VALID = '4092b965-2f68-4977-9989-68b3966f7df0'
test('ensureOsAccount:拒绝非 UUID 形状的 userId', () => {
assert.throws(() => ensureOsAccount(config, 'guest', 100002), /invalid userId/)
})
test('ensureOsAccount:拒绝低于 baseUid 的 uid', () => {
assert.throws(() => ensureOsAccount(config, VALID, 999), /invalid uid/)
})
test('ensureOsAccount:拒绝非整数 uid', () => {
assert.throws(() => ensureOsAccount(config, VALID, 100000.5), /invalid uid/)
})
test('ensureOsAccount:拒绝负数 uid', () => {
assert.throws(() => ensureOsAccount(config, VALID, -1), /invalid uid/)
})
test('ensureOsAccount:非 Linux 平台在参数合法时静默返回(不抛错、不建号)', () => {
if (process.platform === 'linux') return // 该用例只在非 Linux 上有意义
assert.doesNotThrow(() => ensureOsAccount(config, VALID, 100002))
})