csafe
Version:
CSAFE protocol implementation for node.
87 lines (68 loc) • 2.4 kB
JavaScript
const CSAFE = require('../lib/csafe')
const sinon = require('sinon')
const chai = require('chai')
const expect = chai.expect
describe('Frame', () => {
it('deconstructs a given buffer', () => {
let buffer = Buffer.from([0xF1, 0x80, 0x80, 0xF2])
let frame = new CSAFE.Frame(buffer)
expect(frame).to.have.property('type').and.to.eql('standard')
expect(frame).to.have.property('contents')
expect(frame.contents).to.be.an.instanceOf(Buffer)
expect(frame).to.have.property('checksum').and.to.eql(128)
expect(frame.checksum).to.eql(128)
})
it('can stuff and unstuff a single byte', () => {
let byte = 0xF1
let stuffed = CSAFE.Frame.stuffByte(byte)
expect(stuffed).to.eql(0x01)
expect(CSAFE.Frame.unstuffByte(stuffed)).to.eql(byte)
})
it('unstuffs a given buffer when initialized', () => {
let buffer = Buffer.from([0xF1, 0x80, 0xF3, 0x01, 0x71, 0xF2])
let frame = new CSAFE.Frame(buffer)
expect(frame.isStuffed()).to.be.false
})
it('can stuff the buffer', () => {
let buffer = Buffer.from([0xF1, 0x80, 0xF1, 0x71, 0xF2])
let frame = new CSAFE.Frame(buffer)
expect(frame.isStuffed()).to.be.false
frame.stuff()
expect(frame.isStuffed()).to.be.true
expect(frame.buffer.indexOf(CSAFE.Dictionary.flags['StuffFlag'])).to.be.above(0)
})
it('detects invalid checksums', () => {
let buffer = Buffer.from([0xF1, 0x80, 0xF3, 0x01, 0x72, 0xF2])
expect(() => {new CSAFE.Frame(buffer)}).to.throw(CSAFE.InvalidFrameError)
})
})
describe('FrameReader', () => {
it('should emit Frame instances', (done) => {
let reader = new CSAFE.FrameReader
let buffer = Buffer.from([0xF1, 0x80, 0x80, 0xF2])
reader.on('frame', (frame) => {
expect(frame).to.be.an.instanceOf(CSAFE.Frame)
done()
})
reader.read(buffer)
})
it('can read standard Frames', (done) => {
let reader = new CSAFE.FrameReader
let buffer = Buffer.from([0xF1, 0x80, 0x80, 0xF2])
reader.on('frame', (frame) => {
done()
})
reader.read(buffer)
})
it('can read Frames across multiple buffers', (done) => {
let reader = new CSAFE.FrameReader
let buffer1 = Buffer.from([0xF1, 0x80, 0x80])
let buffer2 = Buffer.from([0xF2])
reader.on('frame', (frame) => {
done()
})
reader.read(buffer1)
reader.read(buffer2)
})
})