test-port-finder.js 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. #!/usr/bin/env node
  2. import assert from 'assert';
  3. import net from 'net';
  4. import { findFreePort } from './src/server/helpers.js';
  5. function listenEphemeral() {
  6. return new Promise((resolve, reject) => {
  7. const server = net.createServer();
  8. server.once('error', reject);
  9. server.listen({ port: 0, exclusive: true }, () => {
  10. const address = server.address();
  11. resolve({ server, port: Number(address?.port) });
  12. });
  13. });
  14. }
  15. function closeServer(server) {
  16. return new Promise((resolve) => {
  17. server.close(() => resolve());
  18. });
  19. }
  20. async function main() {
  21. const { server, port: occupiedPort } = await listenEphemeral();
  22. try {
  23. const freePort = await findFreePort(occupiedPort, occupiedPort + 5);
  24. assert.notStrictEqual(freePort, occupiedPort, 'findFreePort should skip a port already bound on all interfaces');
  25. console.log('\n── Port Finder Regression ──');
  26. console.log('PASS test-port-finder.js');
  27. } finally {
  28. await closeServer(server);
  29. }
  30. }
  31. main().catch((err) => {
  32. console.error(err.stack || err.message);
  33. process.exit(1);
  34. });