55 lines
1.7 KiB
JavaScript
55 lines
1.7 KiB
JavaScript
'use strict'
|
|
|
|
const tap = require('tap')
|
|
const { BerReader } = require('@ldapjs/asn1')
|
|
const parseToMessage = require('./parse-to-message')
|
|
|
|
const messageBytesArrays = require('./messages/_fixtures/message-byte-arrays')
|
|
|
|
tap.test('throws if input not a BerReader', async t => {
|
|
const input = Buffer.from([0x30, 0x01, 0x64])
|
|
t.throws(
|
|
() => parseToMessage(input),
|
|
Error('Expected BerReader but got [object Uint8Array]')
|
|
)
|
|
})
|
|
|
|
tap.test('throws if sequence is invalid', async t => {
|
|
const input = new BerReader(Buffer.from([0x0a, 0x01, 0x64]))
|
|
t.throws(
|
|
() => parseToMessage(input),
|
|
Error('Expected 0x02: got 0x64')
|
|
)
|
|
})
|
|
|
|
tap.test('parses messages correctly', async t => {
|
|
for (const [name, messageBytes] of Object.entries(messageBytesArrays)) {
|
|
t.comment(`verifying message bytes: ${name}`)
|
|
const expected = Buffer.from(messageBytes)
|
|
const reader = new BerReader(expected)
|
|
const message = parseToMessage(reader)
|
|
const found = message.toBer().buffer
|
|
const isEqual = t.equal(expected.compare(found), 0, `${name} comparison`)
|
|
|
|
if (isEqual === false) {
|
|
const diff = {}
|
|
for (let i = 0; i < expected.length; i += 1) {
|
|
if (expected[i] !== found[i]) {
|
|
diff[i] = {
|
|
expected: Number(expected[i]).toString(16),
|
|
found: Number(found[i]).toString(16)
|
|
}
|
|
}
|
|
}
|
|
t.fail(`${name} differs`, diff)
|
|
}
|
|
}
|
|
})
|
|
|
|
tap.test('parses search req with evolution filter', async t => {
|
|
const messageBytes = require('./_fixtures/evolution-filter-req')
|
|
const messageBuffer = Buffer.from(messageBytes)
|
|
const message = parseToMessage(new BerReader(messageBuffer))
|
|
t.equal(messageBuffer.compare(message.toBer().buffer), 0)
|
|
})
|