import {writeFile,readFile} from 'node:fs/promises';import {createHash} from 'node:crypto';import assert from 'node:assert/strict';
const expected={basic:3,distributed:5,sequential:8,parallel:8,error:5,'async-context':3,worker:4,sampling:5,privacy:2,shutdown:5},requests=[];
for(const scenario of Object.keys(expected)){const r=await fetch('http://127.0.0.1:8413/demo?scenario='+scenario,{signal:AbortSignal.timeout(8000)}),response=await r.json();assert.equal(r.status,scenario==='error'?500:200);requests.push({scenario,status:r.status,response});}
const traces=[];
for(const request of requests){let result;for(let i=0;i<100;i++){const r=await fetch('http://127.0.0.1:16687/api/traces/'+request.response.traceId,{signal:AbortSignal.timeout(3000)});if(r.ok){const data=await r.json();if(data.data?.[0]?.spans?.length===expected[request.scenario]){result=data;break;}}await new Promise(r=>setTimeout(r,100));}assert.ok(result,'Missing Linux container trace: '+request.scenario);traces.push({scenario:request.scenario,rawJaeger:result});}
const hashes={};for(const path of['src/service.mjs','src/telemetry.mjs','src/worker.mjs','src/run-worker.mjs','Dockerfile','compose.yaml','deploy/collector.yaml','package-lock.json'])hashes[path]=createHash('sha256').update(await readFile(path)).digest('hex');
const report={status:'PASS',checkedAt:new Date().toISOString(),platform:'Node24.19.0 Linux bookworm-slim containers; native host only sends HTTP and verifies Jaeger API',expectedSpans:48,sourceHashes:hashes,requests,traces};await writeFile('records/compose-verification.json',JSON.stringify(report,null,2)+'\n');console.log(JSON.stringify({status:report.status,scenarios:requests.length,jaegerSpans:traces.reduce((n,t)=>n+t.rawJaeger.data[0].spans.length,0)}));
