UNPKG

bacstack

Version:

A BACnet protocol stack written in pure JavaScript.

163 lines (149 loc) 4.73 kB
'use strict'; const utils = require('./utils'); const baApdu = require('../../lib/apdu'); describe('bacstack - APDU layer', () => { describe('decodedType', () => { it('should correctly encode and decode a package', () => { const value = [0, 128, 4, 5]; baApdu.setDecodedType(value, 1, 48); const result = baApdu.getDecodedInvokeId(value, 1); expect(result).toEqual(4); }); it('should correctly encode and decode a confirmed service package', () => { const value = [0, 128, 4, 5]; baApdu.setDecodedType(value, 1, 0); const result = baApdu.getDecodedInvokeId(value, 1); expect(result).toEqual(5); }); it('should fail if decode an invalid package', () => { const value = [0, 128, 4, 5]; const result = baApdu.getDecodedInvokeId(value, 1); expect(result).toBeUndefined(); }); }); describe('confirmedServiceRequest', () => { it('should correctly encode and decode a package', () => { const buffer = utils.getBuffer(); baApdu.encodeConfirmedServiceRequest(buffer, 0, 41, 176, 12, 44, 45, 46); const result = baApdu.decodeConfirmedServiceRequest(buffer.buffer, 0); expect(result).toEqual({ len: 4, type: 0, service: 41, maxSegments: 176, maxApdu: 12, invokeId: 44, sequencenumber: 0, proposedWindowNumber: 0 }); }); it('should correctly encode and decode a segmented package', () => { const buffer = utils.getBuffer(); baApdu.encodeConfirmedServiceRequest(buffer, 8, 47, 208, 14, 50, 51, 52); const result = baApdu.decodeConfirmedServiceRequest(buffer.buffer, 0); expect(result).toEqual({ len: 6, type: 8, service: 47, maxSegments: 208, maxApdu: 14, invokeId: 50, sequencenumber: 51, proposedWindowNumber: 52 }); }); }); describe('unconfirmedServiceRequest', () => { it('should correctly encode and decode a package', () => { const buffer = utils.getBuffer(); baApdu.encodeUnconfirmedServiceRequest(buffer, 33, 34); const result = baApdu.decodeUnconfirmedServiceRequest(buffer.buffer, 0); expect(result).toEqual({ len: 2, type: 33, service: 34 }); }); }); describe('simpleAck', () => { it('should correctly encode and decode a package', () => { const buffer = utils.getBuffer(); baApdu.encodeSimpleAck(buffer, 11, 12, 13); const result = baApdu.decodeSimpleAck(buffer.buffer, 0); expect(result).toEqual({ len: 3, type: 11, service: 12, invokeId: 13 }); }); }); describe('complexAck', () => { it('should correctly encode and decode a package', () => { const buffer = utils.getBuffer(); baApdu.encodeComplexAck(buffer, 0, 15, 16, 20, 21); const result = baApdu.decodeComplexAck(buffer.buffer, 0); expect(result).toEqual({ len: 3, type: 0, service: 15, invokeId: 16, sequencenumber: 0, proposedWindowNumber: 0 }); }); it('should correctly encode and decode a segmented package', () => { const buffer = utils.getBuffer(); baApdu.encodeComplexAck(buffer, 8, 18, 19, 20, 21); const result = baApdu.decodeComplexAck(buffer.buffer, 0); expect(result).toEqual({ len: 5, type: 8, service: 18, invokeId: 19, sequencenumber: 20, proposedWindowNumber: 21 }); }); }); describe('segmentAck', () => { it('should correctly encode and decode a package', () => { const buffer = utils.getBuffer(); baApdu.encodeSegmentAck(buffer, 6, 7, 8, 9); const result = baApdu.decodeSegmentAck(buffer.buffer, 0); expect(result).toEqual({ len: 4, type: 6, originalInvokeId: 7, sequencenumber: 8, actualWindowSize: 9 }); }); }); describe('error', () => { it('should correctly encode and decode a package', () => { const buffer = utils.getBuffer(); baApdu.encodeError(buffer, 5, 6, 7); const result = baApdu.decodeError(buffer.buffer, 0); expect(result).toEqual({ len: 3, type: 5, service: 6, invokeId: 7 }); }); }); describe('abort', () => { it('should correctly encode and decode a package', () => { const buffer = utils.getBuffer(); baApdu.encodeAbort(buffer, 4, 5, 6); const result = baApdu.decodeAbort(buffer.buffer, 0); expect(result).toEqual({ len: 3, type: 4, invokeId: 5, reason: 6 }); }); }); });