Repository files, collaboration, releases and project activity.
archforge-external-status / tests/probes.test.jsmain
▤ tests/probes.test.js1231 bytes
13 lines · Select a line number for a permalink
1
'use strict';2
const test=require('node:test'),assert=require('node:assert/strict'),http=require('node:http');const {checkHttp,serviceDefinitions}=require('../src/probes');3
test('HTTP probe rejects redirects and HTTP 200 pages at ArchForge discovery without ArchForge content type',async()=>{4
const server=http.createServer((req,res)=>{5
if(req.url==='/redirect'){res.writeHead(302,{Location:'/ok'});res.end();return;}6
if(req.url==='/git'){res.writeHead(200,{'content-type':'text/html'});res.end('<html>Login</html>');return;}7
res.writeHead(200,{'content-type':'text/plain'});res.end('OK');8
});9
await new Promise(r=>server.listen(0,'127.0.0.1',r));const base='http://127.0.0.1:'+server.address().port;10
try{assert.equal((await checkHttp(base+'/redirect',1000)).success,false);assert.equal((await checkHttp(base+'/git',1000,{git:true})).success,false);assert.equal((await checkHttp(base+'/ok',1000)).success,true);}finally{await new Promise(r=>server.close(r));}11
});12
test('optional ArchForge HTTPS and API are disabled when not configured',()=>{const c={api:'',gitHttp:''};const s=serviceDefinitions(c);assert.equal(s.find(v=>v.id==='api').configured,false);assert.equal(s.find(v=>v.id==='git_http').configured,false);});