jsmodbus
Version:
Implementation for the Serial/TCP Modbus protocol.
94 lines (71 loc) • 2.9 kB
JavaScript
/* global describe, it, beforeEach */
const assert = require('assert')
const sinon = require('sinon')
const EventEmitter = require('events')
const ReadCoilsRequest = require('../src/request/read-holding-registers.js')
const ReadHoldingRegistersResponseBody = require('../src/response/read-holding-registers.js')
const ModbusRTUResponse = require('../src/rtu-response.js')
const ExceptionResponse = require('../src/response/exception.js')
const ModbusRTUClientRequestHandler = require('../src/rtu-client-request-handler.js')
describe('Modbus/RTU Client Request Tests', function () {
let socket
let socketMock
beforeEach(function () {
socket = new EventEmitter()
socket.write = function () {}
socketMock = sinon.mock(socket)
})
/* we are using the read coils function to test the rtu request specifics */
describe('Register Test.', function () {
it('should register an rtu request', function () {
const handler = new ModbusRTUClientRequestHandler(socket, 4)
const readCoilsRequest = new ReadCoilsRequest(0x4321, 0x0120)
socket.emit('open')
socketMock.expects('write').once()
const promise = handler.register(readCoilsRequest)
assert.ok(promise instanceof Promise)
socketMock.verify()
})
})
describe('Handle Data Tests.', function () {
it('should register an rtu request and handle a response', function (done) {
const ReadHoldingRegistersRequestBody = require('../src/request/read-holding-registers.js')
const handler = new ModbusRTUClientRequestHandler(socket, 1)
const request = new ReadHoldingRegistersRequestBody(0, 1)
const response = new ReadHoldingRegistersResponseBody(1, Buffer.from([0x00, 0x32]))
const rtuResponse = new ModbusRTUResponse(1, 0x91C9, response)
socket.emit('open')
socketMock.expects('write').once()
handler.register(request)
.then(function (resp) {
assert.ok(true)
socketMock.verify()
done()
}).catch(function () {
assert.ok(false)
done()
})
handler.handle(rtuResponse)
})
it('should register an rtu request and handle a exception response', function (done) {
const ReadCoilsRequest = require('../src/request/read-coils.js')
const handler = new ModbusRTUClientRequestHandler(socket, 4)
const request = new ReadCoilsRequest(0x0000, 0x0008)
const response = new ExceptionResponse(0x81, 0x01)
const rtuResponse = new ModbusRTUResponse(4, 8352, response)
socket.emit('open')
socketMock.expects('write').once()
handler.register(request)
.then(function (resp) {
assert.ok(false)
done()
}).catch(function () {
assert.ok(true)
socketMock.verify()
done()
})
handler.handle(rtuResponse)
})
})
})