Preserve RRD preview frames and clarify onboard K1 status
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
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<payload.length;offset+=16384){
|
||||
receiver.push(array(payload.subarray(offset,offset+16384)));
|
||||
if(offset+16384<payload.length)assert.equal(calls.length,record);
|
||||
}
|
||||
assert.deepEqual(Buffer.from(calls[record]),payload);
|
||||
}
|
||||
assert.equal(calls.length,2);
|
||||
receiver.close();
|
||||
});
|
||||
test('partial, oversized, unframed and invalid records never enter the decoder',()=>{
|
||||
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);
|
||||
});
|
||||
Reference in New Issue
Block a user