@eflexsystems/node-open-protocol
Version:
A library to interface with Power Tools using the Atlas Copco Open Protocol
337 lines (284 loc) • 10.1 kB
JavaScript
//@ts-check
/*
Copyright: (c) 2018-2020, Smart-Tech Controle e Automação
GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt)
*/
const {
expect
} = require('chai');
const OpenProtocolParser = require('../src/openProtocolParser.js');
const Stream = require('stream');
describe("Open Protocol Parser", () => {
it('should be a stream', () => {
expect(new OpenProtocolParser()).to.be.instanceOf(Stream);
});
it('should create a new instance', () => {
expect(new OpenProtocolParser).to.be.instanceOf(Stream);
});
it('should emit an error when input is not a buffer', (done) => {
let parser = new OpenProtocolParser();
parser.on('error', (err) => {
expect(err).to.be.an('error');
done();
});
parser.write({});
});
it('should parse normally when the input is a string', (done) => {
let parser = new OpenProtocolParser();
parser.on('data', (data) => {
expect(data).to.be.deep.equal({
mid: 240,
revision: 1,
noAck: false,
stationID: 1,
spindleID: 1,
sequenceNumber: 0,
messageParts: 0,
messageNumber: 0,
payload: Buffer.from("20")
});
done();
});
// 002202400010 20[Null]
parser.write('002202400010 20\u0000');
});
it('should parse normally when the input is a buffer', (done) => {
let parser = new OpenProtocolParser();
parser.on('data', (data) => {
expect(data).to.be.deep.equal({
mid: 240,
revision: 1,
noAck: false,
stationID: 1,
spindleID: 1,
sequenceNumber: 0,
messageParts: 0,
messageNumber: 0,
payload: Buffer.from("20")
});
done();
});
// 002202400010 20[Null]
parser.write(Buffer.from("3030323230323430303031302020202020202020323000", "hex"));
});
it('should parse normally when the input is a two strings and first message greater than 20', (done) => {
let parser = new OpenProtocolParser();
parser.on('data', (data) => {
expect(data).to.be.deep.equal({
mid: 240,
revision: 1,
noAck: false,
stationID: 1,
spindleID: 1,
sequenceNumber: 0,
messageParts: 0,
messageNumber: 0,
payload: Buffer.from("20")
});
done();
});
// 002202400010 20[Null]
parser.write("002202400010 2");
parser.write("0\u0000");
});
it('should parse normally when the input is a two strings and first message less than 20', (done) => {
let parser = new OpenProtocolParser();
parser.on('data', (data) => {
expect(data).to.be.deep.equal({
mid: 240,
revision: 1,
noAck: false,
stationID: 1,
spindleID: 1,
sequenceNumber: 0,
messageParts: 0,
messageNumber: 0,
payload: Buffer.from("20")
});
done();
});
// 002202400010 20[Null]
parser.write("002202");
parser.write("400010 20\u0000");
});
it('should emit an error when input with wrong length', (done) => {
let parser = new OpenProtocolParser();
parser.on('error', (err) => {
expect(err).to.be.an('error');
done();
});
// AAB202400010 20[Null]
parser.write('AAB202400010 20\u0000');
});
it('should emit an error when input with wrong mid', (done) => {
let parser = new OpenProtocolParser();
parser.on('error', (err) => {
expect(err).to.be.an('error');
done();
});
// 0022024A0010 20[Null]
parser.write('0022024A0010 20\u0000');
});
it('should emit an error when input with wrong revision', (done) => {
let parser = new OpenProtocolParser();
parser.on('error', (err) => {
expect(err).to.be.an('error');
done();
});
// 0022024000A0 20[Null]
parser.write('0022024000A0 20\u0000');
});
it('should emit an error when input with wrong no ack', (done) => {
let parser = new OpenProtocolParser();
parser.on('error', (err) => {
expect(err).to.be.an('error');
done();
});
// 00220240001A 20[Null]
parser.write('00220240001A 20\u0000');
});
it('should emit an error when input with wrong station id', (done) => {
let parser = new OpenProtocolParser();
parser.on('error', (err) => {
expect(err).to.be.an('error');
done();
});
// 0022024000100A 20[Null]
parser.write('0022024000100A 20\u0000');
});
it('should emit an error when input with wrong spindle id', (done) => {
let parser = new OpenProtocolParser();
parser.on('error', (err) => {
expect(err).to.be.an('error');
done();
});
// 002202400010 0B 20[Null]
parser.write('002202400010 0B 20\u0000');
});
it('should emit an error when input with wrong sequence number', (done) => {
let parser = new OpenProtocolParser();
parser.on('error', (err) => {
expect(err).to.be.an('error');
done();
});
// 002202400010 0D 20[Null]
parser.write('002202400010 0D 20\u0000');
});
it('should emit an error when input with wrong message parts', (done) => {
let parser = new OpenProtocolParser();
parser.on('error', (err) => {
expect(err).to.be.an('error');
done();
});
// 002202400010 A 20[Null]
parser.write('002202400010 A 20\u0000');
});
it('should emit an error when input with wrong message number', (done) => {
let parser = new OpenProtocolParser();
parser.on('error', (err) => {
expect(err).to.be.an('error');
done();
});
// 002202400010 B20[Null]
parser.write('002202400010 B20\u0000');
});
it('should parse normally when the input is a string with old defaulds', (done) => {
let parser = new OpenProtocolParser();
parser.on('data', (data) => {
expect(data).to.be.deep.equal({
mid: 240,
revision: 1,
noAck: false,
stationID: 1,
spindleID: 1,
sequenceNumber: 0,
messageParts: 0,
messageNumber: 0,
payload: Buffer.from("20")
});
done();
});
// 00220240 0000 20[Null]
parser.write('00220240 0000 20\u0000');
});
it('should parse normally when the input is a string with and revision equal 000', (done) => {
let parser = new OpenProtocolParser();
parser.on('data', (data) => {
expect(data).to.be.deep.equal({
mid: 240,
revision: 1,
noAck: false,
stationID: 1,
spindleID: 1,
sequenceNumber: 0,
messageParts: 0,
messageNumber: 0,
payload: Buffer.from("20")
});
done();
});
// 00220240000 0000 20[Null]
parser.write('00220240000 0000 20\u0000');
});
it('should emit an error when input with wrong message', (done) => {
let parser = new OpenProtocolParser();
parser.on('error', (err) => {
expect(err).to.be.an('error');
done();
});
// 002202400010 200
parser.write('002202400010 200');
});
it('duas mensagens juntas', (done) => {
let parser = new OpenProtocolParser();
let response = [];
parser.on('data', (data) => {
response.push(data);
if(response.length < 2) return;
expect(response).to.be.deep.equal([{
mid: 240,
revision: 1,
noAck: false,
stationID: 1,
spindleID: 1,
sequenceNumber: 0,
messageParts: 0,
messageNumber: 0,
payload: Buffer.from("20")
},
{
mid: 5555,
revision: 1,
noAck: false,
stationID: 1,
spindleID: 1,
sequenceNumber: 0,
messageParts: 0,
messageNumber: 0,
payload: Buffer.from("20")
}]);
done();
});
// 002202400010 20[Null]
parser.write('002202400010 20\u0000002255550010 20\u0000');
});
it('MID0081 - should parse normally when the input is a string', (done) => {
let parser = new OpenProtocolParser();
parser.on('data', (data) => {
expect(data).to.be.deep.equal({
mid: 81,
revision: 1,
noAck: false,
stationID: 1,
spindleID: 1,
sequenceNumber: 0,
messageParts: 0,
messageNumber: 0,
payload: Buffer.from("2018-06-08:20:50:09")
});
done();
});
// 002202400010 20[Null]
parser.write('0039008100 2018-06-08:20:50:09\u0000');
});
});