@pact-foundation/pact
Version:
Pact for all things Javascript
58 lines • 2.52 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const node_net_1 = __importDefault(require("node:net"));
const logger_1 = __importDefault(require("./logger"));
const net_1 = require("./net");
describe('Net', () => {
const port = 4567;
const defaultHost = '0.0.0.0';
const specialPort = -1;
// Utility function to create a server on a given port and return a Promise
const createServer = (p, host = defaultHost) => new Promise((resolve, reject) => {
const server = node_net_1.default.createServer();
server.on('error', (err) => reject(err));
server.on('listening', () => resolve(server));
server.listen({ port: p, host, exclusive: true }, () => {
logger_1.default.info(`test server is up on ${host}:${p}`);
});
});
describe('#isPortAvailable', () => {
describe('when the port is not allowed to be bound', () => {
it('returns a rejected promise', async () => {
await expect((0, net_1.isPortAvailable)(specialPort, defaultHost)).rejects.toBeDefined();
});
});
describe('when the port is available', () => {
it('returns a fulfilled promise', async () => {
await (0, net_1.isPortAvailable)(port, defaultHost);
});
});
describe('when the port is unavailable', () => {
it('returns a rejected promise', async () => {
const server = await createServer(port);
try {
await expect((0, net_1.isPortAvailable)(port, defaultHost)).rejects.toBeDefined();
}
finally {
await new Promise((resolve) => server?.close(() => resolve()));
}
});
});
describe('when a single host is unavailable', () => {
it('returns a fulfilled promise', async () => {
const server = await createServer(port, '::1');
try {
// this should work as the `127.0.0.1` is NOT `::1`
await (0, net_1.isPortAvailable)(port, '127.0.0.1');
}
finally {
await new Promise((resolve) => server?.close(() => resolve()));
}
});
});
});
});
//# sourceMappingURL=net.spec.js.map