feat: implement two-shim CLI install with fallback instructions
This commit is contained in:
@@ -1,7 +1,15 @@
|
||||
#!/usr/bin/env npx tsx
|
||||
|
||||
import assert from 'node:assert'
|
||||
import { resolveDaemonTarget } from '../src/utils/client.js'
|
||||
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')
|
||||
|
||||
@@ -27,4 +35,77 @@ console.log('=== CLI IPC Target Helpers ===\n')
|
||||
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 ===')
|
||||
|
||||
Reference in New Issue
Block a user