import assert from 'node:assert/strict'; import {before,after,test} from 'node:test'; import {execFileSync} from 'node:child_process'; import {createServer} from 'vite'; let server,previewFrames,assertRrd; before(async()=>{ server=await createServer({appType:'custom',logLevel:'silent',server:{middlewareMode:true}}); ({previewFrames,assertRrd}=await server.ssrLoadModule('@xgrids-k1/frontend/sensors/previewFrames.ts')); }); after(async()=>{await server?.close();}); const array=bytes=>Uint8Array.from(bytes).buffer; const header=size=>{const value=new Uint8Array(8);value.set([77,67,70,49]);new DataView(value.buffer).setUint32(4,size);return value.buffer;}; test('native RRD crosses many RTC fragments and reaches decoder once, byte-for-byte',()=>{ const payload=execFileSync('../../.venv/bin/python',['-c',`import rerun as rr, numpy as np, sys r=rr.RecordingStream('synthetic-r10-js'); b=r.binary_stream() r.log('points',rr.Points3D(np.random.default_rng(42).random((5000,3)))) sys.stdout.buffer.write(b.read())`]); assert.ok(payload.length>16384); const calls=[]; const receiver=previewFrames(value=>{assertRrd(value);calls.push(value);}); for(let record=0;record<2;record++){ receiver.push(header(payload.length)); for(let offset=0;offset{ let calls=0; const receiver=previewFrames(value=>{assertRrd(value);calls++;}); assert.throws(()=>receiver.push(array([1,2,3]))); assert.throws(()=>receiver.push(header(8*1024*1024+1))); assert.throws(()=>receiver.push(header(0))); receiver.push(header(20));receiver.push(array([1,2]));receiver.close(); assert.equal(calls,0); receiver.push(header(12));assert.throws(()=>receiver.push(array(new Uint8Array(13))));receiver.close(); receiver.push(header(12));assert.throws(()=>receiver.push(array(new Uint8Array(12)))); assert.equal(calls,0); });