2026-09-08 01:25:24 +08:00
|
|
|
import { describe, expect, it, vi } from 'vitest';
|
|
|
|
|
import net from 'node:net';
|
2026-09-07 20:37:46 +03:00
|
|
|
import { spawnSync } from 'node:child_process';
|
2026-09-08 01:25:24 +08:00
|
|
|
|
|
|
|
|
import { applyConnectAttemptTimeout, CONNECT_ATTEMPT_TIMEOUT_MS } from './network-defaults.js';
|
|
|
|
|
|
|
|
|
|
describe('applyConnectAttemptTimeout', () => {
|
2026-09-07 20:37:46 +03:00
|
|
|
it('initializes the server entrypoint in a fresh Node process', () => {
|
|
|
|
|
const serverUrl = new URL('../index.js', import.meta.url).href;
|
|
|
|
|
const result = spawnSync('node', ['--input-type=module', '--eval', `
|
|
|
|
|
import net from 'node:net';
|
|
|
|
|
import assert from 'node:assert/strict';
|
|
|
|
|
const family = net.getDefaultAutoSelectFamily();
|
|
|
|
|
net.setDefaultAutoSelectFamilyAttemptTimeout(250);
|
|
|
|
|
await import(${JSON.stringify(serverUrl)});
|
|
|
|
|
assert.equal(net.getDefaultAutoSelectFamilyAttemptTimeout(), 5000);
|
|
|
|
|
assert.equal(net.getDefaultAutoSelectFamily(), family);
|
|
|
|
|
process.exit(0);
|
|
|
|
|
`], { encoding: 'utf8', timeout: 15_000, windowsHide: true });
|
|
|
|
|
expect(result.status, result.stderr).toBe(0);
|
|
|
|
|
});
|
|
|
|
|
|
2026-09-08 01:25:24 +08:00
|
|
|
it('raises the per-attempt connect timeout on runtimes that expose the setter', () => {
|
|
|
|
|
const previous = net.getDefaultAutoSelectFamilyAttemptTimeout();
|
|
|
|
|
try {
|
|
|
|
|
expect(applyConnectAttemptTimeout()).toBe(true);
|
|
|
|
|
expect(net.getDefaultAutoSelectFamilyAttemptTimeout()).toBe(CONNECT_ATTEMPT_TIMEOUT_MS);
|
|
|
|
|
} finally {
|
|
|
|
|
net.setDefaultAutoSelectFamilyAttemptTimeout(previous);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('is a no-op on runtimes without the setter', () => {
|
|
|
|
|
expect(applyConnectAttemptTimeout({})).toBe(false);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('survives a throwing setter', () => {
|
|
|
|
|
const setDefaultAutoSelectFamilyAttemptTimeout = vi.fn(() => {
|
|
|
|
|
throw new Error('not supported');
|
|
|
|
|
});
|
|
|
|
|
expect(applyConnectAttemptTimeout({ setDefaultAutoSelectFamilyAttemptTimeout })).toBe(false);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('leaves family autoselection itself untouched', () => {
|
|
|
|
|
const setDefaultAutoSelectFamily = vi.fn();
|
|
|
|
|
const setDefaultAutoSelectFamilyAttemptTimeout = vi.fn();
|
|
|
|
|
applyConnectAttemptTimeout({ setDefaultAutoSelectFamily, setDefaultAutoSelectFamilyAttemptTimeout });
|
|
|
|
|
expect(setDefaultAutoSelectFamilyAttemptTimeout).toHaveBeenCalledTimes(1);
|
|
|
|
|
expect(setDefaultAutoSelectFamilyAttemptTimeout).toHaveBeenCalledWith(CONNECT_ATTEMPT_TIMEOUT_MS);
|
|
|
|
|
expect(setDefaultAutoSelectFamily).not.toHaveBeenCalled();
|
|
|
|
|
});
|
|
|
|
|
});
|