"use strict"; // Integration check against the isolated NGINX QUIC fixture (not a public dependency). const assert = require('node:assert/strict'); const path = require('node:path'); const { curlRequest, HttpDiagnostics } = require('../src/main/diagnostics/httpDiagnostics'); const { parseTarget, normalizeOptions } = require('../src/main/diagnostics/common'); const { runtimePaths, validateRuntime } = require('../src/main/diagnostics/httpRuntime'); async function main() { const runtime=validateRuntime();const signal=new AbortController().signal; const settings={timeoutMs:1200,caPath:path.resolve(__dirname,'../test/fixtures/diagnostics/ca.pem')}; const ipv4=process.env.CHJ_TEST_QUIC_IPV4 || '127.0.0.1', ipv6=process.env.CHJ_TEST_QUIC_IPV6 || '::1'; const records=[]; for(const address of [ipv4,ipv6]) for(const protocol of ['1.1','2','3']) { const r=await curlRequest(new URL('https://localhost:18443/not-found?token=private'),address,protocol,settings,signal); assert.equal(r.status,'success',JSON.stringify(r));assert.equal(r.negotiated,protocol);assert.equal(r.statusCode,404);assert.equal(r.tls.verified,true);assert.equal(r.headers['set-cookie'],'[redacted]');assert.equal(r.downloadedBytes,11);delete r._body;records.push({address,protocol,...r}); } const h2=await curlRequest(new URL('https://localhost:18444/'),ipv4,'2',settings,signal);assert.equal(h2.negotiated,'2'); const noQuic=await curlRequest(new URL('https://localhost:18444/'),ipv4,'3',settings,signal);assert.notEqual(noQuic.status,'success');assert.ok(['HTTP3_UDP_TIMEOUT','CONNECTION_REFUSED'].includes(noQuic.code)); const badCert=await curlRequest(new URL('https://localhost:18443/'),ipv4,'3',{timeoutMs:1200},signal);assert.equal(badCert.code,'TLS_CERT_INVALID'); const wrongHost=await curlRequest(new URL('https://wrong.test:18443/'),ipv4,'3',settings,signal);assert.equal(wrongHost.code,'TLS_CERT_INVALID'); const dns={resolve:async()=>[{address:ipv4,family:4}]};const service=new HttpDiagnostics(dns,{caPath:settings.caPath});const resources=service.resources(); try {const options=normalizeOptions({target:'https://localhost:18443/redirect?token=private',tools:['http'],protocols:['3']});const result=await service.request(options.target,ipv4,'3',options,signal,resources);assert.equal(result.statusCode,404);assert.equal(result.redirectCount,1);records.push({...result,_body:undefined});}finally{service.dispose(resources);} for(const domain of ['ch-j.cz','sm.ch-j.de','sm.ch-j.eu']){const r=await curlRequest(new URL('https://'+domain+'/'),ipv4,'3',{timeoutMs:5000},signal);assert.equal(r.code,'HTTP3_CONFIRMED',domain+JSON.stringify(r));delete r._body;records.push({domain,...r});} console.log(JSON.stringify({platform:process.platform,arch:process.arch,runtime:runtime.manifest.version,records,negative:{noQuic,badCert,wrongHost}},null,2)); } main().catch(error=>{console.error(error);process.exitCode=1;});