34 lines
2.1 KiB
JavaScript
34 lines
2.1 KiB
JavaScript
'use strict';
|
|
const assert=require('assert/strict');
|
|
const http=require('http');
|
|
const {checkPublicDeployment}=require('../server/public-health');
|
|
|
|
(async()=>{
|
|
let mode='healthy';
|
|
const server=http.createServer((request,response)=>{
|
|
if(request.url==='/link-field/'||request.url==='/link-field'){
|
|
response.setHeader('content-type','text/html');
|
|
if(mode==='disclosure')response.setHeader('server','Apache/2.4.66');
|
|
response.end('<title>LinkField</title>');return;
|
|
}
|
|
if(['/link-field/server.js','/link-field/package.json','/link-field/scripts/service-control.js','/link-field/.linkfield-deployment.json'].includes(request.url)){
|
|
if(mode==='source'){response.writeHead(200,{'content-type':'text/plain'});response.end('private source');return}
|
|
response.writeHead(403);response.end();return;
|
|
}
|
|
if(request.url==='/link-field/api/cloud/status'){
|
|
response.setHeader('content-type','application/json');response.end(JSON.stringify({available:true,appVersion:'48.0'}));return;
|
|
}
|
|
if(request.url==='/link-field/api-bridge.php?path=/api/cloud/status'){
|
|
response.setHeader('content-type','application/json');response.setHeader('x-linkfield-bridge','php');response.end(JSON.stringify({available:true,appVersion:'48.0'}));return;
|
|
}
|
|
response.writeHead(404);response.end();
|
|
});
|
|
await new Promise((resolve,reject)=>{server.once('error',reject);server.listen(0,'127.0.0.1',resolve)});
|
|
try{
|
|
const base=`http://127.0.0.1:${server.address().port}/link-field/`;
|
|
const healthy=await checkPublicDeployment(base,{appVersion:'48.0',timeoutMs:2000});assert.equal(healthy.base,base);
|
|
mode='source';await assert.rejects(checkPublicDeployment(base,{appVersion:'48.0',timeoutMs:2000}),/Private deployment file is public/);
|
|
mode='disclosure';await assert.rejects(checkPublicDeployment(base,{appVersion:'48.0',timeoutMs:2000}),/discloses a detailed version/);
|
|
}finally{await new Promise(resolve=>server.close(resolve))}
|
|
console.log('Public deployment health and source-boundary smoke test passed');
|
|
})().catch(error=>{console.error(error);process.exitCode=1});
|