UNPKG

port-get

Version:

Get an available TCP port (a minimal CJS module)

65 lines (56 loc) 2.4 kB
'use strict' const { createServer } = require('net') const portGet = require('.') const { test } = require('brittle') test('any port', async ({ is, execution }) => { const port = await portGet() is(typeof port, 'number') const server = createServer().unref() await execution(new Promise((resolve) => server.listen(port, '127.0.0.1', resolve))) is(server.address().port, port) }) test('specified port', async ({ is }) => { const port = Math.floor(Math.random() * 1000 + 12000) is(await portGet(port), port) }) test('unavailable', async ({ is, not, execution }) => { const target = Math.floor(Math.random() * 1000 + 12000) await execution(new Promise((resolve) => createServer().unref().listen(target, '127.0.0.1', resolve))) const port = await portGet(target) is(typeof port, 'number') not(port, target) }) test('privileged', async ({ is, not }) => { const target = 80 const port = await portGet(target) is(typeof port, 'number') not(port, target) }) test('host', async ({ is, not, execution }) => { const target = Math.floor(Math.random() * 1000 + 12000) await execution(new Promise((resolve) => createServer().unref().listen(target, '0.0.0.0', resolve))) const port = await portGet(target, '0.0.0.0') is(typeof port, 'number') not(port, target) is(await portGet(target, '127.0.0.1'), target) }) test('ports', async ({ is }) => { const targets = [Math.floor(Math.random() * 1000 + 12000), Math.floor(Math.random() * 1000 + 12000)] const port = await portGet(targets) is(port, targets[0]) }) test('ports: first port unavailable', async ({ is, execution }) => { const targets = [Math.floor(Math.random() * 1000 + 12000), Math.floor(Math.random() * 1000 + 12000)] await execution(new Promise((resolve) => createServer().unref().listen(targets[0], '127.0.0.1', resolve))) const port = await portGet(targets) is(port, targets[1]) }) test('ports: all ports unavailable', async ({ is, not, execution }) => { const targets = [Math.floor(Math.random() * 1000 + 12000), Math.floor(Math.random() * 1000 + 12000)] await execution(new Promise((resolve) => createServer().unref().listen(targets[0], '127.0.0.1', resolve))) await execution(new Promise((resolve) => createServer().unref().listen(targets[1], '127.0.0.1', resolve))) const port = await portGet(targets) is(typeof port, 'number') not(port, targets[0]) not(port, targets[1]) })