Files
OpenSquawk/tests/server/bridgeTelemetry.test.ts
2026-02-17 18:36:13 +01:00

86 lines
2.7 KiB
TypeScript

import { describe, it } from 'node:test'
import assert from 'node:assert/strict'
import { getBridgeLog, logBridgeEvent } from '~~/server/utils/bridgeLog'
import { getBridgeTokenFromHeader, normalizeBridgeToken } from '~~/server/utils/bridge'
import { flightlabTelemetryStore } from '~~/server/utils/flightlabTelemetry'
describe('bridge token handling', () => {
it('normalizes valid tokens and rejects invalid inputs', () => {
assert.equal(normalizeBridgeToken(' bridge-token-123 '), 'bridge-token-123')
assert.equal(normalizeBridgeToken('abc'), null)
assert.equal(normalizeBridgeToken(' '.repeat(10)), null)
assert.equal(normalizeBridgeToken(1234), null)
assert.equal(normalizeBridgeToken('x'.repeat(257)), null)
})
it('reads and normalizes x-bridge-token from request headers', () => {
const event = {
node: {
req: {
headers: {
'x-bridge-token': ' live-bridge-token ',
},
},
},
} as any
assert.equal(getBridgeTokenFromHeader(event), 'live-bridge-token')
})
})
describe('bridge log store', () => {
it('keeps only the latest 200 entries and supports since filtering', () => {
const token = `tok-${Date.now()}-${Math.random().toString(36).slice(2)}`
for (let i = 0; i < 205; i++) {
logBridgeEvent(token, {
endpoint: '/api/bridge/data',
method: 'POST',
statusCode: 200,
color: 'green',
summary: `entry-${i}`,
})
}
const all = getBridgeLog(token)
assert.equal(all.length, 200)
assert.equal(all[0]!.summary, 'entry-5')
assert.equal(all[199]!.summary, 'entry-204')
assert.equal(all[0]!.id < all[199]!.id, true)
const sinceId = all[149]!.id
const sinceEntries = getBridgeLog(token, sinceId)
assert.equal(sinceEntries.length, 50)
assert.equal(sinceEntries.every((entry) => entry.id > sinceId), true)
})
})
describe('flightlab telemetry store', () => {
it('stores latest telemetry and notifies listeners', () => {
const userId = `user-${Date.now()}`
const received: any[] = []
const unsubscribe = flightlabTelemetryStore.subscribe((incomingUserId, data) => {
if (incomingUserId === userId) {
received.push(data)
}
})
flightlabTelemetryStore.update(userId, { IAS: 121, ALT: 4500 })
const latest = flightlabTelemetryStore.get(userId)
assert.equal(latest?.IAS, 121)
assert.equal(latest?.ALT, 4500)
assert.equal(typeof latest?.timestamp, 'number')
assert.equal(received.length, 1)
const callsBeforeUnsubscribe = received.length
unsubscribe()
flightlabTelemetryStore.update(userId, { IAS: 130 })
assert.equal(flightlabTelemetryStore.get(userId)?.IAS, 130)
assert.equal(received.length, callsBeforeUnsubscribe)
})
})