112 lines
3.8 KiB
TypeScript
112 lines
3.8 KiB
TypeScript
#!/usr/bin/env npx tsx
|
|
|
|
import assert from 'node:assert'
|
|
import { mkdtempSync, mkdirSync, rmSync, writeFileSync } from 'node:fs'
|
|
import os from 'node:os'
|
|
import path from 'node:path'
|
|
import {
|
|
getDaemonHost,
|
|
normalizeDaemonHost,
|
|
resolveDaemonTarget,
|
|
resolveDefaultDaemonHosts,
|
|
} from '../src/utils/client.js'
|
|
|
|
console.log('=== CLI IPC Target Helpers ===\n')
|
|
|
|
{
|
|
console.log('Test 1: unix hosts resolve to ws+unix URLs')
|
|
const target = resolveDaemonTarget('unix:///tmp/paseo.sock')
|
|
assert.deepStrictEqual(target, {
|
|
type: 'ipc',
|
|
url: 'ws+unix:///tmp/paseo.sock:/ws',
|
|
socketPath: '/tmp/paseo.sock',
|
|
})
|
|
console.log('✓ unix hosts resolve to ws+unix URLs\n')
|
|
}
|
|
|
|
{
|
|
console.log('Test 2: pipe hosts preserve the Node socketPath transport form')
|
|
const target = resolveDaemonTarget('pipe://\\\\.\\pipe\\paseo-managed-test')
|
|
assert.deepStrictEqual(target, {
|
|
type: 'ipc',
|
|
url: 'ws://localhost/ws',
|
|
socketPath: '\\\\.\\pipe\\paseo-managed-test',
|
|
})
|
|
console.log('✓ pipe hosts preserve Node socketPath transport form\n')
|
|
}
|
|
|
|
{
|
|
console.log('Test 3: local unix socket paths normalize into IPC daemon targets')
|
|
assert.strictEqual(normalizeDaemonHost('/tmp/paseo.sock'), 'unix:///tmp/paseo.sock')
|
|
console.log('✓ local unix socket paths normalize into IPC daemon targets\n')
|
|
}
|
|
|
|
{
|
|
console.log('Test 4: default host resolution tries local IPC first, then localhost fallback')
|
|
const paseoHome = mkdtempSync(path.join(os.tmpdir(), 'paseo-client-targets-'))
|
|
try {
|
|
mkdirSync(paseoHome, { recursive: true })
|
|
writeFileSync(
|
|
path.join(paseoHome, 'paseo.pid'),
|
|
JSON.stringify({ pid: process.pid, sockPath: '/tmp/paseo-from-pid.sock' })
|
|
)
|
|
assert.deepStrictEqual(resolveDefaultDaemonHosts({ PASEO_HOME: paseoHome }), [
|
|
'unix:///tmp/paseo-from-pid.sock',
|
|
'localhost:6767',
|
|
])
|
|
const previousHome = process.env.PASEO_HOME
|
|
const previousHost = process.env.PASEO_HOST
|
|
process.env.PASEO_HOME = paseoHome
|
|
delete process.env.PASEO_HOST
|
|
assert.strictEqual(getDaemonHost(), 'unix:///tmp/paseo-from-pid.sock')
|
|
if (previousHome === undefined) delete process.env.PASEO_HOME
|
|
else process.env.PASEO_HOME = previousHome
|
|
if (previousHost === undefined) delete process.env.PASEO_HOST
|
|
else process.env.PASEO_HOST = previousHost
|
|
} finally {
|
|
rmSync(paseoHome, { recursive: true, force: true })
|
|
}
|
|
console.log('✓ default host resolution tries local IPC first, then localhost fallback\n')
|
|
}
|
|
|
|
{
|
|
console.log('Test 5: configured TCP host is preserved before the localhost fallback')
|
|
const paseoHome = mkdtempSync(path.join(os.tmpdir(), 'paseo-client-targets-tcp-'))
|
|
try {
|
|
assert.deepStrictEqual(
|
|
resolveDefaultDaemonHosts({
|
|
PASEO_HOME: paseoHome,
|
|
PASEO_LISTEN: '127.0.0.1:7777',
|
|
}),
|
|
['127.0.0.1:7777', 'localhost:6767']
|
|
)
|
|
} finally {
|
|
rmSync(paseoHome, { recursive: true, force: true })
|
|
}
|
|
console.log('✓ configured TCP host is preserved before the localhost fallback\n')
|
|
}
|
|
|
|
{
|
|
console.log('Test 6: local IPC still takes priority over configured TCP hosts')
|
|
const paseoHome = mkdtempSync(path.join(os.tmpdir(), 'paseo-client-targets-order-'))
|
|
try {
|
|
mkdirSync(paseoHome, { recursive: true })
|
|
writeFileSync(
|
|
path.join(paseoHome, 'paseo.pid'),
|
|
JSON.stringify({ pid: process.pid, sockPath: '/tmp/paseo-priority.sock' })
|
|
)
|
|
assert.deepStrictEqual(
|
|
resolveDefaultDaemonHosts({
|
|
PASEO_HOME: paseoHome,
|
|
PASEO_LISTEN: '127.0.0.1:7777',
|
|
}),
|
|
['unix:///tmp/paseo-priority.sock', '127.0.0.1:7777', 'localhost:6767']
|
|
)
|
|
} finally {
|
|
rmSync(paseoHome, { recursive: true, force: true })
|
|
}
|
|
console.log('✓ local IPC still takes priority over configured TCP hosts\n')
|
|
}
|
|
|
|
console.log('=== All CLI IPC target tests passed ===')
|