const assert = require('assert');
|
const { formatReceivedTimestamp, normalizeIp, TcpService } = require('../tcp-service');
|
const { buildFrame, buildBloodPressurePayload } = require('../tcp-simulator');
|
|
describe('tcp-service', () => {
|
it('normalizes IPv4 mapped addresses', () => {
|
assert.strictEqual(normalizeIp('::ffff:192.168.1.10'), '192.168.1.10');
|
assert.strictEqual(normalizeIp('127.0.0.1'), '127.0.0.1');
|
});
|
|
it('formats receive timestamp', () => {
|
assert.strictEqual(formatReceivedTimestamp(new Date('2026-05-12T10:20:30')), '2026-05-12 10:20:30');
|
});
|
|
it('adds M when blood pressure frame is handled', async () => {
|
let receivedMetric = null;
|
const service = new TcpService({
|
tcpConfig: { maxBufferBytes: 8192 },
|
devices: [],
|
alModelPath: './alModel.json',
|
logger: { info() {}, warn() {}, error() {}, debug() {} },
|
onMetric(_device, metric) {
|
receivedMetric = metric;
|
},
|
});
|
const fakeSocket = {};
|
|
service.sessions.set(fakeSocket, {
|
device: { deviceId: 'JH-001', ip: '127.0.0.1' },
|
decoder: {
|
push() {
|
return [{
|
ok: true,
|
publish: true,
|
messageType: 'blood-pressure',
|
metric: { N: 120, O: 80, P: 76 },
|
}];
|
},
|
},
|
});
|
|
service.handleData(fakeSocket, buildFrame(1, 0x01, 0x01, buildBloodPressurePayload()));
|
|
assert.strictEqual(receivedMetric.N, 120);
|
assert.strictEqual(receivedMetric.O, 80);
|
assert.strictEqual(receivedMetric.P, 76);
|
assert.match(receivedMetric.M, /^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/);
|
});
|
});
|