port-get
Version:
Get an available TCP port (a minimal CJS module)
65 lines (56 loc) • 2.4 kB
JavaScript
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])
})