feat(ipcclient): Add clientOnly mode to prevent clients from auto-starting servers and improve registration/reconnect behavior
This commit is contained in:
@@ -192,6 +192,61 @@ tap.test('Client retry should work with delayed server', async () => {
|
||||
await server.stop();
|
||||
});
|
||||
|
||||
// Test 7: clientOnly prevents client from auto-starting a server
|
||||
tap.test('clientOnly should prevent auto-start and fail fast', async () => {
|
||||
const uniqueSocketPath = path.join(os.tmpdir(), `smartipc-clientonly-${Date.now()}.sock`);
|
||||
|
||||
const client = smartipc.SmartIpc.createClient({
|
||||
id: 'clientonly-test',
|
||||
socketPath: uniqueSocketPath,
|
||||
clientId: 'co-client-1',
|
||||
clientOnly: true,
|
||||
connectRetry: { enabled: false }
|
||||
});
|
||||
|
||||
let failed = false;
|
||||
try {
|
||||
await client.connect();
|
||||
} catch (err: any) {
|
||||
failed = true;
|
||||
expect(err.message).toContain('clientOnly prevents auto-start');
|
||||
}
|
||||
expect(failed).toBeTrue();
|
||||
// Ensure no server-side socket was created
|
||||
expect(fs.existsSync(uniqueSocketPath)).toBeFalse();
|
||||
});
|
||||
|
||||
// Test 8: env SMARTIPC_CLIENT_ONLY enforces clientOnly behavior
|
||||
tap.test('SMARTIPC_CLIENT_ONLY=1 should enforce clientOnly', async () => {
|
||||
const uniqueSocketPath = path.join(os.tmpdir(), `smartipc-clientonly-env-${Date.now()}.sock`);
|
||||
const prev = process.env.SMARTIPC_CLIENT_ONLY;
|
||||
process.env.SMARTIPC_CLIENT_ONLY = '1';
|
||||
|
||||
const client = smartipc.SmartIpc.createClient({
|
||||
id: 'clientonly-test-env',
|
||||
socketPath: uniqueSocketPath,
|
||||
clientId: 'co-client-2',
|
||||
connectRetry: { enabled: false }
|
||||
});
|
||||
|
||||
let failed = false;
|
||||
try {
|
||||
await client.connect();
|
||||
} catch (err: any) {
|
||||
failed = true;
|
||||
expect(err.message).toContain('clientOnly prevents auto-start');
|
||||
}
|
||||
expect(failed).toBeTrue();
|
||||
expect(fs.existsSync(uniqueSocketPath)).toBeFalse();
|
||||
|
||||
// restore env
|
||||
if (prev === undefined) {
|
||||
delete process.env.SMARTIPC_CLIENT_ONLY;
|
||||
} else {
|
||||
process.env.SMARTIPC_CLIENT_ONLY = prev;
|
||||
}
|
||||
});
|
||||
|
||||
// Cleanup
|
||||
tap.test('Cleanup test socket', async () => {
|
||||
try {
|
||||
@@ -201,4 +256,4 @@ tap.test('Cleanup test socket', async () => {
|
||||
}
|
||||
});
|
||||
|
||||
export default tap.start();
|
||||
export default tap.start();
|
||||
|
Reference in New Issue
Block a user