19 lines
1.9 KiB
TypeScript
19 lines
1.9 KiB
TypeScript
import assert from "node:assert/strict"
|
|
import { projectTrafficObservations } from "./traffic-observations.js"
|
|
const at=Date.parse("2026-10-12T12:00:00Z"),sampledAt=new Date(at).toISOString(),expiresAt=new Date(at+90_000).toISOString()
|
|
const row={rxNow:0,txNow:0,rxPeak:0,txPeak:0,rxTotal:0,txTotal:0,rxSeries:[0,0],txSeries:[0,0]}
|
|
const obs={rxNow:true,txNow:true,rxSeries:[false,true],txSeries:[false,true],sampledAt,currentState:"current",expiresAt}
|
|
assert.equal(projectTrafficObservations(row,at).rxNow,null)
|
|
const known=projectTrafficObservations({...row,observations:obs},at);assert.equal(known.rxNow,0);assert.deepEqual(known.rxSeries,[null,0])
|
|
assert.equal(known.rxTotal,null)
|
|
assert.equal(projectTrafficObservations({...row,volumeUnit:"GiB",observations:obs},at).rxTotal,0)
|
|
assert.throws(()=>projectTrafficObservations({...row,volumeUnit:"GB",observations:obs},at))
|
|
const stale=projectTrafficObservations({...row,observations:obs},at+90_001);assert.equal(stale.rxNow,null);assert.equal(stale.observations?.currentState,"stale");assert.deepEqual(stale.rxSeries,[null,0])
|
|
assert.equal(projectTrafficObservations({...row,observations:{...obs,currentState:"error"}},at).rxNow,null)
|
|
for(const change of [{rxNow:-1},{observations:{...obs,sampledAt:"bad"}},{observations:{...obs,sampledAt:null}},{observations:{...obs,rxSeries:[]}}])assert.throws(()=>projectTrafficObservations({...row,...change},at))
|
|
console.log("traffic observations nullable/zero/gaps/expiry guards tests ok")
|
|
const noPeak=projectTrafficObservations({...row,volumeUnit:"GiB",observations:{...obs,rxPeak:false,txPeak:false}},at)
|
|
assert.equal(noPeak.rxPeak,null);assert.equal(noPeak.txPeak,null);assert.equal(noPeak.rxTotal,0)
|
|
assert.equal(projectTrafficObservations({...row,observations:{...obs,rxPeak:true,txPeak:true}},at).rxPeak,0)
|
|
console.log('aggregate peak confidence overrides bucket confidence; measured zero and volumes retained')
|