Files
integrations/test/modbus/test.modbus.discovery.node.ts
T

45 lines
1.6 KiB
TypeScript
Raw Normal View History

2026-05-05 18:06:03 +00:00
import { expect, tap } from '@git.zone/tstest/tapbundle';
import { createModbusDiscoveryDescriptor } from '../../ts/integrations/modbus/index.js';
tap.test('matches manual Modbus TCP entries', async () => {
const descriptor = createModbusDiscoveryDescriptor();
const matcher = descriptor.getMatchers().find((matcherArg) => matcherArg.id === 'modbus-manual-tcp-match');
const result = await matcher!.matches({
host: '192.168.1.50',
port: 502,
type: 'tcp',
name: 'Heat pump Modbus',
unitId: 2,
}, {});
expect(result.matched).toBeTrue();
expect(result.candidate?.integrationDomain).toEqual('modbus');
expect(result.candidate?.port).toEqual(502);
expect(result.candidate?.metadata?.unitId).toEqual(2);
});
tap.test('does not guess serial RTU ports', async () => {
const descriptor = createModbusDiscoveryDescriptor();
const matcher = descriptor.getMatchers().find((matcherArg) => matcherArg.id === 'modbus-manual-tcp-match');
const result = await matcher!.matches({
type: 'serial',
host: '/dev/ttyUSB0',
name: 'RS485 adapter',
}, {});
expect(result.matched).toBeFalse();
expect(result.reason).toContain('Serial RTU');
});
tap.test('validates Modbus TCP candidates', async () => {
const descriptor = createModbusDiscoveryDescriptor();
const validator = descriptor.getValidators()[0];
const result = await validator.validate({
source: 'manual',
integrationDomain: 'modbus',
host: 'plc.local',
}, {});
expect(result.matched).toBeTrue();
expect(result.candidate?.port).toEqual(502);
});
export default tap.start();