diff --git a/test/demo/detect.js b/test/demo/detect.js new file mode 100644 index 0000000..2e6e684 --- /dev/null +++ b/test/demo/detect.js @@ -0,0 +1,9 @@ +import { detect } from '../../dist/esm/index.js'; + +detect(7001) + .then(port => { + console.log(port); + }) + .catch(err => { + console.error(err); + }); diff --git a/test/demo/server.js b/test/demo/server.js new file mode 100644 index 0000000..bfb67a0 --- /dev/null +++ b/test/demo/server.js @@ -0,0 +1,8 @@ +import { createServer } from 'node:http'; +import { hostname } from 'node:os'; + +const server = createServer(); + +server.listen(7001, hostname(), () => { + console.log('listening %s:7001, address: %o', hostname(), server.address()); +}); diff --git a/test/detect-port.test.ts b/test/detect-port.test.ts index 5611e10..a454a44 100644 --- a/test/detect-port.test.ts +++ b/test/detect-port.test.ts @@ -44,6 +44,13 @@ describe('test/detect-port.test.ts', () => { }); servers.push(server4); + const server5 = new net.Server(); + server5.listen(25500, '::1', cb); + server5.on('error', err => { + console.error('listen ::1 error:', err); + }); + servers.push(server5); + for (let port = 27000; port < 27010; port++) { const server = new net.Server(); if (port % 3 === 0) { @@ -102,6 +109,13 @@ describe('test/detect-port.test.ts', () => { assert.equal(realPort, 25001); }); + it('work with listening next port 25501 because 25500 was listened to ::1', async () => { + const port = 25500; + const realPort = await detectPort(port); + assert(realPort); + assert.equal(realPort, 25501); + }); + it('should listen next port 24001 when localhost is not binding', async () => { mm(dns, 'lookup', (...args: any[]) => { mm.restore();