d
This commit is contained in:
parent
c3a6f5ff37
commit
4c4e767ec6
73 changed files with 3502 additions and 741 deletions
34
test/v4791-server-startup-smoke-test.js
Normal file
34
test/v4791-server-startup-smoke-test.js
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
'use strict';
|
||||
const assert=require('assert/strict');
|
||||
const http=require('http');
|
||||
const {parsePort,defaultPortCandidates,listenWithPortFallback}=require('../server');
|
||||
|
||||
function close(server){return new Promise(resolve=>server.close(()=>resolve()))}
|
||||
function listen(server,port=0){return new Promise((resolve,reject)=>{server.once('error',reject);server.listen(port,'127.0.0.1',()=>resolve(server.address().port))})}
|
||||
|
||||
(async()=>{
|
||||
assert.equal(parsePort(undefined),8080);
|
||||
assert.equal(parsePort('0'),0);
|
||||
assert.equal(parsePort('4312'),4312);
|
||||
assert.throws(()=>parsePort('invalid'),/Invalid server port/);
|
||||
assert.deepEqual(defaultPortCandidates(8080).slice(0,3),[8080,3000,3001]);
|
||||
|
||||
const blocker=http.createServer((_req,res)=>res.end('occupied'));
|
||||
const occupiedPort=await listen(blocker);
|
||||
const fallbackServer=http.createServer((_req,res)=>res.end('LinkField'));
|
||||
const listening=await listenWithPortFallback(fallbackServer,{host:'127.0.0.1',preferredPort:occupiedPort,explicitPort:false,candidates:[occupiedPort,0]});
|
||||
assert.equal(listening.usedFallback,true);
|
||||
assert.notEqual(listening.port,occupiedPort);
|
||||
const response=await fetch(`http://127.0.0.1:${listening.port}/`);
|
||||
assert.equal(await response.text(),'LinkField');
|
||||
|
||||
const explicitServer=http.createServer();
|
||||
await assert.rejects(
|
||||
listenWithPortFallback(explicitServer,{host:'127.0.0.1',preferredPort:occupiedPort,explicitPort:true}),
|
||||
error=>error?.code==='EADDRINUSE'&&/already in use/.test(error.message)
|
||||
);
|
||||
|
||||
await close(fallbackServer);
|
||||
await close(blocker);
|
||||
console.log('LinkField v48.0 server startup fallback smoke test passed');
|
||||
})().catch(error=>{console.error(error);process.exitCode=1});
|
||||
Loading…
Add table
Add a link
Reference in a new issue