import test from 'node:test';import assert from 'node:assert/strict';import {normalizeCollectorBatch} from '../scripts/debug-collector-batch.mjs'; const span={traceId:'1234567890abcdef1234567890abcdef',spanId:'1234567890abcdef',name:'synthetic',startTimeUnixNano:'1000000000000000000',endTimeUnixNano:'1000000000001000000'}; const batch=value=>({resourceSpans:[{scopeSpans:[{spans:[value]}]}]}); test('collector diagnostics normalize valid timestamps, correlation and empty batches before mutation',()=>{assert.equal(normalizeCollectorBatch('traces',batch(span)).spans[0].durationMs,1);assert.deepEqual(normalizeCollectorBatch('traces',{}).spans,[]);assert.equal(normalizeCollectorBatch('logs',{resourceLogs:[]}).logs,0);assert.equal(normalizeCollectorBatch('metrics',{}).metrics,1);}); test('collector rejects unsafe durations, non-array hierarchy and invalid diagnostic identities',()=>{for(const value of [{...span,endTimeUnixNano:'100000000000000000'}, {...span,startTimeUnixNano:'0',endTimeUnixNano:String(BigInt(Number.MAX_SAFE_INTEGER)+1n)}, {...span,spanId:'0000000000000000'}, {...span,parentSpanId:123}, {...span,name:null}])assert.throws(()=>normalizeCollectorBatch('traces',batch(value)));for(const payload of [{resourceSpans:{}},{resourceSpans:[{scopeSpans:{}}]},{resourceSpans:[{scopeSpans:[{spans:{}}]}]}])assert.throws(()=>normalizeCollectorBatch('traces',payload));assert.throws(()=>normalizeCollectorBatch('metrics',{resourceMetrics:[{scopeMetrics:[{metrics:{}}]}]}));});